• User

    Funzione ftp: scaricare file che "inizia per"

    ...ciao mitici!

    Volevo usare unlink() tipo il comando "del" di DOS ma proprio non mi ci raccapezzo... :mmm:

    nel mio piccolo ho capito che non è possibile usare gli asterischi....tipo unlink(inizionome*).....visto che funziona con una variabile definita che specifica il path......ma voi avete in mente qualche alternativa che produca un risultato simile all'asterisco?


  • User

    Ma l'asterisco è presente nel nome del file o in quello della cartella che lo contiene?


  • User

    pierpy, non so se conosci il dos, ma con il comando:

    del inizionome*

    vengono cancellati

    inizionomedelfile.txt
    inizionomedelfile.doc
    inizionomedelfile.gif
    ...

    quindi l'asterisco serve per specificare che voglio eliminare tutti i file che iniziano in un determinato modo ma che non mi frega come finiscono (ovviamente non è proprio così, ma rende l'idea)...


  • User

    mi è venuta in mente un'altra cosa...

    sarebbe possibile leggere **tutti i nomi **dei file presenti in una directory e salvarli in un'array?

    poi con un **trim **e con un **if **si potrebbero far ciclare gli unlink()....no?

    ....ok...mi sono sparato quella delle 11 di sera... 😄


  • User Attivo

    Ciao ciccio6630

    penso che la soluzione da te proposta sia quella adatta.
    Non credo si possa fare in altro modo (vedi asterischi o simili).

    :ciauz:


  • User

    Ciccio ti chiedo scusa, avevo capito tutt'altra cosa 🙂


  • ModSenior

    [php]
    <?
    // Nome della cartella
    $car = 'cartella/';

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    //substr($files, 0, 😎 Prende i primi 8 caratteri del nome e li confronta
    if(substr($files, 0, 8)=='nomefile')
    unlink($car.$files) ;

    }
    ?>
    [/php]

    Prova cosi 😄


  • User

    @miticopierpy said:

    Ciccio ti chiedo scusa, avevo capito tutt'altra cosa 🙂

    no prob 🙂


  • User

    @Thedarkita said:

    [php]
    <?
    // Nome della cartella
    $car = 'cartella/';

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    //substr($files, 0, 😎 Prende i primi 8 caratteri del nome e li confronta
    if(substr($files, 0, 8)=='nomefile')
    unlink($car.$files) ;

    }
    ?>
    [/php]Prova cosi 😄

    ...dal sorrisone della tua emoticon penso che tu sia certo che funzioni.... 😄

    ...più tardi provo e ti faccio sapere...ora devo aiutare mia moglie a sfamare i bimbi.... :():


  • User

    dark devo avere combinato un pasticcio... :bho:

    per renderlo più fruibile ho creato questo form:

    [php]

    <form name="cancella" action="cancella.php" method="post">

    <TABLE BORDER="0" ALIGN=Center>
    <TD>
    <FONT COLOR="#000000" FACE="Century Gothic, helvetica, arial, sans-serif" SIZE="2"> Cancella files </font>
    </TD>

    <TD>
    <input type="text" name="files" size="20">

    </TD>
    <TR>
    <TD>
    <FONT COLOR="#000000" FACE="Century Gothic, helvetica, arial, sans-serif" SIZE="2"> Azione</font>
    </TD>

    <TD>
    <input type="radio" name="azione" value="0" checked> Nome esatto <BR>
    <input type="radio" name="azione" value="1" > Che inizia per...

    </TD>
    <TR>
    <TD COLSPAN="2" ALIGN=Center><BR>
    <input type="submit" value="elimina">
    </TD>

    </table>
    </form>

    [/php]

    poi ho preso il tuo codice al quale ho apportato qualche variazione (e credo che il pasticcio sia proprio qui)...

    [php]
    <?php

    $files=$_POST['files'];
    $azione=$_POST['azione'];
    $car = 'dir/';

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    if ($azione==0) {

    unlink($car.$files);

    } else {

    $lunghezza = strlen("$files");

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    //substr($files, 0, $lunghezza) Prende i primi x caratteri del nome e li confronta
    if(substr($files, 0, $lunghezza)=='nomefile')
    unlink($car.$files) ;

    }
    }

    ?>
    [/php]Con azione uguale a 0 decido di eliminare il nome del file esatto....e funziona.

    Se diverso da zero conto i caratteri e sostituisco il numero al "tuo 8"...

    ....dove ho sbagliato? :mmm:


  • ModSenior

    =='nomefile' dovresti mettere la variabile con il nome...


  • User

    ...marò che sono 'gnurante!!!

    ...tutto risolto dando un altro nome alla variabile postata... :arrabbiato:

    ecco lo script funzionante:

    [php]
    <?php

    $nome=$_POST['nome'];
    $azione=$_POST['azione'];
    $car = 'dir/';

    // Opendir è la funzione per aprire la cartella
    $handle = opendir($car);

    if ($azione==0) {

    unlink($car.$nome);

    } else {

    $lunghezza = strlen($nome);

    // Ciclo la cartella
    while (false !== ($files = readdir($handle)))
    {
    // Stampo i file
    if ($files != '.' && $files != '..')
    //substr($files, 0, $lunghezza) Prende i primi x caratteri del nome e li confronta
    if(substr($files, 0, $lunghezza)==$nome)
    unlink($car.$files) ;

    }
    }

    ?>
    [/php]
    ....grazie infinite!! :ciauz:


  • ModSenior

    Prego 😄


  • User

    Ciao ragazzi,

    dopo mille prove finalmente ho trovato uno script ftp che funziona egregiamente.

    Vi risparmio il form e vi incollo solo il codice che lo processa:

    [php]

    <?PHP

    $nome_file = $_REQUEST['nome_file'];

    $ftp_server = $_REQUEST['server'];

    //esempio indirizzo ip del sever

    $ftp_username="";
    $ftp_password="
    ";
    // stabilisco la connessione al server ftp
    $ftp_connessione = ftp_connect($ftp_server);
    // effetto login sul server
    $login = ftp_login($ftp_connessione, $ftp_username, $ftp_password);
    // controllo se la connessione ha avuto buon fine

    if(!$ftp_connessione || !$login){
    echo "Connessione fallita!";
    } else {

    $file_da_scaricare = "cartella_remota/" . $nome_file;

    $dove_scaricare = "cartella_locale/" . $nome_file . ".txt";
    $download = ftp_get($ftp_connessione, $dove_scaricare, $file_da_scaricare, FTP_BINARY);

    // controllo se download andato a buon fine

    if (!$download) {
    echo "Si è verificato un errore durante il download!<br>";
    } else {
    echo "Download avvenuto con successo e disponibile nella cartella <a href=ftp>FTP</a><br>";
    }
    // chiudo connessione FTP
    ftp_quit($ftp_connessione);
    }
    ?>

    <font face="Courier New" size=2 color="#000000">

    <pre>

    <?php

    $textarray=file($dove_scaricare);

    for ($i = 0; $i+1 <= sizeof($textarray); $i++) {

    echo $textarray*;

    }
    ?>

    </pre>

    </font>

    [/php]Tutto fila liscio fin quando conosco esattamente il nome del file.

    Avrei la necessità invece di poter scaricare anche files dei quali non conosco il nome per intero, ma solo come iniziano, dato che il sistema che salva i files sul server li chiama con una prima parte (a me nota) seguita da *n *caratteri random per evitare che gli stessi vengano sovrascritti.

    Ho provato a riadattare la funzione che mi aveva suggerito Dark in questo post:

    giorgiotave.it/forum/php-mysql/91983-unlink.html

    Ma dopo qualche tentativo dall'esito disastroso sono stato costretto a desistere (soprattutto per non fare danni).

    Qualcuno di voi saprebbe aiutarmi?

    Riassumendo mi servirebbe qualcosa che mi consenta di fare il download di "nomefile"***

    :ciauz:


  • User

    Ho trovato la funzione ftp_nlist che dovrebbe fare al caso mio...

    [php]$list=ftp_nlist($conn_id, "$dir/*.txt");[/php]...domani ci gioco un po' e casomai vi faccio sapere...'notte!


  • User Attivo

    Amici, leggetevi la funzione glob() di php 😉

    Fatemi sapere... 😉

    Jeeves


  • User

    Niente, non ci sono riuscito. :bho:

    Neanche con glob...non riesco proprio a farlo funzionare una volta collegato tramite ftp. :arrabbiato:

    Consigli!?


  • User Attivo

    Se ti serve cancellare file tipo file.* fai una più o meno così:

    [php]
    $files = glob('file.*');

    foreach($files as $file) {
    unlink($file);
    }
    [/php]

    :gthi:


  • User

    Jeeves, ci deve essere stato un qui pro quo...

    La cancellazione del file l'ho risolta grazie al preziosissimo aiuto di Dark.

    Avevo aperto un altro 3d intitolato "Funzione ftp: scaricare file che "inizia per..." citando quello nel quale stiamo scrivendo dato che per certi versi la problematica era simile.

    Il problema è con l'ftp, non so come le due discussioni si siano fuse: se per mano di un moderatore o in automatico non so dire (tra l'altro mi pare pure sbagliato), fatto sta che ora siamo qui a scrivere su un 3d che c'entra poco...