3

所以我正在处理多达 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) 删除该句柄并添加另一个 URL,$allurls直到处理完所有链接

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

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

4

1 回答 1

-1

我遇到过类似的情况,我需要验证某些 URL,我发现的两个解决方案是首先使用pcntl使 PHP fork 一个新进程,如果它已安装或(这很丑陋,但不幸的是我解决了因为 pcntl 不是' t 安装在服务器上)使用 AJAX 请求验证 URL 的 PHP 页面。我将超时设置为 30 秒,所以即使某些事情需要很长时间,也没关系。

于 2011-08-09T01:31:45.343 回答