Désolé pour le code long, je le perds vraiment.php étrange problème de bouclage
Ce code est supposé obtenir une liste d'URL via POST, dans une zone de texte avec des lignes de rupture entre chaque URL. Le script devrait télécharger chaque URL, parcourir le code HTML et prendre des liens, puis aller dans ces liens, obtenir des données et faire écho.
Pour une raison quelconque, visuellement il semble que je cours getDetails()
une seule fois, car je ne reçois qu'un ensemble de résultats.
J'ai vérifié plusieurs fois si la boucle foreach
prend chaque URL séparément et cette partie travaille
Quelqu'un peut-il repérer le problème?
require_once('simple_html_dom.php');
function getDetails($html) {
$dom = new simple_html_dom;
$dom->load($html);
$title = $dom->find('h1', 0)->find('a', 0);
foreach($dom->find('span[style="color:#333333"]') as $element) {
$address = $element->innertext;
}
$address = str_replace("<br>"," ",$address);
$address = str_replace(","," ",$address);
$title->innertext = str_replace(","," ",$title->innertext);
if ($address == "") {
$exp = explode("<strong><strong>",$html);
$exp2 = explode("</strong>",$exp[1]);
$address = $exp2[0];
}
echo $title->innertext . "," . $address . "<br>";
}
function getHtml($Url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_REFERER, "http://www.google.com/");
curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
function getdd($u) {
$html = getHtml($u);
$dom = new simple_html_dom;
$dom->load($html);
foreach($dom->find('a') as $element) {
if (strstr($element->href,"display_one.asp")) {
$durls[] = $element->href;
}
}
return $durls;
}
if (isset($_POST['url'])) {
$urls = explode("\n",$_POST['url']);
foreach ($urls as $u) {
$durls2 = getdd($u);
$durls2 = array_unique($durls2);
foreach ($durls2 as $durl) {
$d = getHtml("http://www.example.co.il/" . $durl);
getDetails($d);
}
}
}
Pouvez-vous donner un exemple de ce à quoi pourrait ressembler le $ _POST ['url']? Je ne comprends pas vraiment ce que vous essayez de faire. –
obtenir une sortie de débogage là-bas. nombre d'échos ($ urls). "\ n"; à la boucle externe, echo "\ t" .count ($ durls2). "\ n"; à la boucle du milieu, et echo "\ t \ t". $ durl. "\ n"; à la boucle intérieure. Cela vous dira combien de fois les boucles sont en cours d'exécution, puis nous pouvons déterminer où il échoue. – ben