compter fichier dans un dossier tres , voir trop lent

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : compter fichier dans un dossier tres , voir trop lent

Re: compter fichier dans un dossier tres , voir trop lent

par AB » 24 sept. 2010, 21:23

test avec FilesystemIterator il comptera pas les dot (ou GlobIterator sinon)
Oui merci chez moi c'est la solution la plus rapide : équivalent à un DirectoryIterator + iterator_count mais ne compte que les fichiers.
Mais ton test montre que s'il y a beaucoup de fichiers FilesystemIterator est plus rapide :)

De toutes façons théoriquement c'était bizarre que glob soit le plus rapide :-k

Re: compter fichier dans un dossier tres , voir trop lent

par stealth35 » 24 sept. 2010, 21:05

test avec FilesystemIterator il comptera pas les dot (ou GlobIterator sinon)

j'arrive a ca moi ducoup
4000 durée exécution glob = 0.028401851654053
4000 durée exécution readdir = 0.033766984939575
4000 durée exécution scandir = 0.0072669982910156
4000 durée exécution DirectoryIterator = 0.024354934692383
4002 durée exécution DirectoryIterator + iterator_count= 0.0054430961608887
4000 durée exécution FilesystemIterator + iterator_count= 0.0028841495513916
4000 durée exécution GlobIterator + iterator_count= 0.025357007980347
c'est pu le glob le plus rapide... bizzare

Re: compter fichier dans un dossier tres , voir trop lent

par AB » 24 sept. 2010, 20:55

et avec le mien ca donne quoi ?
chez moi le glob va le plus vite
Je sais pas comment vous faites, car j'ai des résultats inverse :

code de test sur 501 fichiers photos en local :
header('Content-type: text/html; charset=UTF-8');

$time = microtime(true);
//glob
$files = glob("PHOTOS_GF/*");
$compteur = count($files);
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo $compteur.' durée exécution glob = ' . $time_tot.'<br />';


$time = microtime(true);
//opendir 
$compteur=0;
$handle=@opendir("PHOTOS_GF/");
while ($fichier = @readdir($handle)){
if($fichier != "." && $fichier != "..")
    $compteur++;
}
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo $compteur.' durée exécution readdir = ' . $time_tot.'<br />';

$time = microtime(true);
//scandir
$compteur=0;
$handle=scandir("PHOTOS_GF/");
$compteur = count($handle);
if (in_array('.',$handle)) $compteur--;
if (in_array('..',$handle)) $compteur--;
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo $compteur.' durée exécution scandir = ' . $time_tot.'<br />';

$time = microtime(true);
//DirectoryIterator
$compteur=0;
$files = new DirectoryIterator("PHOTOS_GF/");
foreach ($files as $fileinfo) if (!$fileinfo->isDot()) $compteur++;
//$compteur = iterator_count($files);
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo $compteur.' durée exécution DirectoryIterator = ' . $time_tot.'<br />';
501 durée exécution glob = 0.093102931976318
501 durée exécution readdir = 0.0020310878753662
501 durée exécution scandir = 0.0015900135040283
501 durée exécution DirectoryIterator = 0.0017697811126709

DirectoryIterator va le plus vite si on utilise directement iterator_count($files) :
503 durée exécution DirectoryIterator = 0.0014150142669678
mais dans ce cas ça compte les '.' et '..' donc ça fait 2 fichiers de trop au compteur c'est pour cette raison que j'ai bouclé et testé avec if (!$fileinfo->isDot())

Re: compter fichier dans un dossier tres , voir trop lent

par stealth35 » 24 sept. 2010, 18:03

et avec le mien ca donne quoi ?
chez moi le glob va le plus vite

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 24 sept. 2010, 08:47

j'ai pas opendir j'ai que readdir
voici le code mis :
$time = microtime(true);
//Inclure le code avec glob ici
$files = glob("upload/*");
$compteur = count($files);
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo ' durée exécution glob = ' . $time_tot.'<br />';

$time = microtime(true);
//Inclure le code avec opendir ici
$compteur=0;
$handle=@opendir("upload/");
while ($fichier = @readdir($handle)){
    $listing[$fichier]=$compteur;
    $compteur++;
}
$time_end = microtime(true);
$time_tot = $time_end - $time;
echo ' durée exécution readdir = ' . $time_tot.'<br />';
?>
et le resultat :

durée exécution glob = 0.016347169876099
durée exécution readdir = 0.01785683631897

glob a tjrs 0.002 en v de moins (limite pareil)

Re: compter fichier dans un dossier tres , voir trop lent

par AB » 23 sept. 2010, 20:06

Ben alors maintenant que tu as php 5.2, ce serait intéressant de voir la différence entre un glob (qui devrait aller le moins vite puisqu'il fait une recherche même simple sur les fichiers), et un opendir/scandir et les nouvelles fonctions php5 DirectoryIterator. Avec tes 4000 fichiers ça ferait un test instructif.
$time = microtime(true);

//Inclure le code avec glob ici

$time_end = microtime(true);
$time_tot = $time_end - $time;
echo 'durée exécution glob = ' . $time_tot.'<br />';

$time = microtime(true);

//Inclure le code avec opendir ici

$time_end = microtime(true);
$time_tot = $time_end - $time;
echo 'durée exécution opendir = ' . $time_tot.'<br />';


$time = microtime(true);

//Inclure le code avec DirectoryIterator ici

$time_end = microtime(true);
$time_tot = $time_end - $time;
echo 'durée exécution DirectoryIterator = ' . $time_tot.'<br />';
Tu pourrais nous donner le résultat de ces tests pour info ?

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 23 sept. 2010, 18:54

merci pour le lien j'ai mis le .htaccess avec le ligne 5.2 :)
PHP Version 5.2.14

Re: compter fichier dans un dossier tres , voir trop lent

par stealth35 » 23 sept. 2010, 17:30

Hé ben, qu'on puisse encore voir ça en 2010, ça m'épate.
OVH :)
tu sais que OVH est l'un des seul a proposé php 5.3 ?

http://guide.ovh.com/Php5ChezOvh

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 23 sept. 2010, 16:17

alors voulant vraiment savoir d'ou venait ce soucis de lag a l'affichage , 1 fois sur 4 , j'ai testé un autre script via un fichier txt.

l'idée:
lire un fichier txt et afficher le chiffre directement sur le site ,
ce fichier etant toujours ouvert , je procedais au comptage des fichiers (pour de vrai cette fois)
puis cette valeur $x , je l'ecris dans mon premier fichier txt ouvert au debut .

voici le script (desolé si ya des erreurs de codage mais il est fonctionnel)
<?php
// on charge le fichier nb_i avec la valeur 
$fp =  fopen("nb_i.txt","r+");    
$compteur = fgets($fp,255);    
// on affiche le nbr de fichiers  
echo $compteur;                      
// on lance le comptage du dossier "upload"
$handle=@opendir("upload/"); 
while ($fichier = @readdir($handle)){
	$listing[$fichier]=$compteur2;
	$compteur2++; 
} 
// le fichier etant tjrs ouvert on efface l'ancienne valeur et on y met la valeur $nb_i
$nb_i = fgets ($fp, 11);  
$nb_i = $compteur2;  
fseek ($fp, 0);  
fputs ($fp, $nb_i);  
fclose ($fp);  

?>
je me suis rendu compte que meme avec le txt ca ramé ............... limite penible .
j'ai donc fais mumuse avec firefox et rechargé 50 fois la page simple du script.
et la Ohhhhhhhhhhhhhhhhh grande suprise dans ma barre en bas a gauche un lien apparait furtivement avec le lien de mon site :

cdn1.predictad.com

j'ai fais des recherches et en fait ce lien fait ramé FFX en venant s'ajouter dans les modules !!
une fois supprimé , j'ai retesté le premier script et la .. miracle affichage direct :)

merci a tous pour votre aide , qui malgré le soucis n'etait pas PHP mais navigateur .
je suis assez surpris de voir que j'ai recuperé ca via un soft installé ...

Cordialement Pascal

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 23 sept. 2010, 15:23

Hé ben, qu'on puisse encore voir ça en 2010, ça m'épate.
OVH :)
bien appliqué, le readdir. scandir donnerait des résultats encore plus rapides à mon avis.

le script que j'ai mis au dessus avec readdir est pas bon alors ?

Re: compter fichier dans un dossier tres , voir trop lent

par Berzemus » 23 sept. 2010, 11:51

ca me retourne ça :

PHP Version 4.4.9
Hé ben, qu'on puisse encore voir ça en 2010, ça m'épate.

bien appliqué, le readdir. scandir donnerait des résultats encore plus rapides à mon avis.

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 23 sept. 2010, 11:37

ca me retourne ça :

PHP Version 4.4.9

Re: compter fichier dans un dossier tres , voir trop lent

par xTG » 23 sept. 2010, 09:46

phpinfo();
Pour connaître les informations. ^_-

Re: compter fichier dans un dossier tres , voir trop lent

par sax76 » 23 sept. 2010, 08:17

comment puis je le savoir ?
c'est la version de mon hebergeur c'est ça ?


par contre le script que j'ai mis au dessus lag aussi moins que le premier mais lag quand meme :(

Re: compter fichier dans un dossier tres , voir trop lent

par stealth35 » 23 sept. 2010, 00:08

super vite .......... en plantage


Fatal error: Cannot instantiate non-existent class: directoryiterator
a la ligne 3
//$files = glob("upload/*");   <= mon ex code
//$compteur = count($files);  <= mon ex code 
$files = new DirectoryIterator("upload");
$compteur = iterator_count($files);
echo $compteur; 
:(
t'as quel version de php ? (php 4 et des poussières je suppose)