Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
* script PHP per contare files in cartella e sottocartelle
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 08 Ott 2008 16:08    Oggetto: * script PHP per contare files in cartella e sottocartelle Rispondi citando

cari olimpi,
ho questo problema.

vorrei un semplice script php che contasse i file contenuti in una cartella (che in realtà contiene solo sottocartelle, dentro le quali ci sono i file).

in rete ho trovato solo script php che contavano i file dentro quella cartella e non nelle sub (infatti nella pagina www.coldcaseitalia.net c'è scritto "The are 88 files in the directory", ma in realtà gli "88 files" sono le 88 sottocartelle).

visto che mi avete spesso aiutata (come qui), chiedo il vostro aiuto anche questa volta.

specifico che uso un CMS e che, se possibile, vorrei uno script "nudo e crudo", che non rimandi ad altre pagine o file di configurazione (per motivi legati al CMS e alle sue impostazioni di sicurezza).

è possibile? Shocked

grazie in anticipo, comunque Wink
Top
Profilo Invia messaggio privato HomePage
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 08 Ott 2008 16:35    Oggetto: Rispondi citando

Quindi tu vuoi che conti tutti i file (ma non le directory/cartelle) contenute in uan certa direcotry, e in tutte le sue sotto-dorectory (quindi da un certo putno dell'"albero" delle directory in giù)?
Top
Profilo Invia messaggio privato
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 08 Ott 2008 16:41    Oggetto: Rispondi citando

la situazione è questa:

- ho una cartella uploads/images che contiene la cartella SCREENCAPS che è quella che mi interessa

- dentro SCREENCAPS ci sono 88 sottocartelle, ognuna col nome di un episodio, ognuna con dentro un centinaio di immagini

- dentro screencaps ci sono solo cartelle e nessun file

- vorrei mostrare ai visitatori quante immagini screencap totali ci sono

- gli script che ho trovato finora contano solo dentro la cartella screencaps (trovando 88 elementi) ma non vanno dentro ognuna delle subfolders, che è ciò che vorrei

in sostanza, mi servirebbe
contare i file contenuti in "screencaps" tenendo conto che questa cartella è solo un contenitore delle sue sottocartelle e che quello che mi serve è un totale dei file contenuti nelle sottocartelle di "screencaps".

sono stata spiegata o ho incasinato ulteriormente? Shocked
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11809
Residenza: Tokelau

MessaggioInviato: 08 Ott 2008 17:39    Oggetto: Re: script PHP per contare files in cartella e sottocartelle Rispondi citando

wildchloee ha scritto:
in rete ho trovato solo script php che contavano i file dentro quella cartella e non nelle sub


magari non è troppo un casino modificarlo... puoi darci un link?
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 08 Ott 2008 18:11    Oggetto: Rispondi citando

Ti posto il codice di una funzione che conta ricorsivamente tutti i files dentro ad una directory.
Tieni conto che questa funzione nasce per lavorare su ambienti linux/unix like percui i files che iniziano per '.' sono file nascosti che questo script conta.
Non credo però che sotto win tu debba avere problemi.
Codice:

<?php
/**
 * Leggere ricorsivamente una directory e conta il numero di files
 *
 * @param String: $path: directory di partenza
 * @return Mixed: numero di files trovati oppure false se la $path di partenza è un file
 */
   function countFilesRec($path)
   {
      $files=0;
      
   // Apro la dir di partenza
      $dir = opendir($path);
      
   // Se non è una dir (è un file) termino ritornando false
      if (!$dir)
      {
         return false;
      }
      
   // Mentre ho qualcosa dentro a $dir
      while (($file = readdir($dir)) !== false)
      {
      // Se il file è . oppure .. non conto
         if ($file=='.' || $file=='..')
         {
            continue;
         }
         
      // Se trovo una subdir richiamo la funzione con parametro $path/subdir/
         if (is_dir($path . DIRECTORY_SEPARATOR . $file))
         {
            $files+=countFilesRec($path . DIRECTORY_SEPARATOR . $file);
         }
         else
         {
            ++$files;
         }
      }
      closedir($dir);
   
      return $files;
   }
?>
Top
Profilo Invia messaggio privato
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 08 Ott 2008 19:16    Oggetto: Rispondi citando

come si usa suddetta funzione? perchè anche io l'avevo trovata ma non ero in grado di capire...
Top
Profilo Invia messaggio privato HomePage
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 08 Ott 2008 19:57    Oggetto: Rispondi citando

La lanci passandogli come parametro il percorso della cartella dentro la quale vuoi "contare".

come risposta restutuirà
*false se il parametro passato non punta ad una directory
*il numero dei file (solo file, no directory) contenute in quella directory e le sue directory, altrimenti.


(Almeno, questo è quello che intuisco, di Php so ben poco, diciamo pure niente Confused )
Top
Profilo Invia messaggio privato
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 09 Ott 2008 10:14    Oggetto: Rispondi citando

chemicalbit ha scritto:
La lanci passandogli come parametro il percorso della cartella dentro la quale vuoi "contare".

come risposta restutuirà
*false se il parametro passato non punta ad una directory
*il numero dei file (solo file, no directory) contenute in quella directory e le sue directory, altrimenti.


per queste cose ho bisogno di istruzioni passo passo, non conosco il linguaggio... per esempio quando avevo trovato questo script non capivo DOVE si dovessero inserire i parametri...

una volta configurato cosa devo fare?

--- INTANTO ---

posto lo scriptino che ho trovato più facile comprendere, il quale però non conta le sottocartelle (vedi i primi post per capire):

Codice:
$dir_path = "uploads/images/screencaps/";
$mydir = dir($dir_path);

$file_count = 0;
while($file_name = $mydir->read())
{
if($file_name!="." && $file_name!="..")
$file_count++;
}

echo "The are $file_count files in the directory";


grazie, come sempre Very Happy
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 09 Ott 2008 12:25    Oggetto: Rispondi citando

E' molto semplice.
1. Da qualche parte crei (se non vuoi usarne uno che hai già) un file php in cui incolli il codice che ti ho postato. Ad esempio il file potrebbe chiamarsi "mia_libreria.inc.php" magari dentro ad una directory "lib"
2. Nelle pagine in cui vuoi fornire l'informazione del numero di files, in alto aggiungi la riga:
Codice:

<?
require_once($_SERVER['DOCUMENT_ROOT] . '/lib/mia_libreria.inc.php');
?>

Nel punto in cui vuoi scrivere il numero aggiungi:
Codice:

<?
print 'Il numero di files è: ' . countFilesRec($_SERVER['DOCUMENT_ROOT'] . '/uploads/images/SCREENCAPS');
?>

ossia alla funzione passi il percorso della dir "/uploads/images/SCREENCAPS"
Top
Profilo Invia messaggio privato
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 09 Ott 2008 16:04    Oggetto: Rispondi citando

mi è molto difficile inserire questo:
Codice:
<?
require_once($_SERVER['DOCUMENT_ROOT] . '/lib/mia_libreria.inc.php');
?>

perchè uso un CMS che per motivi di sicurezza non mi permette di utilizzare determinate funzioni php.
prima, per evitare di scrivere mille volte la stessa frase, usavo gli echo, e all'inizio di ogni pagina inserivo un "include config.php" con tutte le variabili che mi servivano;
da quando uso il CMS non mi è più possibile, non funziona (inserivo l'include, inserivo echo, ma non "echava" niente; in seguito ho letto questa cosa anche nel supporto tecnico...)

proprio per questo, se si tratta di uno scriptino al volo da inserire laddove voglio che compaia la frase, posso usare senza problemi un tag personalizzato da creare nel CMS;
se invece devo fare degli include e dei require da inserire all'inizio della pagina, diventa un problema.

non c'è modo di aggiungere qualcosa a questo? --->
Codice:
$dir_path = "uploads/images/screencaps/";
$mydir = dir($dir_path);

$file_count = 0;
while($file_name = $mydir->read())
{
if($file_name!="." && $file_name!="..")
$file_count++;
}

echo "The are $file_count files in the directory";
Top
Profilo Invia messaggio privato HomePage
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11809
Residenza: Tokelau

MessaggioInviato: 09 Ott 2008 16:47    Oggetto: Rispondi citando

facciamo un mix dei due script e vediamo cosa capita Wink

Codice:
<?php
/**
 * Leggere ricorsivamente una directory e conta il numero di files
 *
 * @param String: $path: directory di partenza
 * @return Mixed: numero di files trovati oppure false se la $path di partenza è un file
 */
   function countFilesRec($path)
   {
      $files=0;
       
   // Apro la dir di partenza
      $dir = opendir($path);
       
   // Se non è una dir (è un file) termino ritornando false
      if (!$dir)
      {
         return false;
      }
       
   // Mentre ho qualcosa dentro a $dir
      while (($file = readdir($dir)) !== false)
      {
      // Se il file è . oppure .. non conto
         if ($file=='.' || $file=='..')
         {
            continue;
         }
         
      // Se trovo una subdir richiamo la funzione con parametro $path/subdir/
         if (is_dir($path . DIRECTORY_SEPARATOR . $file))
         {
            $files+=countFilesRec($path . DIRECTORY_SEPARATOR . $file);
         }
         else
         {
            ++$files;
         }
      }
      closedir($dir);
   
      return $files;
   }

$dir_path = "uploads/images/screencaps/";
$file_count = countFilesRec ($dir_path);
echo "Ci sono $file_count file nella directory";
?>


dovresti essere a posto, senza dover includere file esterni.

Ciao
Top
Profilo Invia messaggio privato HomePage
wildchloee
Eroe in grazia degli dei
Eroe in grazia degli dei


Registrato: 22/09/07 12:56
Messaggi: 190
Residenza: Davanti al mio bambino(notebook)

MessaggioInviato: 09 Ott 2008 17:30    Oggetto: Rispondi citando

yessssss! perfetto! Very Happy

grazie mille, come sempre! vi crediterò nel sito Wink
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 09 Ott 2008 19:45    Oggetto: Rispondi citando

Purtroppo così però se vuoi visualizzare in più pagine il numero di files devi fare copia/incolla del tutto in ogni files.
Ovviamente se tu non hai questo problema allora la soluzione di SverX è proprio ad hoc per te! Very Happy
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 12:16
Messaggi: 11809
Residenza: Tokelau

MessaggioInviato: 10 Ott 2008 12:03    Oggetto: Rispondi citando

wildchloee ha scritto:
perfetto!


Io ho un dubbio... mi ci mette qualche secondo (tra 3 e 5) prima di aprire la pagina, non è che è un po' lento? Tutte le volte ricontare i files... (certo che i dischi hanno delle cache però...) boh... sarebbe forse da provare a disabilitare lo script e vedere quanto ci mette a generare la pagina senza questo lavoraccio...
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 21:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 10 Ott 2008 14:06    Oggetto: Rispondi citando

Se però ci sono poche possibilità di intervenire è dura ottimizzare la cosa.
Si potrebbe creare una procedura batch che in un file scriva il numero delle immagini così la pagina che dovrà visualizzare tale numero lo andrà a pescare da lì.
Per aggiornare questo numero, dopo ogni fase di upload la procedurà verrà lanciata a manina lato amministratore.
Ovviamente deve essere possibile poter scrivere un file lato script senza incozzare contro i problemi di sicurezza...
Top
Profilo Invia messaggio privato
chemicalbit
Dio maturo
Dio maturo


Registrato: 01/04/05 18:59
Messaggi: 18597
Residenza: Milano

MessaggioInviato: 10 Ott 2008 18:03    Oggetto: Rispondi

Oppure programmare un'esecuzione (un job) -se è consentito dai servizi offerti dall'hosting e dalle impostazioni di sicurezza del CMS- che ad es. 1 volta al giorno calcoli il numero di immagini e salvi il risultato un un file.

(1 volta al giorno come esempio,
in base alla ...variabilità del nuemro d'immagini si potrà fare anche ogni 3 ore, oppure 1 volta alla settimana).

La gallery del tuo sito ogni quanto viene modificata, mediamente?
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi