PHP curl Inside Foreach

时间:2015-03-22 13:19:57

标签: php curl foreach

编辑:真正发生的事情是每次都会创建一个新的xml,但它会将新的$ html信息添加到上一个,所以当它到达列表中的最后一个元素时,它会被保存解析以前所有卷发的信息。无法弄清楚出了什么问题。

卷曲没有按预期执行有问题。在下面的代码中,我有一个foreach循环,它循环通过一个列表($ textarray)并将list元素传递给curl,还用于使用元素作为文件名创建一个xml文件。然后curl返回$ html,然后解析并保存到xml。脚本运行,传递列表,创建URL并传递给curl函数。我得到一个显示正确url的echo,返回,然后解析每个返回并保存到相应的文件中。问题似乎是卷曲实际上并没有卷曲新的$ url。我得到了每个xml文件中保存的完全相同的信息。我这不是不对的。不知道为什么会这样。任何帮助表示赞赏。

     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;
     }

1 个答案:

答案 0 :(得分:0)

感谢您指出我在上面的缺点。我已经找到了问题所在。需要将以下内容移入Foreach。

     $doc=new DOMDocument('1.0', 'UTF-8'); 
     $feed=$doc->createElement("feed");