Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 旋涡连接超时不工作_Php_Curl_Timeout - Fatal编程技术网

Php 旋涡连接超时不工作

Php 旋涡连接超时不工作,php,curl,timeout,Php,Curl,Timeout,我使用CURL连接到多个xml提要,并在页面加载时处理它们。不幸的是,每隔一段时间,一个页面就会失去响应,我的脚本也会暂停。下面是我正在使用的代码示例。我将超时设置为1,但这似乎不起作用。然后,我将超时设置为0.0001,只是为了测试今天的情况,它仍然拉入xml提要。你们有没有什么想法,当一个脚本需要花费很长时间时,如何强制curl超时 foreach($urls as $k => $v) { $curl[$k] = curl_init(); curl_setopt($c

我使用CURL连接到多个xml提要,并在页面加载时处理它们。不幸的是,每隔一段时间,一个页面就会失去响应,我的脚本也会暂停。下面是我正在使用的代码示例。我将超时设置为1,但这似乎不起作用。然后,我将超时设置为0.0001,只是为了测试今天的情况,它仍然拉入xml提要。你们有没有什么想法,当一个脚本需要花费很长时间时,如何强制curl超时

foreach($urls as $k => $v) {
   $curl[$k] = curl_init();   
   curl_setopt($curl[$k], CURLOPT_URL, $v);
   curl_setopt($curl[$k], CURLOPT_RETURNTRANSFER, true);
   curl_setopt($curl[$k], CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($curl[$k],CURLOPT_CONNECTTIMEOUT, 1); 

查看CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT之间的区别使用curl时有两种不同的超时--请参阅:

CURLOPT\u CONNECTTIMEOUT

号码 尝试执行时等待的秒数 连接使用0无限期等待

以及:

CURLOPT\u超时

最大值 允许cURL函数运行的秒数 执行

它们都有一个“毫秒”版本:
CURLOPT\u CONNECTTIMEOUT\u MS
CURLOPT\u TIMEOUT\u MS



在您的情况下,您可能还需要配置第二个:似乎需要时间的不是连接,而是服务器端提要的构造。

我正在使用Curl库从Apache服务器下载文件。 downloadFileWithCurlLibrary函数有两个输入。 FileUrl是将从表单服务器下载的文件。 示例:www.abc.com/myfile.doc。 locFile是要保存的目录和文件名。 示例:/home/projectx/myfile.doc

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <curl/curl.h>

int downloadFileWithCurlLibrary(char *FileUrl,char *locFile)
{
    char dlFile[1024];
    CURL *curl_handle;
    FILE *pagefile;


    memset(dlFile,0x0,sizeof(dlFile));
    /* Create URL */

    sprintf(dlFile,"%s",FileUrl);

    curl_global_init(CURL_GLOBAL_ALL);

    /* init the curl session */
    curl_handle = curl_easy_init();

    /* Set timeout 3 min = 3*60 sec here. */
    curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, 1800 );

    /* set URL to get here */
    if (curl_easy_setopt(curl_handle, CURLOPT_URL, dlFile) != CURLE_OK)
        return -1;

    /* Switch on full protocol/debug output while testing */
    //  if (curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L) != CURLE_OK)
    //    return -1;

    /* disable progress meter, set to 0L to enable and disable debug output */
    if (curl_easy_setopt(curl_handle, CURLOPT_NOPROGRESS, 1L) != CURLE_OK)
        return -1;

    /* send all data to this function  */
    if (curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data) != CURLE_OK)
        return -1;

    /* open the file */
    pagefile = fopen(locFile, "wb");
    if (pagefile)
    {

        /* write the page body to this file handle. CURLOPT_FILE is also known as
           CURLOPT_WRITEDATA*/
        if (curl_easy_setopt(curl_handle, CURLOPT_FILE, pagefile) != CURLE_OK)
            return -1;

        /* get it! */
        if (curl_easy_perform(curl_handle) != 0)
            return -1;

        /* close the header file */
        fclose(pagefile);
    }
    else
    {
        return -1;
    }

    /* cleanup curl stuff */
    curl_easy_cleanup(curl_handle);

    return 0;
}
#包括
#包括
#包括
#包括
#包括
int downloadFileWithCurlLibrary(char*FileUrl,char*locFile)
{
char-dlFile[1024];
卷曲*卷曲柄;
文件*页面文件;
memset(dlFile,0x0,sizeof(dlFile));
/*创建URL*/
sprintf(dlFile,“%s”,FileUrl);
curl\u global\u init(curl\u global\u ALL);
/*初始化curl会话*/
curl_handle=curl_easy_init();
/*在此设置超时3分钟=3*60秒*/
curl_easy_setopt(curl_句柄,CURLOPT_超时,1800);
/*设置URL以到达此处*/
if(curl\u easy\u setopt(curl\u句柄、CURLOPT\u URL、dlFile)!=CURLE\u确定)
返回-1;
/*测试时打开完整协议/调试输出*/
//if(curl\u easy\u setopt(curl\u handle,CURLOPT\u VERBOSE,1L)!=CURLE\u OK)
//返回-1;
/*禁用进度计,设置为0L以启用和禁用调试输出*/
如果(卷曲轻松设置(卷曲手柄,卷曲前进,1L)!=卷曲正常)
返回-1;
/*将所有数据发送到此函数*/
if(curl\u easy\u setopt(curl\u句柄、CURLOPT\u WRITEFUNCTION、write\u数据)!=CURLE\u OK)
返回-1;
/*打开文件*/
pagefile=fopen(locFile,“wb”);
如果(页面文件)
{
/*将页面正文写入此文件句柄。CURLOPT_文件也称为
CURLOPT_WRITEDATA*/
if(curl\u easy\u setopt(curl\u句柄、CURLOPT\u文件、页面文件)!=CURLE\u确定)
返回-1;
/*明白了*/
如果(卷曲轻松执行(卷曲手柄)!=0)
返回-1;
/*关闭头文件*/
fclose(页面文件);
}
其他的
{
返回-1;
}
/*清理卷曲的东西*/
卷曲易于清理(卷曲手柄);
返回0;
}

非常感谢,这非常有帮助。我试图测试它是否有效,为此,我将超时设置为1,如下面的代码所示。我正在解析包含50-100个元素的XML,所以我可以想象这将需要超过一毫秒的时间。我本以为不会有结果,但结果一切正常。curl_setopt($curl[$k],CURLOPT_TIMEOUT_MS,1);我错过什么了吗?非常感谢Pascal Russreally提供了一个很好的例子,如果您详细解释了这一点,并实际演示了回调函数,PascalYou可能会收到最多的选票。这个函数返回-1.1800s=30分钟,但这个答案没有给出任何有用的信息。当然,这些是不同的选择,当然我们必须看到不同:)