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


PHP CURL_Multi checking status of finished handles, removing, adding, timeouts

所以我正在处理多达3000个链接,我使用curl_multi来加速这个过程。我使用了一次处理20个的简单方法,等待所有20个完成,再处理20个以上的方法,但我知道这是低效的,特别是如果这20个链接中的一个需要永远下载。所以我需要知道如何编写一个循环,通过添加/删除句柄,通过所有3000个链接,只要我从该url的内容。

我正在使用这些基本原则:

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添加另一个URL,直到所有链接都已处理

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

我知道这似乎有点工作,但对于知道这一点的人来说,它不应该是那么多工作…我只是真的不知道该怎么做的细节……谢谢。

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