- Home
- Categorie
- Coding e Sistemistica
- PHP
- PHP ricerca file
-
PHP ricerca file
Salve a tutti,
devo realizzare una funzione in PHP che, a partire dalla cartella PIPPO, cerchi in tutte le sottocartelle, quindi scendendo anche di 3 o 4 livelli, tutti i file excel il cui nome abbia, come prima parola, PLUTO.Qualcuno può aiutarmi???
Grazie in anticipo
:bho:
-
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!
-
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!