2011-12-08 85 views
2

下面是我使用的代码。卷曲只读最后一个元素的阵列

它从textarea中读取链接,然后获取源代码并最终过滤meta标签。但是它只显示数组中的最后一个元素。

因此,如果例如我把3个网站放入textarea,它只会读取最后一个,其他的只显示为空白。

花了数小时试试这个,请帮忙。

function file_get_contents_curl($url) 
{ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

if(isset($_POST['url'])){ 
    $url = $_POST['url']; 
    $url = explode("\n",$url); 
    print_r($url); 
    for($counter = 0; $counter < count($url); $counter++){ 
     $html = file_get_contents_curl($url[$counter]); // PASSING LAST VALUE OF ARRAY 
     $doc = new DOMDocument(); 
     @$doc->loadHTML($html); 
     $nodes = $doc->getElementsByTagName('title'); 
     $title = $nodes->item(0)->nodeValue; 
     $metas = $doc->getElementsByTagName('meta'); 
     for ($i = 0; $i < $metas->length; $i++){ 
      $meta = $metas->item($i); 
      if($meta->getAttribute('name') == 'description') 
       $description = $meta->getAttribute('content'); 
      if($meta->getAttribute('name') == 'keywords') 
       $keywords = $meta->getAttribute('content'); 
     } 
     print 
     (' 
     <fieldset> 
      <table> 
       <legend><b>URL: </b>'.$url[$counter].'</legend> 
       <tr> 
        <td><b>Title:</b></td><td>'.$title.'</td> 
       </tr> 
       <tr> 
        <td><b>Description:</b></td><td>'.$description.'</td> 
       </tr> 
       <tr> 
        <td><b>Keywords:</b></td><td>'.$keywords.'</td> 
       </tr> 
      </table> 
     </fieldset><br /> 
     '); 
    } 
}        
+0

'print_r($ url)的输出是什么;'? – Prisoner

+0

Array([0] => http://www.site1.com [1] => http://www.site2.com [2] => http://www.site3.com) – Cristian

+0

简化您的循环 - 根据你的信息工作 - > http://codepad.org/jkZHnfAo – ManseUK

回答

4

这是一个恼人的小虫子找到 - 但这里是(可笑的简单)解决方案:

您的网址越来越空白加入其中,为所有,但因此最后浏览的网址,你会需要修剪它,你可以做到以下几点:

curl_setopt($ch, CURLOPT_URL, trim($url)); 

如果有的话,你可能会可能只用file_get_contents()(仍然需要你修剪URL)。

的第二个问题是,如果没有meta数据则使用旧变量(从以前的循环),所以只是你的主循环结束前,后您print()添加以下内容:

unset($title,$description,$keywords); 
+1

你天才!天才!!!! – Cristian

+0

只是不能相信这个简单的解决方案可能是一个头痛的问题!太棒了! – Ahsan

相关问题