Итак, я обрабатываю до 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) Удалите этот дескриптор и добавьте еще один URL из $allurls
, пока все ссылки не будут обработаны
4) Обработайте ручное время ожидания для любого URL, который занимал более определенного времени, скажем, 2 минуты (потому что CURLOPT_CONNECTTIMEOUT
& CURLOPT_TIMEOUT
не работают должным образом в среде curl_multi (или, по крайней мере, мой опыт и понимание основаны на http://curl.haxx.se/mail/curlphp-2008-06/0006.html)), но мне также нужно знать в моем $allurls
, истек ли этот URL-адрес ...
Я знаю, что это похоже на небольшую работу, но для тех, кто знает это, это не должно быть так много работы ... Я просто не знаю, как это сделать ... Спасибо.