PHP在Foreach内部卷曲
编辑:实际情况是,每次都会创建一个新的xml,但它会将新的$html信息添加到上一个xml中,所以当它到达列表中要卷曲的最后一个元素时,它会保存所有以前卷曲中解析的信息。我想不出是怎么回事 无法按预期执行卷曲。在下面的代码中,我有一个foreach循环,它循环通过一个列表($textary),并将list元素传递给curl,还用于使用该元素作为文件名创建一个xml文件。然后curl返回$html,然后将其解析并保存为xml。脚本运行,列表被传递,url被创建并传递给curl函数。我得到一个显示正确url的回音,返回,然后解析每个返回并保存到相应的文件中。问题似乎是curl实际上并没有卷曲新的$url。我在每个xml文件中获得完全相同的信息。我不知道,这是不对的。不知道为什么会这样。谢谢你的帮助PHP在Foreach内部卷曲,php,curl,foreach,Php,Curl,Foreach,编辑:实际情况是,每次都会创建一个新的xml,但它会将新的$html信息添加到上一个xml中,所以当它到达列表中要卷曲的最后一个元素时,它会保存所有以前卷曲中解析的信息。我想不出是怎么回事 无法按预期执行卷曲。在下面的代码中,我有一个foreach循环,它循环通过一个列表($textary),并将list元素传递给curl,还用于使用该元素作为文件名创建一个xml文件。然后curl返回$html,然后将其解析并保存为xml。脚本运行,列表被传递,url被创建并传递给curl函数。我得到一个显示正
Function FeedXml($textarray){
$doc=new DOMDocument('1.0', 'UTF-8');
$feed=$doc->createElement("feed");
Foreach ($textarray as $text){
$url="http://xxx/xxx/".$text;
echo "PATH TO CURL".$url."<br>";
$html=curlurl($url);
$xmlsave="http://xxxx/xxx/".$text;
$dom = new DOMDocument(); //NEW dom FOR EACH SHOW
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$dom->formatOutput = true;
$dom->preserveWhiteSpace = true;
//PARSE EACH RETURN INFORMATION
$images= $dom->getElementsByTagName('img');
foreach($images as $img){
$icon= $img ->getAttribute('src');
if( preg_match('/\.(jpg|jpeg|gif)(?:[\?\#].*)?$/i', $icon) ) {
// ITEM TAG
$item= $doc->createElement("item");
$sdAttribute = $doc->createAttribute("sdImage");
$sdAttribute->value = $icon;
$item->appendChild($sdAttribute);
} // IMAGAGE FOR EACH
$feed->appendChild($item);
$doc->appendChild($feed);
$doc->save($xmlsave);
}
}
}
Function curlurl($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_VERBOSE, 1);//0-FALSE 1 TRUE
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER ,FALSE);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_TIMEOUT,'10');
$html = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $httpcode;
return $html;
}
函数FeedXml($textarray){
$doc=新的DOMDocument('1.0','UTF-8');
$feed=$doc->createElement(“feed”);
Foreach($textarray作为$text){
$url=”http://xxx/xxx/“$文本;
回显“CURL的路径”。$url.
”;
$html=curlurl($url);
$xmlsave=”http://xxxx/xxx/“$文本;
$dom=new DOMDocument();//每次演出都要有新的dom
libxml\u使用\u内部错误(true);
$dom->loadHTML($html);
$xpath=newdomxpath($dom);
$dom->formatOutput=true;
$dom->preserveWhiteSpace=true;
//解析每个返回信息
$images=$dom->getElementsByTagName('img');
foreach($img形式的图像){
$icon=$img->getAttribute('src');
如果(preg|u match('/\.(jpg | jpeg | gif)(?:[\?\\\\\\\\\\\\].*))$/i',$icon)){
//项目标签
$item=$doc->createElement(“item”);
$sdAttribute=$doc->createAttribute(“sdImage”);
$sdAttribute->value=$icon;
$item->appendChild($sdAttribute);
}//每个
$feed->appendChild($item);
$doc->appendChild($feed);
$doc->save($xmlsave);
}
}
}
函数url($url){
$ch=curl\u init($url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_FRESH_CONNECT,true);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true);
curl_setopt($ch,CURLOPT_VERBOSE,1);//0-FALSE 1-TRUE
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_AUTOREFERER,true);
curl_setopt($ch,CURLOPT_TIMEOUT,'10');
$html=curl\u exec($ch);
$httpcode=curl\u getinfo($ch,CURLINFO\u HTTP\u代码);
卷曲关闭($ch);
echo$httpcode;
返回$html;
}
感谢您指出我在上述方面的缺点。我已经解决了这个问题。需要将以下内容移到Foreach中
$doc=new DOMDocument('1.0', 'UTF-8');
$feed=$doc->createElement("feed");
为什么是-1而并没有评论?我想你们会否决投票,至少要解释一下。当然,这个问题对每个人来说都不是很重要,但它确实有一定的正确性,因为它可能会指出其他人可能犯的错误。对于初学者,您应该正确缩进代码,以便它实际上是可读的。什么缩进不正确?实际上是所有内容。