Visualizzazione risultati 1 fino 11 di 11

Discussione: [php] elencare le directory presenti nella DocumentRoot

  1. #1
    Guest

    Predefinito [php] elencare le directory presenti nella DocumentRoot

    ciao a tutti,
    da qualche giorno sto realizzando uno script che faccia questo:

    ho ad esempio il sito organizzato così:
    /
    /guide
    /index.php

    lo script dovrebbe stampare il seguente output:
    Codice:
    <ul class="hmenu">
    <li><a href="http://sito/guide">Guide</a></li>
    </ul>
    se io faccio:
    Codice PHP:
    <?php
    function displaymenu() {
    echo
    '<ul class="hmenu">';
    $dir = '/home/francesco/Desktop/www';

    if (
    $handle = opendir($dir)) {
    while (
    false !== ($file = readdir($handle))) {
    if (((
    fileperms($file) & 0x4000) == 0x4000) && $file != '.' && $file != '..') {
    echo(
    '<li><a href="http://'.$_SERVER['HTTP_HOST'].'/'.$file.'/">'.ucwords($file).'</a></li>');
    }
    }
    closedir($handle);
    }
    }
    ?>
    sapete dirmi come risolvere quest'errore che compare quando includo lo script dalle sottocartelle (è una funzione):
    Warning: fileperms() [function.fileperms]: stat failed for css in /home/francesco/Desktop/www/displaymenu.php on line 34
    .

    grazie per le eventuali risposte :)
    Ultima modifica di Rommel : 28-03-2005 alle ore 15.39.45

  2. #2
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    fileperms($file)

    il problema si trova qui, ma in realtà il problema è il displaymenu.php
    postane il codice

  3. #3
    Guest

    Predefinito

    displaymenu.php è il file che ho postato (ho eliminato solo i commenti);
    questo file viene incluso sia da /index.php (da esso funziona bene) sia da /inc/test.php qui dà l'errore

  4. #4
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    quell'errore te lo da solo con la cartella css?

    ci sono altre cartelle dentro /inc?

    quelle te le mostra?

    (per sicurezza dai un occhiata ai permessi... e assicurati che l'user sui cui gira apache abbia i permessi per accede a pieno titolo su tali cartelle...)
    Ultima modifica di Evcz : 28-03-2005 alle ore 19.47.27
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  5. #5
    Guest

    Predefinito

    quando il pc è acceso potete vedere l'esempio qui:
    www.occasus.zapto.org
    www.occasus.zapto.org/inc/test.php

    ho provato ad eseguire questo comando:
    chown -R apache:apache ??* && chown apache:apache .

    le cartelle sono tutte a 755 e i file a 644, però non funziona niente.

    precisamente ho le cartelle disposte così:
    /
    index.php
    displaymenu.php
    /inc
    ->test.php
    ->e altri file e sottodirectoy
    /css
    ->style.css

    p.s. ho provato ad usare is_dir però non funziona perché is_dir($file) è sempre falso :(

  6. #6
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    qui mi prendi male...

    sembra sia un problema di server più che di script php...

    /css è una cartella vera come /inc oppure un link virtuale?

    i comandi per l'own non li so :( io ci clicco sopra col destro e li assegno a chi voglio :D
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  7. #7
    Guest

    Predefinito

    allora:
    tutti i file e le cartelle sono reali.
    il problema è per tutti i valori di $file , quindi anche /inc . io ho scritto 1 per abbreviare ( vedi su occasus.zapto.org )

    ho provato anche su un altro server...niente

    sembra quasi che non accetti i percorsi assoluti...

    con altri sistemi ( http://forum.html.it/forum/showthrea...hreadid=809167 ) non va nemmeno...
    funziona solo in /(index.php) . nelle sottodirectory no.

    ho persino provato a fare $file = explode(' ', system('ls /home/francesco/Desktop/www'));
    ma esce l'output semplice di ls.

    mi sembra che la soluzione estrema a questo punto sia fare uno script in perl o bash :(

  8. #8
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    mmmm....

    allora...

    prova a ripartire da 0 :)

    provato con uno scandir() avendo l'accortezza di aggiungere ogni volta il pathname assoluto dopo aver letto il nome della cartella?

    guarda i commenti a questa pag che magari ti tornano utili ;)
    http://www.php.net/scandir
    Ultima modifica di Evcz : 28-03-2005 alle ore 22.19.07
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  9. #9
    Guest

    Predefinito

    nel mio pc ho php5, l'host ha php4.

    ho provato con scandir() ma non sono riuscito.

    tutti gli script che ho letto fanno una specie di elenco ricorsivo delle cartelle e delle sottodirectory.
    invece io voglio fare l'elenco delle sole directory presenti in /

  10. #10
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    hai provato il secondo?

    ti permette di decidere il livello di profondità:
    Codice PHP:
    $levels: 1 => look in the $path only; 2 => $path and all children;
    3 => $path, children, grandchildren; 0 => $path and all subdirectories;
    ed il tipo di file
    Codice PHP:
    $types: 2 => files; 1 => directories; 3 => both;
    ;)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  11. #11
    Guest

    Predefinito

    Provati questo codice forse ti è utile

    /////////////////////////////////////////////////

    <?php
    function dir_list($directory = FALSE)
    {
    $dirs = array();
    $files = array();

    if ($handle = opendir("./" . $directory))
    {
    while ($file = readdir($handle))
    {
    if (is_dir("./{$directory}/{$file}"))
    {
    if ($file != "." & $file != "..") $dirs[] = $file;
    }
    else
    {
    if ($file != "." & $file != "..") $files[] = $file;
    }
    }
    }
    closedir($handle);

    reset($dirs);
    sort($dirs);
    reset($dirs);

    reset($files);
    sort($files);
    reset($files);

    echo "<ul><strong>Cartelle:</strong>\n";
    while(list($key, $value) = each($dirs))
    {
    $d++;
    echo "<li><a href=\"{$value}\">{$value}/</a>\n";
    }
    echo "</ul>\n";
    echo "<ul><strong>Files:</strong>\n";
    while(list($key, $value) = each($files))
    {
    $f++;
    echo "<li><a href=\"{$value}\">{$value}</a>\n";
    }
    echo "</ul>\n";

    if (!$d) $d = "0";
    if (!$f) $f = "0";
    echo "Sono presenti <strong>{$d}</strong> cartelle e <strong>{$f}</strong> file(s).</strong>\n";
    }

    dir_list("tua_cartella");
    ?>

    ///////////////////////


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •