Parcourir plusieurs fichiers dans répertoire
claudiane
-
claudiane13 Messages postés 7 Statut Membre -
claudiane13 Messages postés 7 Statut Membre -
Bonjour,
j'ai trouvé ce code pour afficher le contenu de la balise <title> extraite d'un fichier
en fait dans le répertoire "dossier" , j'ai plusieurs fichiers dont je voudrais afficher le contenu de la balise <title>,
et pour compliquer le tout je ne veux afficher que les contenus <title> qui contiennent le mot "maison".
Merci pour votre aide
j'ai trouvé ce code pour afficher le contenu de la balise <title> extraite d'un fichier
$fp = fopen("https://www.pagesjaunes.fr/","r"); //lecture du fichier
while (!feof($fp)) { //on parcourt toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
echo $regs[1];
fclose($fp);
en fait dans le répertoire "dossier" , j'ai plusieurs fichiers dont je voudrais afficher le contenu de la balise <title>,
et pour compliquer le tout je ne veux afficher que les contenus <title> qui contiennent le mot "maison".
Merci pour votre aide
A voir également:
- Parcourir plusieurs fichiers dans répertoire
- Renommer plusieurs fichiers en même temps - Guide
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
- Répertoire téléphonique gratuit - Télécharger - Bureautique
16 réponses
quelque chose comme ça devrait fonctionner :
le code pour lister les fichiers viens d'ici : http://www.comscripts.com/sources/php.liste-des-fichiers-dun-dossier.51.html
(je n'ai pas testé, mais normalement si le code de comscripts fonctionner, sa devrait être bon, en tout cas le principe est là ^^ )
<?php
$folder = "nomdudossier/"; // "." si cest le dossier ou se trouve le fichier php
$dossier = opendir($folder);
while ($Fichier = readdir($dossier)) {
if ($Fichier != "." && $Fichier != "..") {
$nomFichier = $folder."/".$Fichier;
$fp = fopen($nomFichier,"r"); //lecture du fichier
while (!feof($fp)) { //on parcourt toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}
$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre
fclose($fp);
if( preg_match('#maison#', $regs[1]) ){
echo $regs[1];
}
}
}
closedir($dossier);
?>
le code pour lister les fichiers viens d'ici : http://www.comscripts.com/sources/php.liste-des-fichiers-dun-dossier.51.html
(je n'ai pas testé, mais normalement si le code de comscripts fonctionner, sa devrait être bon, en tout cas le principe est là ^^ )
Rebonsoir,
Merci pour ta réponse sonik21, j'ai testé le code tout seul pour lister les fichiers ça marche, mais le code complet me donne un page blanche.
si tu peux encore me donner un petit coup de pouce , c'est sympa
Merci pour ta réponse sonik21, j'ai testé le code tout seul pour lister les fichiers ça marche, mais le code complet me donne un page blanche.
si tu peux encore me donner un petit coup de pouce , c'est sympa
Bon bah je test le code sur mon pc pour voir ce qui bug et je repost
EDIT>
voilà ça marche ^^ :
EDIT>
voilà ça marche ^^ :
<?php
$folder = 'nomdossier/'; //nom du dossier
$files = implode('*', glob($folder.'*.php')); //pour les extensions des fichiers à ouvrir
$files .= '*';
$files .= implode('*', glob($folder.'*.html')); //pour les extensions des fichiers à ouvrir
$table_files = explode('*', $files);
$nbr_files = count($table_files);
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if( preg_match('#maison#', $regs[1]) ){ //vérifie que le mot "maison" est dans le titre
echo $regs[1].'<br>'; //affichage des titres avec le mot "maison"
}
else{
}
$page = '';
fclose($fp);
}
?>
bonsoir sonik,
je n'ai pas pu mettre ton code en fonction sur mon site, j'ai un "Internal Server Error" , tu l'as testé sur un local ou quel un serveur dédié ?
je précise que le nombre de fichiers à parcourir est de 55
Merci
je n'ai pas pu mettre ton code en fonction sur mon site, j'ai un "Internal Server Error" , tu l'as testé sur un local ou quel un serveur dédié ?
je précise que le nombre de fichiers à parcourir est de 55
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
oui, j'ai testé en local avec wamp 2.0
mais l'erreur internet est dû au script ? les autres pages de ton site fonctionnent ?
mais l'erreur internet est dû au script ? les autres pages de ton site fonctionnent ?
Oui les autres pages de mon site fonctionne bien. j'ai déjà eu une erreur comme ça sur un script, mais ça interrogeait plus de 10000 donnée, là c'est vrai que sur une cinquantaine de fichiers c'est étonnant, à moins que le script soit à optimiser.
je te remercie pour ton aide.
bonne journée
je te remercie pour ton aide.
bonne journée
c'est peut être la fonction glob qui a du mal, je test en faisant avec une boucle et je repost
j'ai remplacé preg_match() par strpos(), beaucoup plus rapide, et j'ai remplacé glob() par un listage de fichiers avec while.
<?php
$dir = 'folder';
$folder = opendir($dir);
$files = '';
while ($file = readdir ($folder)) {
if ($file != "." && $file != "..") {
$pathfile = $dir.'/'.$file;
if(filetype($pathfile) !== 'dir'){
$files .= $pathfile.'*';
}
}
}
closedir ($folder);
$table_files = explode('*', $files);
$nbr_files = count($table_files)-1;
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if( strpos($regs[1], 'maison') ){ // strpos() est plus rapide que preg_match()
echo $regs[1].'<br>';
}
else{
}
$page = '';
fclose($fp);
}
?>
j'ai remplacé preg_match() par strpos(), beaucoup plus rapide, et j'ai remplacé glob() par un listage de fichiers avec while.
désolée je ne vais pas t'embêter plus longtemps, on peut m'élire boulet, je n'arrive pas non plus à utiliser tes codes en local.
si chez toi ça marche c'est que je dois me planter quelque part.
si je réussis , je te le ferais savoir ici.
Merci pour ta patience
si chez toi ça marche c'est que je dois me planter quelque part.
si je réussis , je te le ferais savoir ici.
Merci pour ta patience
bizarre...
pour info j'ai cette architecture là :
enfin bon chance pour trouver le bug ;)
pour info j'ai cette architecture là :
/test.php (contient le code)
/folder/
/page1.html (pages dans lesquels ont recherche le contenu de <title>)
/page2.html
/mapage3.php
/...
enfin bon chance pour trouver le bug ;)
re,
l'architecture de mon site est comme là tienne
/test.php (contient le code)
/folder/page1.html (pages dans le répertoire folder dans lesquels ont recherche le contenu de <title>)
page2.html
mapage3.php
etc...
je vais encore abuser de ta gentillesse , sous wamp , dans ton php.ini , tu as quoi comme valeurs ?
Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 120 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)
l'architecture de mon site est comme là tienne
/test.php (contient le code)
/folder/page1.html (pages dans le répertoire folder dans lesquels ont recherche le contenu de <title>)
page2.html
mapage3.php
etc...
je vais encore abuser de ta gentillesse , sous wamp , dans ton php.ini , tu as quoi comme valeurs ?
Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 120 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 128M ; Maximum amount of memory a script may consume (128MB)
J'ai juste le max_execution time qui diffère :
(oui j'avais un peu abusé sur le temps d'exécution mais j'en avais besoin pour un script ^^)
mais chez moi la page ne met pas plus d'une seconde à s'afficher
max_execution_time = 3000;
(oui j'avais un peu abusé sur le temps d'exécution mais j'en avais besoin pour un script ^^)
mais chez moi la page ne met pas plus d'une seconde à s'afficher
Bonjour sonik21, même en mettant tes paramètres ça ne passe pas chez moi. mais tu peux peut être m'aider sur une autre question du même genre
https://forums.commentcamarche.net/forum/affich-13708360-extraire-contenu-de-plusieurs-balises
https://forums.commentcamarche.net/forum/affich-13708360-extraire-contenu-de-plusieurs-balises
ok je vais voir ça ;)
mais je viens de penser à un truc : pour le chemin du dossier contenant les fichiers, tu utilises "http://www.site.com/dossier/" ou bien juste "/dossier/" ?
mais je viens de penser à un truc : pour le chemin du dossier contenant les fichiers, tu utilises "http://www.site.com/dossier/" ou bien juste "/dossier/" ?
re,
je te colle le fichier tel que je l'ai mis
<?php
$dir = 'cartes-a-poster';
$folder = opendir($dir);
$files = '';
while ($file = readdir ($folder)) {
if ($file != "." && $file != "..") {
$pathfile = $dir.'/'.$file;
if(filetype($pathfile) !== 'dir'){
$files .= $pathfile.'*';
}
}
}
closedir ($folder);
$table_files = explode('*', $files);
$nbr_files = count($table_files)-1;
echo $nbr_files;//m'affiche le nombre de fichiers dans cartes-a-poster soit 56
echo $files;//m'affiche toute la liste des fichiers se trouvant dans cartes-a-poster sous cette forme ==> cartes-a-poster/acrostiche.php*cartes-a-poster/amour-saint-valentin.php*cartes-a-poster/animaux.php* etc...
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if( strpos($regs[1], 'maison') ){ // en sachant que le title peut être 'la petite maison dans la prairie' ou 'maison'...
echo $regs[1].'<br>';
}
else{
}
$page = '';
fclose($fp);
}
?>
en local je n'ai plus de page blanche mais ce message
Notice: Undefined variable: page in file /test.php line 32
en ligne pas de message d'erreur mais pas le résultat voulu
je te colle le fichier tel que je l'ai mis
<?php
$dir = 'cartes-a-poster';
$folder = opendir($dir);
$files = '';
while ($file = readdir ($folder)) {
if ($file != "." && $file != "..") {
$pathfile = $dir.'/'.$file;
if(filetype($pathfile) !== 'dir'){
$files .= $pathfile.'*';
}
}
}
closedir ($folder);
$table_files = explode('*', $files);
$nbr_files = count($table_files)-1;
echo $nbr_files;//m'affiche le nombre de fichiers dans cartes-a-poster soit 56
echo $files;//m'affiche toute la liste des fichiers se trouvant dans cartes-a-poster sous cette forme ==> cartes-a-poster/acrostiche.php*cartes-a-poster/amour-saint-valentin.php*cartes-a-poster/animaux.php* etc...
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if( strpos($regs[1], 'maison') ){ // en sachant que le title peut être 'la petite maison dans la prairie' ou 'maison'...
echo $regs[1].'<br>';
}
else{
}
$page = '';
fclose($fp);
}
?>
en local je n'ai plus de page blanche mais ce message
Notice: Undefined variable: page in file /test.php line 32
en ligne pas de message d'erreur mais pas le résultat voulu
cela vient peut-être de la variable $page, essais en la créant avant la boucle :
$page = '';
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
rebonsoir sonik21,
<?php
$dir = 'cartes-a-poster';
$folder = opendir($dir);
while ($file = readdir ($folder)) {
if ($file != "." && $file != "..") {
$pathfile = "http://monsite.fr/".$dir.'/'.$file;
if(filetype($pathfile) !== 'dir'){
$files .= $pathfile.'*';
}
}
}
closedir ($folder);
$table_files = explode('*', $files);
$nbr_files = count($table_files)-1;
//echo $nbr_files;//m'affiche le nombre de fichiers dans cartes-a-poster soit 56
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
$page = '';
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if (preg_match("/anniversaire/i", $regs[1])){ // je n'arrivais pas avec strpos
echo $table_files[$i].'<br>';
echo $regs[1].'<br>';
}
else{
}
fclose($fp);
}
?>
merci beaucoup pour le code , je suis presque à ce que je voulais , pour que ça fonctionne j'ai changé "pathfile" et mis "preg_match" à la place de "strpos" , il me reste un truc à trouver encore et un petit bug, j'essaie toute seule et si je n'y arrive pas , je crie "à l'aide"
<?php
$dir = 'cartes-a-poster';
$folder = opendir($dir);
while ($file = readdir ($folder)) {
if ($file != "." && $file != "..") {
$pathfile = "http://monsite.fr/".$dir.'/'.$file;
if(filetype($pathfile) !== 'dir'){
$files .= $pathfile.'*';
}
}
}
closedir ($folder);
$table_files = explode('*', $files);
$nbr_files = count($table_files)-1;
//echo $nbr_files;//m'affiche le nombre de fichiers dans cartes-a-poster soit 56
for($i=0; $i<$nbr_files; $i++){
$fp = fopen($table_files[$i], 'r');
$page = '';
while (!feof($fp)) {
$page .= fgets($fp, 4096);
}
$titre = eregi('<title>(.*)</title>',$page,$regs);
if (preg_match("/anniversaire/i", $regs[1])){ // je n'arrivais pas avec strpos
echo $table_files[$i].'<br>';
echo $regs[1].'<br>';
}
else{
}
fclose($fp);
}
?>
merci beaucoup pour le code , je suis presque à ce que je voulais , pour que ça fonctionne j'ai changé "pathfile" et mis "preg_match" à la place de "strpos" , il me reste un truc à trouver encore et un petit bug, j'essaie toute seule et si je n'y arrive pas , je crie "à l'aide"