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;
    }
守则的目的是

  • 使用curl函数转到数组的每个url
  • 需要提取 url中的数据处理数组的下一个元素并提取 数据等等

    有人能告诉我如何在curl函数中使用数组元素吗?
    我怎样才能达到我的目标?如果
    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,在这个项目中,我们将保持登录数小时以获取大量数据集。