- Home
- Categorie
- Coding e Sistemistica
- PHP
- PHP ricerca file
-
grazie innanzitutto per l'aiuto!
Ho provato ad applicare lo scirpt che mi hai proposto, ma mi restituisce il seguente errore: Fatal error: Call to a member function on a non-object in c:\programmi\easyphp1-8\www\example.php on line 8.
Alla riga corrisponde il codice: $myFolder = $fso -> GetFolder($myDir);
Com risolvere l'errore?
-
Forse non riconosce il percorso della cartella che passi alla funzione attraverso la variabile $myDir.
Da me funziona correttamente.Ciao!
-
se non trovasse la cartella non dovrebbe restituirmi il messaggio: **Errore: PIPPO non esiste! **?
Tant'è che ho provato ad impostargli un altro percorso nella stringa dove definisco $myDir e, in questo caso, il messaggio di errore mi compare.
L'errore è in questa stringa di codice: $myFolder = $fso -> GetFolder($myDir);
-
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.
-
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?
-
@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
-
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]
-
@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?
-
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
-
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!
-
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
-
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);
-
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
-
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]
-
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?
-
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.
-
ok....così è veramente perfetto!
Sei stato molto gentile e disponibile
-
Bene :), son contento che vada bene
Ciao!
-
della serie "non dire gatto se non ce l'hai nel sacco"
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???
-
ho risolto.....era un problema di formato data