Visualizzazione risultati 1 fino 20 di 20

Discussione: [php] readdir... difettoso?

  1. #1
    Guest

    Predefinito [php] readdir... difettoso?

    Salve a tutti...

    con questo codice
    Codice PHP:
    <?php
    $cartella
    = opendir('./set/foto_album');
    while (
    $file = readdir($cartella)) {
    $file_array[] = $file;
    }
    echo(
    "<br />");
    foreach (
    $file_array as $file) {
    if (
    $file == ".." || $file == ".") {
    continue;
    }
    echo
    "<a href='./set/foto_album/$file' target='_blank' class='album'><img src='./set/foto_album/$file' border='0' width='60' height='58'></a>&nbsp;&nbsp;";
    }
    echo(
    "<br />");
    ?>
    ho la possibilità di vedere il contenuto della cartella (composta di sole immagini), infatti le immagini vengono viste in una miniatura...

    Il mio problema è che all'interno della cartella set, dove è contenuto anche lo script (read_album.php), è presente una seconda cartella (img) dove c'è un'immagine e lo script read_album.php mi "legge" anche il contenuto di img però al posto della miniatura mi viene la classica X rossa (su internet exp)...

    Secondo voi da cosa può dipendere il problema?

    Spero di esseremi spiegato bene!

    ciao e grazie a tutti

  2. #2
    Guest

    Predefinito

    Se lo script in questione è nella cartella 'set/' il percorso specificato è sbagliato.
    Dovresti indicare './fotoalbum'


    Ciao!

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    Se lo script in questione è nella cartella 'set/' il percorso specificato è sbagliato.
    Dovresti indicare './fotoalbum'
    scusa non ho specificato di dire che lo script viene eseguito con un include fuori da set, cioè cartella/set/foto_album/... in pratica la cartella precedente a set...


    ciao

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Non è ricorsivo, non legge il file all'interno di img, ma legge img.
    devi fare un controllo per veridicare che l'entry letta non sia una directory, mi pare esista una cosa tipo is_file()
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  5. #5
    Guest

    Predefinito

    Codice PHP:
    $file_null = array(
    '.', //Lasciare
    '..', //Lasciare
    #Inserisci qui i file da non mostrare
    );

    $directory_open = opendir('./set/foto_album/');

    while(
    false !== ($file = readdir($directory_open)))
    {
    if(!
    in_array($file, $file_null))
    {
    if(
    is_file($file))
    {
    print
    '<a href="./set/foto_album/' . $file . '" target="_blank" class="album"><img src="./set/foto_album/' . $file . '" border="0" width="60" height="58"></a>&nbsp;&nbsp;';
    }
    }
    }
    closedir();

  6. #6
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    perché la gente suda ancora con opendir/readdir? nessuno si ricorda di glob()?

    Codice PHP:
    $immagini = glob( './set/foto_album/*.jpg' );

    // $immagini = array_merge( $immagini, glob( './set/foto_album/*.png') ); // altre estensioni?

    foreach ( $immagini as $file )
    echo
    '<a href="./set/foto_album/' . $file . '" target="_blank" class="album"><img src="./set/foto_album/' . $file . '" border="0" width="60" height="58"></a>';

    edit: echo è più veloce di print, ed in_array eseguita ad ogni iterazione rallenta assai.
    Ultima modifica di dreadnaut : 03-06-2009 alle ore 13.29.23

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    [...] edit: echo è più veloce di print, ed in_array eseguita ad ogni iterazione rallenta assai.
    Grazie per la "segnalazione", ne terrò atto

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    perché la gente suda ancora con opendir/readdir? nessuno si ricorda di glob()?

    Codice PHP:
    $immagini = glob( './set/foto_album/*.jpg' );

    // $immagini = array_merge( $immagini, glob( './set/foto_album/*.png') ); // altre estensioni?

    foreach ( $immagini as $file )
    echo
    '<a href="./set/foto_album/' . $file . '" target="_blank" class="album"><img src="./set/foto_album/' . $file . '" border="0" width="60" height="58"></a>';
    grazie della tua segnalazione dreadnaut, sconoscevo questa funzione...
    Però esiste un modo per far vedere le sole immagini senza inserire io le estesioni?
    Se io facessi
    $immagini = glob( './set/foto_album/*' );
    mi farebbe visualizzare tutti i files contenuti dentro la cartella?

    in alternativa invece dovrei fare così (?)
    Codice PHP:
    $immagini = glob( './set/foto_album/*.jpg' );
    $immagini = array_merge( $immagini, glob( './set/foto_album/*.png') );
    $immagini = array_merge( $immagini, glob( './set/foto_album/*.gif') );
    //etc

    foreach ( $immagini as $file )
    echo
    '<a href="./set/foto_album/' . $file . '" target="_blank" class="album"><img src="./set/foto_album/' . $file . '" border="0" width="60" height="58"></a>';
    ringrazio anche gli altri per le risposte :-)

    ciao a tutti

    EDIT:
    @ biccheddu: il tuo script non funziona
    Ultima modifica di TurkoSoft : 03-06-2009 alle ore 19.42.47

  9. #9
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Dipende da cosa c'è nella directory...

    Glob non restituisce file speciali come . e .., ma ritorna directory. Usando il flag GLOB_MARK puoi distinguere fra file e directory senza dover fare is_dir per ognuna di esse.

    Poi se nella directory ci sono file che non sono immagini (e ciò è male, dovresti dividere le cose ) allora devi controllare a mano, oppure aggiungere tutte le estensioni come sopra.

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Poi se nella directory ci sono file che non sono immagini (e ciò è male, dovresti dividere le cose ) allora devi controllare a mano, oppure aggiungere tutte le estensioni come sopra.
    no no nella cartella ci sono solo immagini...
    ho provato il tuo script però mi da lo stesso errore che esce con opendir, e cioè che mi legge anche il contenuto della seconda cartella!

    Per farvi capire l'albero delle cartelle

    ./CARTELLA SCRIPT
    - set
    ---foto_album
    ---seconda-cartella
    ---read_album.php

    da cosa può dipendere questo "contrasto"?
    Perchè qualsiasi script utilizzo, deve andare a leggere anche il contenuto della seconda cartella?

    ciao e grazie
    Ultima modifica di TurkoSoft : 03-06-2009 alle ore 20.36.49

  11. #11
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Se ci sono solo immagini, puoi felicemente usare glob( 'set/foto_album/*' ) e via, senza estensioni.

    Glob e readdir leggono una directory e non sono ricorsivi, quindi se vedi roba che non dovrebbe essere li, c'è un errore da un'altra parte, di certo non li.

    Ipotesi: hai sbagliato a caricare i file e li hai messi tutti in foto_album; c'è qualche pezzo di codice, chiamata di funzione o altro, che ti sei dimenticato e legge l'altra cartella.

  12. #12
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Se ci sono solo immagini, puoi felicemente usare glob( 'set/foto_album/*' ) e via, senza estensioni.

    Glob e readdir leggono una directory e non sono ricorsivi, quindi se vedi roba che non dovrebbe essere li, c'è un errore da un'altra parte, di certo non li.

    Ipotesi: hai sbagliato a caricare i file e li hai messi tutti in foto_album; c'è qualche pezzo di codice, chiamata di funzione o altro, che ti sei dimenticato e legge l'altra cartella.
    allora in pratica nella seconda cartella (ormai chiamata così) c'è 1 sola immagine, con nome 123456.jpg (esempio).
    quando eseguo lo script di read_album.php, al primo posto vedo quella X rossa (o immagine rotta in FF) e come percorso (URL) vedo http://sitoetc.altervista.org/cartella_script/set/foto_album/123456.jpg

    Ma l'immagine 123456.jpg non esiste e non è presente in quella cartella, ma bensì è contenuta in seconda cartella!
    Come è possibile se eseguo quel tuo script che mi succede la stessa cosa di readdir?

    grazie della tua pazienza

  13. #13
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Io non posso che ripeterti: l'errore non è li, è per quello che si verifica in entrambi i casi. A questo punto, o posti l'intero sorgente della pagine, o altro non si può dire

  14. #14
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Io non posso che ripeterti: l'errore non è li, è per quello che si verifica in entrambi i casi. A questo punto, o posti l'intero sorgente della pagine, o altro non si può dire
    praticamente il contenuto della seconda cartella è letto sempre con readdir, però un altro codice apparte, però identico a quello postato da me in precedenza...

    se serve altro basta chiedere :-)

    grazie

  15. #15
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    non aiuta molto, quello lo immaginavo già

    butto li la cosa che mi sembra più probabile: ti svanisci di svuotare l'array. Aggiungi qualcosa tipo questo, prima di leggere la seconda directory.
    Codice PHP:
    $file_array = array();

  16. #16
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    non aiuta molto, quello lo immaginavo già

    butto li la cosa che mi sembra più probabile: ti svanisci di svuotare l'array. Aggiungi qualcosa tipo questo, prima di leggere la seconda directory.
    Codice PHP:
    $file_array = array();
    ok proverò :-)

    ma come è possibile che 2 script separati si mischino???

    delucidami o grande dreadnaut, signore del PHP


    ciao

  17. #17
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Ma!

    Avevo letto "due codici separati", non "due script". Se sono in due pagine diverse non si possono disturbare a vicenda.

    Più seriamente, senza codice davvero non so più che dirti. E' certo che l'errore non sia nello spezzone che legge foto_album, quindi qualcosa prima disturba e lascia da qualche parte il nome dell'altra immagine.

    (E' sempre una sola? è sempre la stessa anche se ce ne sono due?)

  18. #18
    Guest

    Predefinito

    allora il tutto è riepilogato in:

    2 script della stessa tipologia, chiamati read_album.php e read_foto.php

    read_album.php legge il contenuto della cartella foto_album
    read_foto.php legge il contenuto della cartella foto (in precedenza seconda-cartella)

    gli script sono contenuti nella cartella set, ma vengono eseguiti nella cartella precedente (cartella script) in un files .php e sono richiamati da un include

    se serve altro, sono ai tuoi ordini

    grazie per il tuo prezioso aiuto

  19. #19
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    aaaah, include!

    Se includi i due file nella stessa pagina, allora fanno parte dello stesso script. Prova ad inscatolare i due sotto-script in due funzioni, e poi chiama quelle dopo aver fatto l'include, e secondo me il problema svanisce.

  20. #20
    Guest

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    aaaah, include!
    hai una soluzione migliore?

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Se includi i due file nella stessa pagina, allora fanno parte dello stesso script. Prova ad inscatolare i due sotto-script in due funzioni, e poi chiama quelle dopo aver fatto l'include, e secondo me il problema svanisce.
    quindi dovrei fare un unico script, e poi quando faccio include, restituisco il risultato con un echo nel punto dove voglio io?


    grazie

    EDIT:
    dreadnaut sei mitico! In pratica ho preso spunto da quello che mi hai detto tu e allora dato che gli script erano IDENTICI ma cambiava solo il percorso di opendir, mi è bastato cambiare le variabili... esempio: $file = $files
    In questo modo risulta diverso e gli include non si mischiano!

    grazie mille
    Ultima modifica di TurkoSoft : 04-06-2009 alle ore 18.14.28

Regole di scrittura

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