- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema: estrapolo solo 8 file su 30
-
Problema: estrapolo solo 8 file su 30
Buon giorno, non capisco come mai, questo script per estrarre da una cartella tutti i file .pdf, fino a ieri funzionava e oggi no.
in pratica mi tira fuori solo 8 file.pdf di tutti quelli che ho nella cartella$dirname = "Doc/ElencoPdf/"; if(is_dir($dirname)){ $dir = opendir($dirname); while($file=readdir($dir)){ $findme = ".pdf"; $mystring1 = trim($file); $pos1 = strpos ($mystring1, trim($findme)); if ($pos1 != false) { echo " <li><img src='icone/acrobat.gif'> <a href=\"".$dirname.$mystring1."\"> $mystring1</a> </li> <br/>"; } else{ echo " Errore: <br/> I file non esistono oppure sono stati rimossi."; exit; } } } else{ echo " Errore: <br/> La directory non esiste oppure è stata rimossa."; exit; }
Con questo scriptino vedo se ci sono i file all'interno della cartella..
$files = glob($dirname . '/*.pdf');
Però vorrei capire come mai, vedo una parte dei file ma non tutti?
Grazie mille e buona giornata...
-
Prova a sostituire
<a href="".$dirname.$mystring1.""> $mystring1</a>
con
<a href="".$dirname.$file.""> $file</a>
Ciao!
-
Ciao,
la funzione readdir() può restituire anche valore 0 che non necessariamente corrisponde a false. Devi quindi modificare il controllo del ciclo con:
[php]
while(($file=readdir($dir))!==false)
[/php]
Inoltre il tuo script esce non appena trova un file che non ha nel nome la stringa ".pdf".
Quindi quando trova "." oppure "..", lo script si ferma.Una possibile soluzione è quindi:
[php]
$dirname = "Doc/ElencoPdf/";
if(is_dir($dirname)){
$dir = opendir($dirname);
while(($file=readdir($dir))!==false)
{
if ($file != "." && $file != "..")
{
$findme = ".pdf";
$mystring1 = trim($file);
$pos1 = strpos ($mystring1, trim($findme));if ($pos1 != false) { echo " <li><img src='icone/acrobat.gif'> <a href=\"".$dirname.$mystring1."\"> $mystring1</a> </li> <br/>"; } else{ echo " Errore: <br/> I file non esistono oppure sono stati rimossi."; exit; } }
}
}
else{
echo " Errore:
<br/>
La directory non esiste oppure è stata rimossa.";
exit;
}
[/php]Alessandro
-
grazie mille ragazzi, ma purtroppo anche queste due soluzioni non vanno bene.
Ho lo stesso identico problema...
sto provando cosi:$dirname = "Doc/ElencoPdf"; $elencofile=array(); foreach (glob($dirname . '/*.*') as $file) { if(($file != '.') && ($file != '..') && ($file != 'Thumbs.db')) { echo "<li><img src='icone/acrobat.gif'> <a href=\"".$file."\"> ".$file."</a> </li> <br/>"; } }
cosi funziona, ma secondo voi è la soluzione migliore?
Grazie mille
-
Prova in questo modo:
[php]
if($handle = opendir("Doc/ElencoPdf/"))
{
while(false !== ($file = readdir($handle)))
{
if(eregi(".pdf$", $file))
echo "<li><img src='icone/acrobat.gif'>
<a href="".$file.""> ".$file."</a>
</li>
<br/>";
}closedir($handle);
}
[/php]Ciao!
-
Ciao,
@antagonia said:cosi funziona, ma secondo voi è la soluzione migliore?
Grazie millefunziona perchè hai tolto l'ELSE dell'IF ed il relativo EXIT che, come detto in precedenza, faceva terminare lo script non appena trovava un file non pdf.
Thumbs.db è un altro elemento oltre a . e .. che porta all'interruzione del vecchio script e hai fatto bene a inserirlo nel controllo. Io non avevo pensato che nella cartella ci fosse anche quello o altri files non pdf.Lo script che ti ha suggerito **Sups **è sicuramente migliore, perchè con l'utilizzo di eregi oltre ai files che tu escludi uno ad uno nell'IF, esclude automaticamente:
- tutti gli altri con estensione diversa da .pdf (es. un file .doc)
- tutti i files con nomi che potrebbero generare confusione effettuando il controllo con strpos come facevi all'inizio (es. nomefile.pdf.doc risulta un file corretto con il tuo vecchio script, mentre con il controllo suggeritoti da Sups viene giustamente escluso)
Alessandro
-
grazie ragazzi un'ultima cosa, oltre al pdf:
-
se dovessi prendere in considerazione anche i doc e gli xls?
-
estrapolarli tipo una query ORDER BY l'ultima lettera del file.
Mi spiego.I file vanno in coppia ed hanno questa caratteristica
Aggiornamento quota iscritti A).pdf
Elenco quota iscritti A).pdf
Aggiornamento quota iscritti B).pdf
Elenco quota iscritti B).pdfetc etc...
Si può fare?grazie ancora...
-
-
Se usi il codice che ti ho proposto devi fare questa modifica:
[php]
eregi(".(pdf|doc|xls)$", $file)
[/php]Ovviamente deve essere fatto un controllo aggiuntivo sulle estensioni per determinare l'icona giusta, altrimenti crei tanti IF quanti sono le estensioni da elaborare:[php]
if(eregi(".pdf$", $file)) //...
if(eregi(".doc$", $file)) //...
//...
[/php]Ciao!
-
scusami..allora ho capito la questione della scelta delle icone e ok..
ma per organizzare i file come ti ho postato prima?
ti ringrazio molto gentile
-
Puoi creare diversi array, uno per ogni categoria di file (pdf, doc, ecc...).
Ogni condizione IF ha il compito di aggiungere un nuovo elemento ad un determinato array in base all'estensione del file.
Successivamente utilizzi una funzione di ordinamento dell'array ( sort($array); ) e stampi a video il risultato finale.Ciao!
-
ok ti ringrazio sei stato molto gentile.
Adesso provo e poi ti faccio sapere...
Buona giornata e buon lavoro.