Php 仅读取数组最后一个元素的循环旋度
下面是我正在使用的代码 它从文本区域读取链接,然后获取源代码,最后过滤元标记。但是,它只显示数组中的最后一个元素 例如,如果我把3个网站放进文本区,它只会读最后一个,其他的则显示为空白 我已经花了好几个小时试过了,请帮忙Php 仅读取数组最后一个元素的循环旋度,php,curl,Php,Curl,下面是我正在使用的代码 它从文本区域读取链接,然后获取源代码,最后过滤元标记。但是,它只显示数组中的最后一个元素 例如,如果我把3个网站放进文本区,它只会读最后一个,其他的则显示为空白 我已经花了好几个小时试过了,请帮忙 function file_get_contents_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURN
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 />
');
}
}
函数文件\u get\u contents\u curl($url)
{
$ch=curl_init();
curl_setopt($ch,CURLOPT_头,0);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_URL,$URL);
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
$data=curl\u exec($ch);
卷曲关闭($ch);
返回$data;
}
如果(isset($_POST['url'])){
$url=$_POST['url'];
$url=分解(“\n”,$url);
打印(url);
对于($counter=0;$counterloadHTML($html);
$nodes=$doc->getElementsByTagName('title');
$title=$nodes->item(0)->nodeValue;
$metas=$doc->getElementsByTagName('meta');
对于($i=0;$i<$metas->length;$i++){
$meta=$metas->item($i);
如果($meta->getAttribute('name')=='description')
$description=$meta->getAttribute('content');
如果($meta->getAttribute('name')=='keywords')
$keywords=$meta->getAttribute('content');
}
打印
('
URL:“.$URL[$counter]”
标题:'.$Title'
说明:'.$Description'
关键词:'.$Keywords'
');
}
}
这是一个令人恼火的小错误,但这里有一个(非常简单的)解决方案:
您的URL将添加空白,但最后一个URL除外,因此您需要对其进行修剪,您可以执行以下操作:
curl_setopt($ch, CURLOPT_URL, trim($url));
unset($title,$description,$keywords);
如果可用,您可能只使用了文件\u get\u contents()
(仍然需要修剪URL)
第二个问题是,如果没有meta
数据,则使用旧变量(来自上一个循环),因此在主循环结束之前,在print()
之后添加以下内容:
curl_setopt($ch, CURLOPT_URL, trim($url));
unset($title,$description,$keywords);
print\r($url)的输出是什么代码>?数组([0]=>[1]=>[2]=>)简化了你的循环-根据你的信息为我工作->循环是动态的,我说site1 site2 site3作为一个例子,数组如果很好,curl只是执行数组的最后一个元素,真不敢相信这个简单的解决方案会是那么令人头痛!好极了