Bonjour,
j'ai posé cette question, ailleurs mais impossible d'obtenir une vrais réponse, alors je reviens ici espèrent votre aide:

voila qui doit être bien banal pour certains, mais je bloque sur la fabrication d'un robot PHP qui va chercher
dans 8000 php tout mes liens, il me suffirait de repérer les lignes concernées, ça c'es OK avec cela

<?php
/* ==========dans ma boucle de lecture ligne par ligne d'un php============= */
$pos = strpos($fileligne, ".php");
  if ($pos>0)
              { 
               /* alors je veux le nom */  
               }

Je ne sais rien de la ligne et n'est pas d'autre repaires que la fin du nom :".php"
Les lignes pouvant par exemple avoir cette forme

<td><div align="center"><a class='LesA3'  href="cpa_009.php"><b>Retour</b></a></div></td>

Ne sachant pas si le href est href=" ou href='
Mille mercis d'avance
je veux donc par exemple pour cet exemple "cpa_009.php"
Modifié par Christele (30 Nov 2015 - 09:18)

<?php 
	$fileligne = '<td><div align="center"><a class=\'LesA3\'  href="cpa_009.php"><b>Retour</b></a></div></td>';
	$pos = strpos($fileligne, ".php");
	if ($pos>0) {
		$hrefpos = FALSE;
		$i = -1;
		while($i < $pos) {
			$i = strpos($fileligne, 'href=', $i+1);
			if($i === FALSE) break;
			$hrefpos = $i;
		}
		if(!($hrefpos === FALSE)) {
			$link = substr($fileligne, $hrefpos + 6, $pos - $hrefpos -2);
			var_dump($link);
		}
    }
?>

La bonne fonction à utiliser serait de faire un strrpos, mais la valeur de "offset" de cette fonction est apparemment bugguée.
Pourquoi ne pas passer simplement par un regex ?

preg_match_all("`href\h*=\h*(?:'|\")(.+)(?:'|\")`iU", file_get_contents("fichier.php"), $m);
var_dump($m);
Zelalsan a écrit :
Pourquoi ne pas passer simplement par un regex ?

preg_match_all("`href\h*=\h*(?:'|\")(.+)(?:'|\")`iU", file_get_contents("fichier.php"), $m);
var_dump($m);

En te lisant on se demande si tu as lu le sujet Smiley decu
J'ais dit 8.000 php
J'ais dit obtenir les href
prenons lesphp/theme_marco_collec_tonner06.php
j'appliques ta formule:

<?php
header('Content-Type: text/html; charset=utf-8');
preg_match_all("`href\h*=\h*(?:'|\")(.+)(?:'|\")`iU", file_get_contents("lesphp/theme_marco_collec_vill_guyard01.php"), $m);
var_dump($m);
?>


le php était

<?php  
session_start();
$moijipi="";
require("index-param.php");
$Leretour="cheny_home.php";
$lapage="theme_marco_collec_tonner06.php";
$titre_baniere="Cheny mon Village, philatélie et marcophilie ";
$LeTitle="Cheny mon Village, philatélie et marcophilie ";
$Meta1="Cheny mon Village, philatélie et marcophilie de ".$Meta1;
$Meta2="Cheny mon Village, philatélie et marcophilie de ".$Meta2;
require("lesw/wdoctype.php");
require("lesw/wmenu.php");
?>
<a class='LesA3'  href="cheny_home.php"><img src="theme/marco/collec/img/home01.gif" border="0" width="16" height="16" alt="Au secours ! Je suis perdu !" align="absmiddle"></a>
<p align="center"><font size="+2"><b><i>Tonnerre</i></b></font></p>
<!--  -->
<table border="0" align="center" cellspacing="5" summary="">
	<tr>
		<td><div align="center"><b><i>1896</i></b><br>
		<i>Lettre de Tonnerre à Villeneuve-l'Archevêque</i></div></td>
	</tr>
	<tr>
		<td><img src="theme/marco/collec/doc/tonner06.jpg" border="0" width="562" height="428" alt=""></td>
	</tr>
	<tr>
		<td><div align="center"></div></td>
	</tr>
</table>
<p align="center"><table width="350" border="0" align="center" summary="">
	<tr>
		<td><div align="left"><a class='LesA3'  href="tonner05.php"><img src="theme/marco/collec/img/gauche.gif" border="0" width="45" height="25" alt=""></a></div></td>
		<td><div align="center"><b><a class='LesA3'  href="index.php">Retour</a></b></div></td>
		<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
	</tr>
</table></p>
 <?php require("lesw/wbas.php"); ?>


Il me répond

array(2) { [0]=> array(4) { [0]=> string(21) "href="cheny_home.php"" [1]=> string(24) "href="vill_guyard02.php"" [2]=> string(16) "href="index.php"" [3]=> string(24) "href="vill_guyard03.php"" } [1]=> array(4) { [0]=> string(14) "cheny_home.php" [1]=> string(17) "vill_guyard02.php" [2]=> string(9) "index.php" [3]=> string(17) "vill_guyard03.php" } }


Je fais quoi avec ça ?? et ou est tonner05.php
Je te cite :
"En te lisant on se demande si tu as lu le sujet."
Ajouter un smiley à cette remarque n'adoucit en rien le côté pédant de ta réponse... Si tu veux que les autres te donnent un coup de main, les prendre pour des rigolos, voire des abrutis, n'est probablement pas la meilleure approche. Un minimum de diplomatie et de savoir vivre est souhaitable. Personne n'est à ton service..
PapyJP a écrit :

La bonne fonction à utiliser serait ......

En attendant cela me va à merveille !! Bravo l'artiste ! Smiley smile
A propos tu sais que mes 10 petits enfants m'appellent PapyJP Smiley ravi
Modifié par Christele (30 Nov 2015 - 09:49)
@Christele> Et que justifie une réaction pareille ? Un minimum de décence ne ferait pas de mal.
C'est d'autant plus ridicule que ça répond parfaitement à ton exemple :

array (size=2)
  0 => 
    array (size=3)
      0 => string 'href="cheny_home.php"' (length=21)
      1 => string 'href="tonner05.php"' (length=19)
      2 => string 'href="index.php"' (length=16)
  1 => 
    array (size=3)
      0 => string 'cheny_home.php' (length=14)
      1 => string 'tonner05.php' (length=12)
      2 => string 'index.php' (length=9)
Bonjour,
Bien bien, désolé, je n'obtient pas ce résultat Smiley eek
n'en parlons plus .
(je viens de re-tester il me sort ce que j'ais posté c'est a dire pas de tonner05.php ??) Smiley confused
Bon parlons quand même de l'exemple...
Si tu testes en brut, i.e un fichier ne contenant que le bout de code que j'ai donné et en spécifiant le chemin vers le fichier à traiter, le résultat affichera bien l'ensemble des href.
Zelalsan a écrit :
Pourquoi ne pas passer simplement par un regex ?

preg_match_all("`href\h*=\h*(?:'|\")(.+)(?:'|\")`iU", file_get_contents("fichier.php"), $m);
var_dump($m);

J'adore le mot "simplement"!!!
J'ai du mal à comprendre à peu près ce que fait ce regex, quant à le concevoir...
PapyJP a écrit :

J'adore le mot "simplement"!!!
J'ai du mal à comprendre à peu près ce que fait ce regex, quant à le concevoir...

C'est donc le moment de réviser les regex Smiley cligne C'est une expression régulière très simple qui récupère l'ensemble des valeurs comprises dans un

href="..." 

ou

href='...'

Il n'y a absolument rien d'extraordinaire là-dedans et je ne comprends pas toute l'excitation qu'il y a autour.

Pourquoi utiliser une dizaine de lignes de codes couteux lorsqu'une ligne suffit ?
Bonjour,

Je trouve en effet assez honteuse la réaction de JP Evelyne, et son absence de réponse aux différents rappels de bien-séance...

Bref, un GRAND MERCI Zelalsan pour ta regex qui m'a fait économiser du temps toujours précieux.
Je dois bien avouer que je connais un peu les regex et que la tienne ne me dit pas grand chose mais en tous cas elle fonctionne et m'a bien permis d'extraire le contenu d'un href avec ce code :

preg_match_all("`href\h*=\h*(?:'|\")(.+)(?:'|\")`iU", $output, $m);
print $m[1][0];

MERCI !
Modérateur
Bonjour,

Dieu a dit :

Il y aura ceux qui feront du html, et pour ceux-là, ce sera facile d'être compris.

Il y aura ceux qui feront du css, et pour ceux-là, ce sera moins facile d'être compris.

Il y aura ceux qui feront du javascript ou du php, et pour ceux-là, ce sera difficile d'être compris.

Et il y aura ceux qui feront des regex, et pour ceux-là, ce sera impossible d'être compris.

Amicalement,

PS :
Christele a écrit :
Bonjour,
Bien bien, désolé, je n'obtient pas ce résultat Smiley eek
n'en parlons plus .
(je viens de re-tester il me sort ce que j'ais posté c'est a dire pas de tonner05.php ??) Smiley confused


Il me semble que tu ne donnes pas le bon nom de fichier à la fonction file_get_contents(). Smiley cligne
parsimonhi a écrit :
Bonjour,
Il me semble que tu ne donnes pas le bon nom de fichier à la fonction file_get_contents(). Smiley cligne


Je passe ici par chance et je vois ton message, ayant mis résolu depuis longtemps, je ne suivait plus ce sujet , excuses !
Rien de changer dans ma réponse, lorsque je parcours mes 8.000 fichiers j'ouvres chaque fichiers et je trouve bien toutes mes infos, sauf les deux trois href contenus dans chaque php !
parmi ces fichiers il y a "lesphp/theme_marco_collec_vill_guyard01.php" pourquoi je ne ferais pas mon
file_get_contents() sur celui là ?? je ne comprends pas bien escuses moi Smiley confused
Modérateur
Bonjour,

Parce que les liens concernant "tonner06" sont probablement dans "lesphp/theme_marco_collec_tonner06.php" et non dans "lesphp/theme_marco_collec_vill_guyard01.php".

Mais bon, évidemment, je n'ai pas le code. C'est toi qui l'a ! Smiley cligne

Amicalement,
Modifié par parsimonhi (18 Jan 2016 - 14:24)
parsimonhi a écrit :
Bonjour,
Parce que les liens concernant "tonner06" sont probablement dans "lesphp/theme_marco_collec_tonner06.php" et non dans "lesphp/theme_marco_collec_vill_guyard01.php".
Mais bon, évidemment, je n'ai pas le code. C'est toi qui l'a ! Smiley cligne
Amicalement,

Elle est bien bonne, en effet le but de l'outil est de me faire une liste de mes 8.000 PHP, en indiquant devant chaque non de PHP (8.000) quel php il appel !
par exemple
le php lesphp/theme_marco_collec_vill_guyard01.php
appel lesphp/theme_marco_collec_vill_guyard07.php et lesphp/theme_marco_collec_vill_guyard05.php
le php lesphp/aja_marco_collec_vill.php
appel lesphp/collec_vill_guyard08.php et lesphp/theme_marco.php

ETC...