所以我正在处理大约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
该网址是否超时......
我知道这似乎有点工作,但对于那些知道这一点的人来说,它应该不是那么多工作......我只是不知道如何去做的具体细节......谢谢。
答案 0 :(得分:-1)
我有类似的情况,我需要验证某些URL,我发现的两个解决方案是首先使用pcntl如果安装了PHP分叉一个新进程或(这很难看,但不幸的是,我决定因为服务器上没有安装pcntl)使用AJAX来请求验证URL的PHP页面。我将超时设置为30秒,所以即使某些事情需要很长时间,也没关系。
答案 1 :(得分:-3)
所以我想出了这件事。如果您需要帮助评论此答案,我会尝试发布一些相关代码。这里发布的代码太多了