|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 64644.6449 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
19.05.2014, 15:43
|
#1
|
Member
Регистрация: 09.01.2012
Сообщений: 83
Бабло: $17530
|
Траблы с Curl (Php)
Прабла следующая - в PHP запускается многопотоков (псевдомногопоточность). Скрипты с использованием Curl - скрипт просто Get запросом контент получает с доменов, потом ищет совпадения в контенте, если есть - пишет в первый файл, нет во второй. Так вот прабла в том что скрипты поработают некоторое время (2-4 часа) и самостоятельно отваливаются). Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
Кто нибудь сталкивался с подобным? Если сталкивались как решали праблу?
В остальных случаях псевдомногопоток более менее нормально работает. Но вот тут - процессы отваливаются просто через некоторое время и все тут.
Вот примерно как код выглядит
PHP код:
$ch = curl_init($url10[$i]);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent[$i]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
$res1[$i] = curl_exec($ch);
curl_close ($ch);
if (substr_count($res1[$i],"blablabla"))
{
...
}
else
{
}
...
|
|
|
19.05.2014, 16:10
|
#2
|
Senior Member
Регистрация: 29.04.2011
Сообщений: 379
Бабло: $111700
|
Цитата:
Сообщение от macdacdie
Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
|
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
попробуй увеличить таймаут
|
|
|
19.05.2014, 17:11
|
#3
|
я крут как root
Регистрация: 28.05.2012
Адрес: HTTPHEADER
Сообщений: 483
Бабло: $65470
|
попробуй это
PHP код:
set_time_limit(0);
|
|
|
19.05.2014, 17:40
|
#4
|
Senior Member
Регистрация: 27.03.2014
Сообщений: 546
Бабло: $66495
|
Цитата:
Сообщение от macdacdie
Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
Кто нибудь сталкивался с подобным? Если сталкивались как решали праблу?
|
Тут только полное логирование всех шагов и анализ, на каком этапе и по какой причине отваливается процесс. Но для начала попробуйте оба совета выше - это наиболее вероятная причина и должно помочь.
__________________
Vulcanpartner.com - ведущая гемблинг-партнерка с revshare до 60% от дохода казино!
|
|
|
19.05.2014, 19:35
|
#5
|
Senior Member
Регистрация: 23.07.2008
Адрес: Kiev
Сообщений: 398
Бабло: $81715
|
Очень вероятно что ты еще не очень силен в пыхе, надо видеть весь код чтоб определить утечку. А еще пхп сам по себе гавно, более разумно сделать костыль который каждые пол часа тормозит и запускает с нужного места.
и слово праблы это норм
|
|
|
19.05.2014, 20:58
|
#6
|
private.
Регистрация: 30.04.2008
Сообщений: 3,864
Бабло: $462680
|
Цитата:
Сообщение от oledj
А еще пхп сам по себе гавно, более разумно сделать костыль который каждые пол часа тормозит и запускает с нужного места.
|
Опять php гавно, он априори не может быть говном когда на его основе возникали такие проекты как fb, vk, и прочие
macdacdie, если ты хочешь использовать много-поточно парсинг, авторизацию, и прочее, то используй мультикурл - он как раз для этого и предназначен.
Попробуй так:
PHP код:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL ,$url10[$i]); curl_setopt($ch, CURLOPT_REFERER, $url10[$i]); curl_setopt($ch, CURLOPT_USERAGENT, $useragent[$i]); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); // если используются сайты с ссл curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// все ошибки будут записаны в файл error.log, поставить 0777 права $error = curl_error($ch) ? curl_error($ch) : null; if(!empty($error)) file_put_content(dirname(__FILE__).'/error.log', $error."\n", FILE_APPEND | LOCK_EX);
$res1[$i] = curl_exec($ch); curl_close ($ch);
Последний раз редактировалось Final Fantasy; 19.05.2014 в 21:12.
|
|
|
19.05.2014, 21:05
|
#7
|
Senior Member
Регистрация: 24.12.2008
Сообщений: 206
Бабло: $46033
|
На PHP процесы часто сами по себе выключатся. Лучше поставь скрипт на крон и сделай что-бы каждый раз ограниченое количество процесов запускалось.
|
|
|
19.05.2014, 21:15
|
#8
|
Senior Member
Регистрация: 23.07.2008
Адрес: Kiev
Сообщений: 398
Бабло: $81715
|
Цитата:
Сообщение от Final Fantasy
Опять php гавно, он априори не может быть говном когда на его основе возникали такие проекты как fb, vk, и прочие
macdacdie, если ты хочешь использовать много-поточно парсинг, авторизацию, и прочее, то используй мультикурл - он как раз для этого и предназначен.
Попробуй так:
PHP код:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL ,$url10[$i]);
curl_setopt($ch, CURLOPT_REFERER, $url10[$i]);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent[$i]);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
// если используются сайты с ссл
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// все ошибки будут записаны в файл error.log, поставить 0777 права
if(!empty(curl_error($ch)) file_put_contents(dirname(__FILE__).'/error.log', curl_error($ch)."\n", FILE_APPEND | LOCK_EX);
$res1[$i] = curl_exec($ch);
curl_close ($ch);
|
Я имел ввиду процесс длиной более полу часа, и то решаемо костылями. С отображением страничек у него всё ок, тем более в умелых руках.
|
|
|
20.05.2014, 19:54
|
#9
|
Member
Регистрация: 09.01.2012
Сообщений: 83
Бабло: $17530
ТС -->
|
ТС
Давненько не кодил на Пыхе. В общем все решилось. Заменил в php.ini max_execution_time=0 (было 30) и memory-limit=1024M (было 128M). Пашет щас стабильно - больше 48 часов (отваливается за все время 10-20% потоков где-то). Остальные до конца пашут. Для моих задач самое то.
to oledj По multi курлу - было дело когда плотно занимался многопоточностью на PHP юзал его - он тока для простых задач - если что посложнее --> там идут куки, преобразование кук, массовые GET, POST запросы, еще различные вариации кода - с его помощью все это решить очень проблематично...
|
|
|
|