• User

    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...


  • User Attivo

    Prova a sostituire

    <a href="".$dirname.$mystring1.""> $mystring1</a>

    con

    <a href="".$dirname.$file.""> $file</a>

    Ciao!


  • User Attivo

    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


  • User

    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."\">&nbsp;&nbsp;".$file."</a>
                    </li>
                    <br/>";
        }
    }
    
    

    cosi funziona, ma secondo voi è la soluzione migliore?
    Grazie mille


  • User Attivo

    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!


  • User Attivo

    Ciao,
    @antagonia said:

    cosi funziona, ma secondo voi è la soluzione migliore?
    Grazie mille

    funziona 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


  • User

    grazie ragazzi un'ultima cosa, oltre al pdf:

    1. se dovessi prendere in considerazione anche i doc e gli xls?

    2. 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).pdf

    etc etc...
    Si può fare?

    grazie ancora... 😄


  • User Attivo

    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!


  • User

    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


  • User Attivo

    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!


  • User

    ok ti ringrazio sei stato molto gentile.
    Adesso provo e poi ti faccio sapere...
    Buona giornata e buon lavoro.