Visualizzazione risultati 1 fino 15 di 15

Discussione: Problema con unlink() e aggiornamento elenco file cartella

  1. #1
    Guest

    Exclamation Problema con unlink() e aggiornamento elenco file cartella

    Vi espongo brevemente il mio problema, premetto che sono alle prime armi per quanto riguarda il linguaggio PHP:
    ho creato questo piccolo script che mi elenca i files presenti in una cartella e ad ogni file elencato inserisce un link per il downloads (richiamato con altro file) e per cancellare il file stesso.
    Premetto che funziona, solo che vorrei ,una volta cliccato il link per cancellare il file, che venga aggiornata la lista dei file in modo automatico e non quando aggiorno la pagina in manuale.

    Non so se sono stato chiaro...grazie di cuore, sto uscendo pazzo!!!



    Codice PHP:
    <table class="table"><tr><th>Nome</th><th>Aggiunto il</th><th>Azioni</th></tr>

    <?php

    // Nome della cartella...
    $dir = 'logo/';

    // Apertura...
    $handle = opendir($dir);

    // Lettura...
    while (false !== ($files = readdir($handle))) {

    // Escludo gli elementi '.' poi '..' e index.php e stampo il nome del file...
    if ($files != '.' && $files != '..' && $files != 'index.php')

    echo
    '<tr>
    <th>'
    .$files.'</th>
    <th>'
    .date("d-m-Y H:i", filemtime($dir.$files)).'</th>
    <th><a href="logo.php?nome_file=logo/'
    .$files.'" onClick="return confirm(\'Sei sicuro di voler cancellare il file?\')" style="text-decoration:none; font-weight:bold" title="Cancella">Cancella</a> -
    <a style="text-decoration:none; font-weight:bold" href="download.php?file=logo/'
    .$files.'" title="Download">Dowload</a></th>
    </tr> '
    ;


    }
    if (
    $file = $_GET['nome_file']) {
    unlink("$file") OR DIE("Impossibile cancellare il file</table>
    </body>
    </html>"
    );
    echo
    'File cancellato correttamente';

    }

    // Chiusura...
    closedir($handle);
    ?>

    </table>

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,769

    Predefinito

    Per aggiornare la pagina in modo automatico dovresti utilizzare la funzione header() del php, ma dovresti utilizzarla prima di stampare qualcosa a video, non so se mi spiego, altrimenti dovresti usare AJAX, no php, se vuoi aggiornare l'elenco senza aggiornare la pagina.
    Ultima modifica di sevenjeak : 21-02-2012 alle ore 23.59.50

    Sevenjeak
    Software developer and much more

  3. #3
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Prova ad eseguire prima l'eliminazione, poi mostrare l'elenco:

    Codice PHP:
    <table class="table"><tr><th>Nome</th><th>Aggiunto il</th><th>Azioni</th></tr>

    <?php

    // Nome della cartella...
    $dir = 'logo/';


    if (
    $file = $_GET['nome_file']) {
    unlink("$file") OR DIE("Impossibile cancellare il file</table>
    </body>
    </html>"
    );
    echo
    'File cancellato correttamente';

    }


    // Apertura...
    $handle = opendir($dir);

    // Lettura...
    while (false !== ($files = readdir($handle))) {

    // Escludo gli elementi '.' poi '..' e index.php e stampo il nome del file...
    if ($files != '.' && $files != '..' && $files != 'index.php')

    echo
    '<tr>
    <th>'
    .$files.'</th>
    <th>'
    .date("d-m-Y H:i", filemtime($dir.$files)).'</th>
    <th><a href="logo.php?nome_file=logo/'
    .$files.'" onClick="return confirm(\'Sei sicuro di voler cancellare il file?\')" style="text-decoration:none; font-weight:bold" title="Cancella">Cancella</a> -
    <a style="text-decoration:none; font-weight:bold" href="download.php?file=logo/'
    .$files.'" title="Download">Dowload</a></th>
    </tr> '
    ;


    }

    // Chiusura...
    closedir($handle);
    ?>

    </table>


    Per eliminare un file, prima (forse) è meglio verificare la sua esistenza, ad esempio:

    (solo il "pezzo" che elimina):
    Codice PHP:
    if ($file = $_GET['nome_file']) {
    if(
    file_exists($file)) {
    unlink("$file") OR DIE("Impossibile cancellare il file</table>
    </body>
    </html>"
    );
    echo
    'File cancellato correttamente';
    }
    else echo
    'Nessun file da cancellare';
    }
    Ciao!

  4. #4
    Guest

    Thumbs up

    Grazie 1000 Alemoppo, rido come un bambino, credetemi, sono stato ore e ore a guardare il codice, a fare ricerche, modifiche su modifiche e alla fine mi sono arreso...poi in mezzo secondo mi hai risolto il tutto....si vede che sono alle prime armi.....grazieeeeeeeeeeeeeeeeeeeeeeeee....sei un genio e io nu scemu...hahahah!!!

    EDIT:
    Per quanto riguarda il codice seguente di Alemoppo:
    Codice PHP:
    if ($file = $_GET['nome_file']) {
    if(
    file_exists($file)) {
    unlink("$file") OR DIE("Impossibile cancellare il file</table>
    </body>
    </html>"
    );
    echo
    'File cancellato correttamente';
    }
    else echo
    'Nessun file da cancellare';
    }
    Non visualizza, nella pagina, il messaggio "Nessun file da cancellare" se non è presente nella cartella alcun file, ma solo se, una volta cancellato il file, si riprova a ricancellarlo.

    Cosa devo scrivere e dove devo mettere il codice se volessi far apparire il messaggio, nella pagina, quando non è presente nessun file?
    Attualmente, se non vi è nessun file nella cartella, non visualizza nulla.
    Ultima modifica di alemoppo : 22-02-2012 alle ore 16.13.03 Motivo: Non fare post consecutivi: usa il tasto "Edita" per editare i messaggi.

  5. #5
    Guest

    Predefinito

    Puoi utilizzare glob() e trattare la lista come un array(), poi controllare che abbia dei valori, se no mostrare che la cartella è vuota.

    C'è l'esempio proprio nella documentazione: glob() #103561.


  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Forse è meno dispendioso usare un flag invece di invocare la glob() e count().

    Codice PHP:
    [...]
    $flag = false;
    while (
    false !== ($files = readdir($handle))) {

    // Escludo gli elementi '.' poi '..' e index.php e stampo il nome del file...
    if ($files != '.' && $files != '..' && $files != 'index.php')
    {
    $flag = true;
    echo
    '<tr>
    <th>'
    .$files.'</th>
    <th>'
    .date("d-m-Y H:i", filemtime($dir.$files)).'</th>
    <th><a href="logo.php?nome_file=logo/'
    .$files.'" onClick="return confirm(\'Sei sicuro di voler cancellare il file?\')" style="text-decoration:none; font-weight:bold" title="Cancella">Cancella</a> -
    <a style="text-decoration:none; font-weight:bold" href="download.php?file=logo/'
    .$files.'" title="Download">Dowload</a></th>
    </tr> '
    ;
    }


    }
    if(!
    $flag)
    echo
    'Nessun file presente...';
    [...]
    Ciao!
    Ultima modifica di alemoppo : 22-02-2012 alle ore 16.17.23

  7. #7
    Guest

    Predefinito

    Io intendevo di mettere da parte proprio il while() ed usare glob(), in modo da lavorare sull'array ed avere il pieno supporto delle funzioni dedicate.


  8. #8
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,686

    Predefinito

    Ah giusto... Può essere un altro modo (in effetti, io se devo far qualcosa di questo tipo, uso glob (anche se è più lenta): readdir non mi viene naturale usarla)... Comunque, il flag può essere un modo per risolvere il problema con la readdir (visto che lo script usa quella)...

    Ciao!
    Ultima modifica di alemoppo : 22-02-2012 alle ore 16.44.08

  9. #9
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Ah giusto... Può essere un altro modo (in effetti, io se devo far qualcosa di questo tipo, uso glob (anche se è più lenta): readdir non mi viene naturale usarla)... Comunque, il flag può essere un modo per risolvere il problema con la readdir (visto che lo script usa quella)...

    Ciao!
    Ho provato a mettere il flag ma non va in quanto mostra il messaggio "Nessun file presente." sia se ci sono i files in cartella che se non ci sono.

  10. #10
    Guest

    Predefinito

    Hai provato come ti ho consigliato nel post #5?


  11. #11
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    Hai provato come ti ho consigliato nel post #5?

    Sinceramente non ho provato perchè ricordo di aver provato inizialmente con la funzione glob() solo che mi restituiva insieme al nome del file anche la cartella che lo conteneva e non riuscendo a togliere il percorso della cartella (es. logo/file.php) avevo optato per l'altra funzione.

    Puoi darmi un consiglio pratico su come si può fare?

  12. #12
    Guest

    Predefinito

    basename() risolve il tuo problema.


  13. #13
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    basename() risolve il tuo problema.



    Ok, perfetto, grazie 1000, ora se creassi l'elenco dei file con questo scritp:

    Codice PHP:
    <?php

    // crea elenco file cartella
    $array_file = glob("logo/*.*");

    foreach (
    $array_file as $file) {

    //escludo dall'elenco il file index.php
    if ( $file == "logo/index.php" ) {
    continue;
    }
    //Stampo i nomi dei file
    echo "<a href=\"logo.php?nome_file=$file\">".basename($file)."</a><br />";
    }

    ?>
    Come faccio a far visualizzare "Nessun file presente" nel caso in cui nella cartella non c'è alcun file?

    Ho provato cn la funzione if file_exists($file) ma non riesco nell'intendo.
    Puoi postarmi direttamente lo script? Grazie!

  14. #14
    Guest

    Predefinito

    È scritto nell'esempio che ti ho postato lo snippet di base...

    Devi adattare la visualizzazione della lista files e poi aggiungere la possibilità di cancellare il file.

    L'unica differenza è che usi glob() al posto di readdir() e foreach() al posto di while().

    Tieni a mente che la lista dei file è un array quindi puoi usare tutte le funzioni di questi per manipolare i dati.

    Se ti postassi il codice già fatto, non impareresti. Prova e riprova, soprattutto quando sono cose così semplici, poi se non riesci ti aiutiamo molto volentieri.


  15. #15
    Guest

    Predefinito

    Citazione Originalmente inviato da biccheddu Visualizza messaggio
    È scritto nell'esempio che ti ho postato lo snippet di base...

    Devi adattare la visualizzazione della lista files e poi aggiungere la possibilità di cancellare il file.

    L'unica differenza è che usi glob() al posto di readdir() e foreach() al posto di while().

    Tieni a mente che la lista dei file è un array quindi puoi usare tutte le funzioni di questi per manipolare i dati.

    Se ti postassi il codice già fatto, non impareresti. Prova e riprova, soprattutto quando sono cose così semplici, poi se non riesci ti aiutiamo molto volentieri.

    Grazie tante, la soluzione era in quello che mi avevi postato precedentemente,come ben noti mi mancano le basi...continuerò ad impegnarmi maestri...grazie di tutto, spero abbiate in futuro tanta pazienza con me!!

    Vi posto come ho risolto:
    Codice PHP:
    <?php

    # crea elenco file cartella
    $array_file = glob("logo/*.*");

    if(
    count($array_file) > 0){
    foreach (
    $array_file as $file) {
    #escludo dall'elenco il file index.php
    if ( $file == "logo/index.php" ) {
    continue;
    }
    #Stampo i nomi dei file
    echo "<a href=\"logo.php?nome_file=$file\">".basename($file)."</a><br />";
    }
    } else {
    echo
    "Files non presenti";
    }
    ?>

    Grazie 1000 ancora!!!

Regole di scrittura

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