• User Attivo

    Hai ragione, il problema non è nei percorsi della cartella, forse è nella versione di PHP.
    Lo script funziona correttamente su una piattaforma PHP5, ma non credo faccia lo stesso con PHP4 o inferiori.


  • User

    io sto facendo girare il file su EasyPHP 1.8...ma non so su che versione di PHP si basi.

    Non conosci il modo di scrivere uno script che vada bene per qualsiasi versione di PHP?


  • User

    @Vale1976 said:

    io sto facendo girare il file su EasyPHP 1.8...ma non so su che versione di PHP si basi.

    Non conosci il modo di scrivere uno script che vada bene per qualsiasi versione di PHP?

    Usa PHP4, se fai un file phpinfo te lo dice


  • User Attivo

    Con questa funzione puoi elencare i file e le cartelle contenute in un percorso, però non permette di visualizzare il contenuto delle sottocartelle, a meno che venga richiamato come funzione ricorsiva su ogni cartella che incontra durante la ricerca.

    [php]
    if($handle = opendir($opndir($myDir))
    {
    echo "Directory Handle: " . $handle . "<br>";

    while(false !== ($hdl = readdir($handle)))
    { 
        if(($hdl != ".")&&($hdl != ".."))
        {
            if(is_dir($myDir . $hdl))
            {
                echo "Directory: " . $hdl . "<br>";
            }
            
            if(is_file($myDir . $hdl))
            {
                echo "File: " . $hdl . "<br>";
            }
        } 
    } 
    closedir($handle);
    

    }
    [/php]


  • User

    @Sups said:

    Prova con questo piccolo script.

    [php]
    $fso = new COM("Scripting.FileSystemObject");

    $myDir = $_SERVER["DOCUMENT_ROOT"] . "/PIPPO/";

    if(file_exists($myDir))
    {
    $myFolder = $fso -> GetFolder($myDir);

    foreach($myFolder -> Subfolders AS $sFld)
    {
        $objFolder = $fso -> GetFolder($sFld -> Path);
    
        $colFiles = $objFolder -> Files;
    
        foreach($colFiles As $objFile)
        {
            $ext = strtolower(substr($objFile, strrpos($objFile, "."), strlen($objFile) - strrpos($objFile, ".")));
    
            if(($ext == ".xls")&&(basename($objFile, ".xls") == "PLUTO"))
            {
                echo $objFile . "<br>"; //Path completa del file
            }
        }
    }
    

    }
    else
    {
    echo "Errore: "" . $myDir . "" non esiste!";
    }

    ?>
    [/php]

    Ciao!

    Sono riuscito ad installare nel mio pc un ambiente Web Server con PHP5 e ho scritto un file php con il codice che mi hai detto, ma, quando lo vado a vedere nel browser, mi restituire questo: GetFolder($myDir); foreach ($myFolder -> Subfolders AS $sFld) { $objFolder = $fso -> GetFolder($sFld -> Path); $colFiles = $objFolder -> Files; foreach ($colFiles As $objFile) { $ext = strtolower(substr($objFile, strrpos($objFile, "."), strlen($objFile) - strrpos($objFile, "."))); if(($ext == ".xls") && (basename($objFile, ".xls") == "PLUTO")) { echo $objFile . "
    "; //Path completa del file } } } } else { echo "Errore: "" . $myDir . "" non esiste!"; } ?>. Cioè mi stampa tutto il codice a partire da dopo ->.

    Come mai? A cosa può essere dovuto? Forse devo aggiungere qualche estensione al mio ambiente?


  • User

    in effetti, facendo ulteriori test, ho appurato che l'ambiente da me creato non interpreta nessuno script...nemmeno se il codice è <? echo "ciao"; ?>. Deve esserci qualcosa che non va nel webserver, per l'istallazione del quale ho seguito la guida presente in questo link: http://http://php.html.it/guide/leggi/94/guida-php-su-windows/

    Qualcuno può dirmi cosa manca?

    Grazie


  • User Attivo

    Secondo me hai saltato o eseguito male il passaggio 7 della guida, l'integrazione di PHP con Apache.
    Io ti consiglio di rieseguire tutti i passaggi correttamente o semplificarti la vita e scaricare ed utilizzare l'ultima versione di EasyPHP o WampServer (Mai provato 😄 ).

    Ciao!


  • User

    ho rivisto tutti i passaggi e non ci sono errori, tant'è che lo script <?php info(); ?> funziona perfettamente ed anche la pagina di test per la connessione con il db mysql. Il problema c'è quando scrivo un qualsiasi altro script


  • User

    ho capito il problema...non gli è sufficiente <? ... ?> per interpretare uno script, ma deve essere <?php ... ?>.

    Il problema persist comunque per il primo script che mi è stato suggerito da Sups per quanto riguarda la funzione di ricerca ricorsiva: continua a restituire a video tutto il codice dopo -> della riga $myFolder = $fso -> GetFolder($myDir);


  • User

    Sups...ho aggiornato il PHP alla versione 5 e riprovato il primo script che mi hai scritto e funziona benissimo.

    Come faccio a trovare però tutti i files excel che si chiamano PIPPO + QUALCHECOS'ALTRO....per esempio "pippo pluto" o "pippo topolino"?

    E come faccio a farmi stampare a video i nomi delle cartelle e, a parte, i nomi dei files in esse contenuti?

    Grazie


  • User Attivo

    Le sostituzioni al codice da eseguire sono nell'ultima parte, dove c'è il secondo ciclo foreach:

    Script completo:
    [php]
    <?php

    $fso = new COM("Scripting.FileSystemObject");

    $myDir = $_SERVER["DOCUMENT_ROOT"] . "/PIPPO/";

    if(file_exists($myDir))
    {
    $myFolder = $fso -> GetFolder($myDir);

    foreach($myFolder -> Subfolders AS $sFld)
    {
        $objFolder = $fso -> GetFolder($sFld -> Path);
        
        $colFiles = $objFolder -> Files;
        
        foreach($colFiles As $objFile)
        {
            $ext = strtolower(substr($objFile, strrpos($objFile, "."), strlen($objFile) - strrpos($objFile, ".")));
            
            if($ext == ".xls")
            {
                if((strpos((basename($objFile, ".xls")), "pippo") !== FALSE)||
                   (strpos((basename($objFile, ".xls")), "pluto") !== FALSE)||
                   (strpos((basename($objFile, ".xls")), "topolino") !== FALSE))
                    {
                        echo "Percorso completo: " . $objFile . "<br>"; //Path completa del file
                        echo "-- Cartella: " . dirname($objFile) . "<br>";
                        echo "-- File: " . basename($objFile) . "<br><br>";
                    }
            }
        }
    }
    

    }
    else
    {
    echo "Errore: "" . $myDir . "" non esiste!";
    }

    ?>
    [/php]


  • User

    ok.

    ma qualora avessi 1500 files in cui la prima parte del nome è PIPPO e poi seguono altre parole? Non è possibile fare una selezione impostando solo la prima part del nome del file?


  • User Attivo

    Se te lasci solo "pippo" nel codice, lo script filtra e mostra tutti i file che contengono la stringa "pippo" all'interno del nome.
    ripensandoci, i controlli su "pluto" e "topolino" sono inutili.


  • User

    ok....così è veramente perfetto!

    Sei stato molto gentile e disponibile


  • User Attivo

    Bene :), son contento che vada bene 😉

    Ciao! :ciauz:


  • User

    della serie "non dire gatto se non ce l'hai nel sacco" :bigsmile:

    Ho un po' sviluppato il codice che pensavo andasse bene perchè quello che devo realizzare è uno script che, oltre a cercare i file excel con un nome predefinito nelle cartelle, devo anche comparare la data di ultima modifica degli stessi e, se superiore al valore presente in un DB, fare un aggiornamento nel DB stesso....e, se il file non è proprio riportato nel DB, aggiungerlo.

    Ecco come ho sviluppato lo script:
    [PHP]
    $fso = new COM("Scripting.FileSystemObject");
    $myDir = $_SERVER["DOCUMENT_ROOT"] . "/PIPPO";
    if(file_exists($myDir)) {
    $myFolder = $fso -> GetFolder($myDir);

    // ricerca nuovi file
    foreach($myFolder -> Subfolders AS $sFld) {
    $objFolder = $fso -> GetFolder($sFld -> Path);
    $colFiles = $objFolder -> Files;
    foreach($colFiles As $objFile) {
    $ext = strtolower(substr($objFile, strrpos($objFile, "."), strlen($objFile) - strrpos($objFile, ".")));
    if($ext == ".xls") {
    if((strpos((basename($objFile, ".xls")), "PLUTO") !== FALSE)) {
    $nome_file = basename($objFile); //nome file
    $patch_file = dirname($objFile); //percorso del file
    $data_ultima_modifica = date("m-d-Y H:i:s", filemtime($objFile)); //data modifica
    // cerco se il file è già presente nel DB
    $res = mysql_query("SELECT * FROM paperino WHERE nome_file = '".$nome_file."' AND patch_file = '".$patch_file."' AND attivo = '1'");
    $res1 = mysql_num_rows($res);
    // se è nuovo
    if ($res1 == 0) {
    // lo aggiungo al DB
    mysql_query ("INSERT INTO paperino VALUES (NULL, '".$nome_file."', '".$patch_file."', '".$objFile."', '".$data_ultima_modifica."', '1')");
    echo "ok<br>";
    }
    }
    }
    }
    }
    } else {
    echo "Errore: "" . $myDir . "" non esiste!";
    }
    [/PHP]

    Va tutto bene fino a questa riga di codice: mysql_query ("INSERT INTO paperino VALUES (NULL, '".$nome_file."', '".$patch_file."', '".$objFile."', '".$data_ultima_modifica."', '1')");, nel senso che non fa le query inserendo i valori el DB. La cosa strana, però, è che mi restituisce tanti "ok" quanti sono i file nuovi che trova e che dovrebbe aggiungere nel DB.

    Perchè non funziona??? :arrabbiato:


  • User

    ho risolto.....era un problema di formato data

    :vai: