PHP cURL没有考虑时间

时间:2014-11-17 06:36:05

标签: php curl

我有一个简单的PHP脚本,它使用cURL来获取URL的内容:

$curlOptions = [
    CURLOPT_URL => $url,
    CURLOPT_CUSTOMREQUEST => 'GET',
    CURLOPT_HEADER => TRUE,
    CURLOPT_FOLLOWLOCATION => TRUE,
    CURLOPT_MAXREDIRS => 5,
    CURLOPT_CONNECTTIMEOUT => 3,
    CURLOPT_TIMEOUT => 5,
    CURLOPT_NOBODY => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE,
];

$curl = curl_init();
curl_setopt_array( $curl, $curlOptions );
$curlResult = curl_exec( $curl );
$status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
curl_close( $curl );

然而,在某些情况下,我清楚地看到持续时间为20秒或更长时间,尽管我指定CURLOPT_CONNECTTIMEOUTCURLOPT_TIMEOUT的较低超时值。

如何以我指定的值使cURL超时?

更新

需要20秒才能完成的所有cURL返回"状态"它可能是一个无法解析主机的DNS问题。我会假设CURLOPT_CONNECTTIMEOUT会照顾这个吗?

1 个答案:

答案 0 :(得分:0)

您的代码似乎完美无缺。 我创建了一个简单的睡眠页面,您可以检查它(将睡眠时间作为输入)。

如果您发现代码没有超时的情况,我建议检查状态代码,并查看代码是否挂在其他部分(可能不是卷曲本身)。

<?php

     $url = "http://funnify.me/sleep.php?sleep=12"; // time in seconds

     $curlOptions = [
         CURLOPT_URL => $url,
         CURLOPT_CUSTOMREQUEST => 'GET',
         CURLOPT_HEADER => TRUE,
         CURLOPT_FOLLOWLOCATION => TRUE,
         CURLOPT_MAXREDIRS => 5,
         CURLOPT_CONNECTTIMEOUT => 8,
         CURLOPT_TIMEOUT => 8,
         CURLOPT_NOBODY => TRUE,
         CURLOPT_RETURNTRANSFER => TRUE,
     ];


     $curl = curl_init();
     curl_setopt_array( $curl, $curlOptions );
     $curlResult = curl_exec( $curl );
     $status = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
     curl_close( $curl );

     echo $status;
?>

干杯, IKA