PHP的cURL对象有一个自动停止脚本的超时选项吗?

时间:2014-09-17 15:30:39

标签: php curl timeout

我有一个通过玉米作业运行的小PHP脚本。 此脚本从数据库中读取记录,然后使用PHP的SimpleXMLElement对象创建.xml字符串。最后,我对API进行了cURL调用,然后将文件传输过来。

我遇到的问题是,如果数据库查询通常有更多的记录,那么脚本似乎不会通过所有记录运行。似乎cURL执行break;将阻止foreach循环通过所有记录。

代码是这样的

$results = array(........);
foreach($result AS $r){
$xml = new SimpleXMLElement();
 $UpFile =  $xml->addChild('UpFile');
...
...
...
        $ch = curl_init($url);
        curl_setopt_array($ch, $options);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('xml' => $xml->asXML())  );
        $result = curl_exec($ch);
        $result_xml = simplexml_load_string( $result);

        if (!$result){
            echo curl_error($ch) . '<br />';
            return false;
        }

        curl_close($ch);
}

我想知道cURL对象是否有限制会自动打破foreach循环?如果没有任何线索可能导致这个问题?

谢谢

1 个答案:

答案 0 :(得分:1)

首先,当你没有得到$ result时,不要回复。

其次,您可以像这样增加超时

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); 
curl_setopt($ch, CURLOPT_TIMEOUT, 400); //timeout in seconds - the default is 30, I believe

而且,在脚本的顶部

set_time_limit(0);