+ Rispondi alla Discussione
Risultati da 1 a 4 di 4

Gestione file pdf , spostamento e rinomina.

Ultimo Messaggio di MenteLibera il:
  1. #1
    User Newbie
    Data Registrazione
    Jul 2015
    Località
    Gioiosa Ionica
    Messaggi
    3

    Gestione file pdf , spostamento e rinomina.

    Buongiorno e grazie anticipate a chi mi potrà aiutare
    Il mio problema è questo:
    ho creato una cartella sul mio sito web "/dipendenti" dove carico tramite ftp un centinaio di file pdf che si differiscono tra loro solo per il numero finale es: Eco_000000002.pdf, Eco_000000003.pdf, Eco_000000012.pdf etc.etc.
    Vorrei spostare questi file in modo automatico ed associarli ad altre cartelle create es:
    Eco_000000002.pdf che si trova appunto in "/dipendenti" spostarla nella cartella "/ml.pluto"
    Eco_000000012.pdf che si trova appunto in "/dipendenti" spostarla nella cartella "/gs.pippo" e così via..
    ed altresì una volta spostati farli rinominare automaticamente con un nome a piacimento, es:
    Eco_000000002.pdf in , Cedolino_luglio_2015.
    Il tutto credo si possa realizzare con un web script o qualcos'altro.
    Quindi chiedo aiuto a qualche anima pia che mi butti giù uno script.
    ps. Ho provato a crearlo io con l'aiuto di qualche amico,...ma niente da fare, non mi da errore ma non funziona.*



    Ecco lo script:


    <?php**
    $dipendente['ml.comeo']="000000002";**
    $dipendente['gs.telfino']="000000016";**
    //leggi*i*file*che*hai*caricato*in*dipendenti**
    $cedolini=array_map("basename",glob("../dipendenti/*.pdf"));
    *$data=date("Y-m");*//leggi*l'anno*e*la*data*e*qui*date**
    foreach($dipendente*as*$nome*=>*$codice){//cicli*i*dipendenti**
    ****foreach($cedolini*as*$cedolino){//cicli*i*cedolini**
    ********$pos*=*strpos($cedolino,*$codice);//verifichi*che*nel*cedolino*ci*sia*il*codice*del*di pendente*
    *********if($pos*>0){//trovata*corrispondenza**
    ************$vecchio_nome_cedolino="../dipendenti/".$cedolino;**
    ************$nuovo_nome_cedolino="../".$nome."/".$nome."_".$data."_".$codice.".pdf";//e*con*la*cartella*
    *************if(rename($vecchio_nome_cedolino*,*$n uovo_nome_cedolino)){**
    ****************echo*"spostato*$vecchio_nome_cedol ino*in*$nuovo_nome_cedolino<br>";*
    *************}**
    ****}**
    }**
    ?>

    SCUSATEMI quando ho incollato il codice si sono creati gli asterischi.

  2. #2
    Utente Premium
    Data Registrazione
    Mar 2009
    Messaggi
    313
    Per risolvere il problema si possono percorrere più alternative, tuttavia cercherò di riprendere il codice del richiedente e svilupparlo per mettere in luce alcune critiche.

    Per prima cosa ho definito un array $nuovi_nomi che contenga l'elenco dei nuovi nomi dei file. La posizione degli elementi di questa struttura di dati deve corrisponde a quella di $cedolini, conseguentemente verificherei con estrema attenzione se la funzione glob() riportasse sempre esattamente la stessa sequenza oppure se cambiasse, in tal caso converrà scriverla a mano.

    Mi sembra che ci sia un errore in questa riga:
    Codice PHP:
    $nuovo_nome_cedolino="../".$nome."/".$nome."_".$data."_".$codice.".pdf";//e con la cartella 
    poiché compare due volte la variabile $nome che quindi creerà una struttura ridondantemente nidificata. Inoltre valuterei l'esclusione della variabile $data poiché per com'è definita verrà istanziata all'anno ed al mese di quando verrà eseguito lo script. Infine la variabile $codice è presa dal valore dell'istruzione foreach ($dipendente as $nome => $codice) che come si noterà non ha alcuna relazione con il nuovo nome del file.
    Una possibile riscrittura potrebbe essere:
    Codice PHP:
    $nuovo_nome_cedolino "../".$nome."_".$data."_".$nuovi_nomi[$i].".pdf";//e con la cartella 
    In base alle precedenti osservazioni il codice completo è il seguente:

    Codice PHP:
    <?php

    $dipendente
    ['ml.comeo'] = "000000002";
    $dipendente['gs.telfino'] = "000000016";
    $nuovi_nomi = array('Cedolino_luglio_2015''NuovoNomeFile'); // Elenco dei nuovi nomi, deve esseci corrispondenza con quelli degli indici dei cedolini
    $cedolini = array('Eco_000000002.pdf''Eco_000000016.pdf'); // Sostituire con $cedolini=array_map("basename",glob("../dipendenti/*.pdf")); // Attenzione: verificare che sia verificata la corrispondenza con l'array $nuovi_nomi posizione per posizione, altrimenti conviene scriverli a mano per non rischiare.
    $data=date("Y-m"); //leggi l'anno e la data e qui date
    foreach ($dipendente as $nome => $codice)
        foreach (
    $cedolini as $i => $cedolino)
            if (
    strpos($cedolino$codice) > 0) {
                
    $vecchio_nome_cedolino "../dipendenti/".$cedolino;
                
    $nuovo_nome_cedolino "../".$nome."_".$data."_".$nuovi_nomi[$i].".pdf";//e con la cartella
                
    if(rename($vecchio_nome_cedolino,$nuovo_nome_cedolino)) {
                    echo 
    "spostato $vecchio_nome_cedolino in $nuovo_nome_cedolino<br>";
                }
            }

    ?>
    Non escludo che il codice potrebbe essere molto più sintetico ricorrendo ad altre impostazioni del problema.

    Sfortunatamente non ho molto tempo per dare una risposta completa, e non garantisco il corretto funzionamento del codice poiché non mi è stato possibile testarlo, quindi consiglio di fare molte prove prima di eseguirlo.

    Nota: nell'anteprima del messaggio noto che nella versione pubblicata potrebbe esserci una linea spezzata malamente che inizia per: "*.pdf")); // Attenzione: verificare che sia verificata la corrispondenza con l'array..." ricongiungerla con la precedente.

    [OT]Suggerisco caldamente di ricorrere all'editor avanzato per mettere il codice negli appositi marcatori dello specifico linguaggio per permetterci di capirlo un po' meglio oltre ad essere prescritto nel regolamento di sezione. Grazie per la collaborazione.[/OT]
    Ultima modifica di MenteLibera; 16-07-15 alle 01:32

  3. #3
    User Newbie
    Data Registrazione
    Nov 2006
    Messaggi
    9
    Citazione Originariamente Scritto da MenteLibera Visualizza Messaggio
    Per risolvere il problema si possono percorrere più alternative, tuttavia cercherò di riprendere il codice del richiedente e svilupparlo per mettere in luce alcune critiche.

    Per prima cosa ho definito un array $nuovi_nomi che contenga l'elenco dei nuovi nomi dei file. La posizione degli elementi di questa struttura di dati deve corrisponde a quella di $cedolini, conseguentemente verificherei con estrema attenzione se la funzione glob() riportasse sempre esattamente la stessa sequenza oppure se cambiasse, in tal caso converrà scriverla a mano.

    Mi sembra che ci sia un errore in questa riga:
    Codice PHP:
    $nuovo_nome_cedolino="../".$nome."/".$nome."_".$data."_".$codice.".pdf";//e con la cartella 
    poiché compare due volte la variabile $nome che quindi creerà una struttura ridondantemente nidificata. Inoltre valuterei l'esclusione della variabile $data poiché per com'è definita verrà istanziata all'anno ed al mese di quando verrà eseguito lo script. Infine la variabile $codice è presa dal valore dell'istruzione foreach ($dipendente as $nome => $codice) che come si noterà non ha alcuna relazione con il nuovo nome del file.
    Una possibile riscrittura potrebbe essere:
    Codice PHP:
    $nuovo_nome_cedolino "../".$nome."_".$data."_".$nuovi_nomi[$i].".pdf";//e con la cartella 
    In base alle precedenti osservazioni il codice completo è il seguente:

    Codice PHP:
    <?php

    $dipendente
    ['ml.comeo'] = "000000002";
    $dipendente['gs.telfino'] = "000000016";
    $nuovi_nomi = array('Cedolino_luglio_2015''NuovoNomeFile'); // Elenco dei nuovi nomi, deve esseci corrispondenza con quelli degli indici dei cedolini
    $cedolini = array('Eco_000000002.pdf''Eco_000000016.pdf'); // Sostituire con $cedolini=array_map("basename",glob("../dipendenti/*.pdf")); // Attenzione: verificare che sia verificata la corrispondenza con l'array $nuovi_nomi posizione per posizione, altrimenti conviene scriverli a mano per non rischiare.
    $data=date("Y-m"); //leggi l'anno e la data e qui date
    foreach ($dipendente as $nome => $codice)
        foreach (
    $cedolini as $i => $cedolino)
            if (
    strpos($cedolino$codice) > 0) {
                
    $vecchio_nome_cedolino "../dipendenti/".$cedolino;
                
    $nuovo_nome_cedolino "../".$nome."_".$data."_".$nuovi_nomi[$i].".pdf";//e con la cartella
                
    if(rename($vecchio_nome_cedolino,$nuovo_nome_cedolino)) {
                    echo 
    "spostato $vecchio_nome_cedolino in $nuovo_nome_cedolino<br>";
                }
            }

    ?>
    Non escludo che il codice potrebbe essere molto più sintetico ricorrendo ad altre impostazioni del problema.

    Sfortunatamente non ho molto tempo per dare una risposta completa, e non garantisco il corretto funzionamento del codice poiché non mi è stato possibile testarlo, quindi consiglio di fare molte prove prima di eseguirlo.

    Nota: nell'anteprima del messaggio noto che nella versione pubblicata potrebbe esserci una linea spezzata malamente che inizia per: "*.pdf")); // Attenzione: verificare che sia verificata la corrispondenza con l'array..." ricongiungerla con la precedente.

    [OT]Suggerisco caldamente di ricorrere all'editor avanzato per mettere il codice negli appositi marcatori dello specifico linguaggio per permetterci di capirlo un po' meglio oltre ad essere prescritto nel regolamento di sezione. Grazie per la collaborazione.[/OT]

    Salve, ho provato il suo script ma non riesco a farlo funzionare... so che è passato un pò di tempo ma è proprio quello che mi occorre... ha per caso fatto ulteriori verifiche? Grazie mille

  4. #4
    Utente Premium
    Data Registrazione
    Mar 2009
    Messaggi
    313
    Citazione Originariamente Scritto da lory22 Visualizza Messaggio
    ha per caso fatto ulteriori verifiche? Grazie mille
    Ni. Escludendo le funzioni per riportare l’elenco dei file (glob) e quella per lo spostamento (rename) ho provato ad eseguire il codice che avevo postato e funziona purché siano soddisfatte le avvertenze contenute nel post e nei commenti al codice grazie ad un tester online che per motivi di sicurezza le ha disabilitate.

    Il codice scritto se poteva essere un punto di arrivo per l’OP esso potrebbe richiedere delle modifiche per riportarlo al proprio caso. Consiglio di fare molto debug del codice per comprendere pienamente ciò che fa.

    Buon lavoro!

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.