PHP CURL_Multi检查已完成句柄的状态,删除,添加,超时

时间:2011-08-09 00:54:34

标签: php multithreading curl-multi

所以我正在处理大约3000个链接,我使用curl_multi来加速这个过程。我一次使用20个简单的过程,等待所有20个完成,处理20多种类型的方法,但我知道这是低效的,特别是如果这20个链接中的一个需要永远下载。因此,当我从该URL获取内容时,我需要知道如何通过添加/删除句柄来编写遍历所有3000个链接的循环。

我正在使用其中一些基本原则:

define('RUNATONCE', 20); // Links to process at a time

// My URL holding multi-dimensional array:
// This first dimension is about 1000 and the second dimension is 3
$allurls[0][0];

我需要能够:

1)检查句柄何时完成,并知道我的多维数组中哪个url处理所属的

2)检索该句柄的内容,并根据该句柄的内容是$allurls[0][0],$allurls[0][1]的一部分还是$allurls[0][2](每个句柄的不同过程)分配一个过程

3)删除该句柄并添加$allurls中的其他网址,直到所有链接都已处理

4)对花费超过一定时间的任何网址(例如2分钟)处理手动超时(因为CURLOPT_CONNECTTIMEOUT& CURLOPT_TIMEOUT在curl_multi环境中无法正常工作(或者至少这是我基于http://curl.haxx.se/mail/curlphp-2008-06/0006.html的经验和理解)),但我还需要知道$allurls该网址是否超时......

我知道这似乎有点工作,但对于那些知道这一点的人来说,它应该不是那么多工作......我只是不知道如何去做的具体细节......谢谢。

2 个答案:

答案 0 :(得分:-1)

我有类似的情况,我需要验证某些URL,我发现的两个解决方案是首先使用pcntl如果安装了PHP分叉一个新进程或(这很难看,但不幸的是,我决定因为服务器上没有安装pcntl)使用AJAX来请求验证URL的PHP​​页面。我将超时设置为30秒,所以即使某些事情需要很长时间,也没关系。

答案 1 :(得分:-3)

所以我想出了这件事。如果您需要帮助评论此答案,我会尝试发布一些相关代码。这里发布的代码太多了