Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
В общем тестил на 2-х машинах на пхп версии 5.2. После перехода на 5.3 всё заработало.Была ли попытка связать эту библиотеку с работой с ftp? Я Попытался, но переодически библиотека убивает апач- один и тотже скрипт то вылетает, то выполняется без помех.
/**
* Получение содержимого из списка урлов в массив
* @return array $results
*/
public function getUrls() {
if(!sizeof($this->_urls)) {
return self::E_EMPTY_URLS_LIST;
}
$results = array();
while(true) {
// Создание потоков
while ($this->_threadsRunning < $this->_threadsCount && sizeof($this->_urls)) { //
$url_end = end($this->_urls);
$url_end_key = key($this->_urls);
#echo "ADD: {$url_end}\n" ; flush();
$this->_createThread();
end($this->_curlHandles);
$this->_threadId_connect[key($this->_curlHandles)] = $url_end_key;
$this->_threadsRunning++;
}
// Проверка на выполненность
if ($this->_threadsRunning == 0 && !sizeof($this->_urls) ) {
break;
}
// Let mcurl do it's thing
curl_multi_select($this->_curlMultiHandle);
while(($mcRes = curl_multi_exec($this->_curlMultiHandle, $mcActive)) == CURLM_CALL_MULTI_PERFORM) {
usleep($this->_usleepTime);
}
if($mcRes != CURLM_OK) {
break;
}
while($threadInfo = curl_multi_info_read($this->_curlMultiHandle)) {
$threadResult = array('errors' => false, 'url' => false, 'contents' => false);
$threadId = (string) $threadInfo['handle'];
$threadResult['url'] = curl_getinfo($this->_curlHandles[$threadId], CURLINFO_EFFECTIVE_URL);
#echo "LOADING: {$threadResult['url']}\n" ; flush();
$threadResult['threadId'] = $this->_threadId_connect[$threadId];
$threadResult['errors'] = curl_error($this->_curlHandles[$threadId]);
$threadResult['contents'] = curl_multi_getcontent($this->_curlHandles[$threadId]);
$threadResult['curlinfo'] = $this->_curlObjects[$threadId]->getOptions();
$results[$threadId] = $threadResult;
call_user_func( $this->_postProccesingFunc, $threadResult);
$this->_killThread($threadId);
$this->_threadsRunning--;
}
}
return $results;
}
public $_threadId_connect = array();
// установка callback функции
public function setProcessing($post) {
$this->_postProccesingFunc = $post;
}
for($i=0; $i<20; $i++) {
$urls['url'][]= 'http://proekt/pi_multicurl/samples/chek.php?x=index()_'.$i;
}
$results = array();
try {
$cURL =new Pi_MultiCurl_extOptions ( );
} catch (Pi_MultiCurl_Exception $e) {
echo $e->getMessage();
exit();
}
define('URL_STACK_SIZE', 5 );
$cURL->setThreadsCount(URL_STACK_SIZE);
$cURL->setThreadTimeout(30);
$cURL->setUsleepTime(600);
// функция обработки полученных данных
function rollingPost($thread) {
echo "Это {$thread['threadId']}-й элемент \$urls['url']CONTENT: ".$thread['contents'];
flush();
}
$cURL->setProcessing( "rollingPost");
$cURL->setUrls($urls['url']);
$cURL->getUrls();
// an array of URL's to fetch
$urls = array("http://www.google.com",
"http://www.facebook.com",
"http://www.yahoo.com");
// a function that will process the returned responses
function request_callback($response, $info, $request) {
// parse the page title out of the returned HTML
if (preg_match("~<title>(.*?)</title>~i", $response, $out)) {
$title = $out[1];
}
echo "<b>$title</b><br />";
print_r($info);
echo "<hr>";
}
// create a new RollingCurl object and pass it the name of your custom callback function
$rc = new RollingCurl("request_callback");
// the window size determines how many simultaneous requests to allow.
$rc->window_size = 20;
foreach ($urls as $url) {
// add each request to the RollingCurl object
$request = new RollingCurlRequest($url);
$rc->add($request);
}
$rc->execute();
Хз, развивается ли, думаю только для своих проектах, т.к. много в нём нет, но и сейчас данный класс неплохо написан. Я всё хочу довести до ума свай класс и выложить, или хотя бы переделанный pi_curl, но всё руки не доходят да и постоянно баги новые появляются.Jeurey По поводу Pi_MultiCurl класс еще развивается?
Где можно скачать данный класс а то ни сайт, ни файлов НЕТ.