Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    errori: function.filemtime + function.filesize

    Salve,
    ho realizzato il seguente script

    codice:
    <?php
    function dir_list($directory = FALSE) {
    	$dirs= array();
    	$files = array();
    	if ($handle = opendir("" . $directory)) {
    		while ($file = readdir($handle)) {
    			if (is_dir("./{$directory}/{$file}")) {
    				if ($file != "." & $file != "..") $dirs[] = $file;
    			} else {
    				if ($file != "." & $file != "..") $files[] = $file;
    			}
    		}
    	}
    	closedir($handle);
    	
    	reset($dirs);
    	sort($dirs);
    	reset($dirs);
    	
    	reset($files);
    	sort($files);
    	reset($files);
    	
    	$d = "0";
    	echo "<ul>Cartelle:\n";
    	while(list($key, $value) = each($dirs)) {
    		$d++;
    		echo "[*]<a href=\"{$value}\">{$value}/</a>\n";
    	}
    	echo "[/list]\n";
    	
    	$f = "0";
    	echo "<ul>Files:\n";
    	while(list($key, $value) = each($files)) {
    		$f++;
    		$filemtime=date("m-d-Y H:i:s", filemtime($value));
    		$filesize=filesize($value);
    		echo "[*]<a href=\"{$value}\">{$value}</a> ({$filemtime} - {$filesize})\n";
    	}
    	echo "[/list]\n";
    	
    	if (!$d) $d = "0";
    	if (!$f) $f = "0";
    	echo "Sono presenti {$d} cartelle e {$f} file(s).[/b]\n";
    }
    
    dir_list("PIPPO");
    ?>
    che mi restituisce, a partire dalla cartella PIPPO, i nomi dei file e delle cartelle presenti, ordinati in ordine alfabetico. Inoltre, per i file, dovrebbe restituirmi la data di ultima modifica e la dimensione in byte. I file in totale sono due: PLUTO.xls e PINCOPALLINO.xls. Tutto ok per il primo file che trova, che si chiama PLUTO.xls, ma, per il successivo (PINCOPALLINO.xls) mi da i seguenti errori:


    Warning: filemtime() [function.filemtime]: stat failed for PINCOPALLINO.xls in C:\www\test1.php on line 36

    Warning: filesize() [function.filesize]: stat failed for PINCOPALLINO.xls in C:\www\test1.php on line 37


    Le linee 36 e 37 sono, rispettivamente: $filemtime=date("m-d-Y H:i:s", filemtime($value)); e $filesize=filesize($value);

    Come mai?
    Qualcuno sa aiutarmi?

  2. #2
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    il problema è qui
    Codice PHP:
    function dir_list($directory FALSE) {
        
    $dirs= array();
        
    $files = array();
        if (
    $handle opendir("" $directory)) {
            while (
    $file readdir($handle)) {
                if (
    is_dir("./{$directory}/{$file}")) {
    /*
                    if ($file != "." & $file != "..") $dirs[] = $file;
                } else {
                    if ($file != "." & $file != "..") $files[] = $file;
    */
                    
    if ($file != "." $file != ".."$dirs[] ="./$directory/$file";
                } else {
                    if (
    $file != "." $file != ".."$files[] ="./$directory/$file";


                }
            }
        }
        
    closedir($handle); 
    prova un pò...
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  3. #3
    ho provato ed, in effetti, così non mi da più gli errori di cui sopra.
    Solo che adesso, invece dei nomi delle cartelle e dei files, mi restituisce il percorso + il nome del file. Come posso avere solo i nomi di cartelle e files?

    Inoltre, a me servirebbe una funzione ricorsiva che, a partire da una data cartella (per l'appunto PIPPO), ricerchi nelle sottocartelle (scendendo anche di 2 livelli) la presenza dei files. Sai se esiste qualcosa del genere?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    il tuo è un controsenso... cosa te ne fai del solo nome del file o directory in un processo ricorsivo? se hai 2 file chiamati pippo.txt in cartelle diverse, dopo non sei piu in grado di riconoscerli....

    cmq eccoti una funzione che utilizzo io

    Codice PHP:
    <?php
    function list_elements($dir,$out
      {
      
    $file_list '';
      
    $stack[] = $dir;
      while (
    $stack
        {
        
    $current_dir array_pop($stack);
        if (
    $dh opendir($current_dir)) 
          {
          while ((
    $file readdir($dh)) !== false
            {
            if (
    $file !== '.' AND $file !== '..'
              {
              
    $current_file "{$current_dir}/{$file}";
              if (
    is_file($current_file)) 
                {
                
    $file_list[] = "{$current_dir}/{$file}";
                } 
              elseif (
    is_dir($current_file)) 
                {
                
    $stack[] = $current_file;
                
    $dirs[]=$current_file//l' array delle directory
              //echo $current_file." corrisponde ad una directory
    ";    // questa
                }
              }
            }
          }
        }
      if (
    $out=='file')
        return 
    $file_list;
      if (
    $out=='dir')
        {
        //
    $dirs=array_reverse($dirs);
        return 
    $dirs;
        }
      }

    $dirs=list_elements("cartella",'dir'); // raccoglie tutte le dir

    $files=list_elements("cartella",'file'); // raccoglie tutti i files

    echo "
    <pre>";
    print_r(
    $dirs);
    print_r(
    $files);
    ?>
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  5. #5
    i files non avranno tutti gli stessi nomi...e la funzione ricorsiva mi serve per connettermi a dei files excel sparsi in varie sottocartella partire dalla root da cui estrapolare dei dati

  6. #6
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    allora è sufficente che per ogni file che avrai nell' array $files utilizzi basename($file) e lui da tutto il path del file estrae solo il nome del file.

    Codice PHP:
    $file="/cartella/sottocartella/file.xls"
    echo basename($file); // stampa file.xls 
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

  7. #7
    grazie veramente...ora ho due array: 1 per le cartelle e 1 per i files

    A questo punto non mi resta che impostare la connessione con i files excel...ma a che punto del codice devo impostarla???

  8. #8
    Utente di HTML.it L'avatar di dottwatson
    Registrato dal
    Feb 2007
    Messaggi
    3,012
    beh sicuramente leggendo l' array dei files no?

    Codice PHP:
    foreach ($files as $file)
    {
    // codice lettura file xls

    ma ricordati che il path completo di cartella/file ti servirà lo stesso per aprire il file
    Non sempre essere l'ultimo è un male... almeno non devi guardarti le spalle

    il mio profilo su PHPClasses e il mio blog laboweb

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.