Php 我们可以在curl函数中输入数组并跟踪每个元素的结果吗?
我的问题很简单,但对我来说,它在我的脑海中制造了很多困惑。我想知道我们可以把数组输入到旋度函数中吗?Php 我们可以在curl函数中输入数组并跟踪每个元素的结果吗?,php,arrays,parsing,function,curl,Php,Arrays,Parsing,Function,Curl,我的问题很简单,但对我来说,它在我的脑海中制造了很多困惑。我想知道我们可以把数组输入到旋度函数中吗? 请注意“我没有发布数据”(我知道发布数据时使用了数组) 为了让我的问题更清楚,让我告诉你代码 function mycurl($url){ $ch = curl_init(); // create a new cURL resource // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL,$url); cur
请注意“我没有发布数据”(我知道发布数据时使用了数组) 为了让我的问题更清楚,让我告诉你代码
function mycurl($url){
$ch = curl_init(); // create a new cURL resource
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$data = curl_exec($ch); // grab URL and pass it to the browser
//echo $data; //ncomment for debugging
curl_close($ch);
return $data;
}
我要使用的数组是
myArray
0 => string 'http://www.abc.com/a
1 => string 'http://www.abc.com/b
2 => string 'http://www.abc.com/c
3 => string 'http://www.abc.com/d
为了使用数组,我使用了foreach
循环。下面给出了代码
foreach ($myArray as $temp){
$heading= mycurl($temp);
echo $heading;
}
守则的目的是
我怎样才能达到我的目标?如果
foreach
循环在这里不是正确的方法,那么我应该怎么做?你做得对。然而,您可以使用(参见示例)一次启动所有请求,经典的curl一次只能执行一个请求
执行代码更有效的方法是:
$ch = curl_init(); // create a new cURL resource
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
foreach( $myArray as $url){
curl_setopt($ch, CURLOPT_URL,$url);
$data = curl_exec( $ch);
echo $data;
}
curl_close( $ch);
或使用正确的对象设计:
class MyClass {
protected $ch = null;
public function __construct( ){
$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_HEADER, 0);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, TRUE);
}
public function __destruct(){
curl_close( $this->ch);
}
public function getData( $url){
curl_setopt($this->ch, CURLOPT_URL,$url);
return curl_exec( $this->ch);
}
}
$extractor = new MyClass();
foreach( $myArray as $url){
$data = $extractor->getData( $url);
echo $data;
}
您所做的看起来不错,只是不应该为每个迭代初始化curl处理程序,只需初始化一次,然后为每个迭代更改$url值,如下所示:
function mycurl($ch, $url) {
curl_setopt($ch, CURLOPT_URL,$url);
return curl_exec($ch);
}
$ch = curl_init(); // create a new cURL resource
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
foreach ($urls as $url) {
$header = mycurl($ch, $url);
var_dump($header);
}
curl_close($ch);
谢谢亲爱的,谢谢你的回答,我读了这个例子,我理解的是,如果我必须同时运行多个实例,我应该使用curl multi-exec,但我想运行一个实例(数组的一个元素),做一些废弃工作,然后运行下一个实例,所以代码保持不变?thaks回答,我已经这样做了,但是它花费了太多的时间,并且随机显示了一个错误“30秒超时错误”,我知道数组中有很多元素的原因,所以花时间,有没有办法提高性能和速度?在抛出错误之前,它到达了数组堆栈的多远?尝试将
CURLOPT_CONNECTTIMEOUT
设置为0,看看这是否有帮助。我在php配置中将超时时间更改为90秒。它几乎成功了。如果我的网络连接正常,它就可以工作,如果连接现在很慢,它会随机出现错误,设置连接超时选项完全可以解决这个问题。啊,太酷了。是的,我们必须为一个项目将其设置为0,在这个项目中,我们将保持登录数小时以获取大量数据集。