Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB58.6370
BTC/USD0.0000
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 19.05.2014, 15:43   #1
macdacdie
Member
 
Регистрация: 09.01.2012
Сообщений: 58
Бабло: $14280
По умолчанию Траблы с Curl (Php)

Прабла следующая - в PHP запускается многопотоков (псевдомногопоточность). Скрипты с использованием Curl - скрипт просто Get запросом контент получает с доменов, потом ищет совпадения в контенте, если есть - пишет в первый файл, нет во второй. Так вот прабла в том что скрипты поработают некоторое время (2-4 часа) и самостоятельно отваливаются). Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
Кто нибудь сталкивался с подобным? Если сталкивались как решали праблу?
В остальных случаях псевдомногопоток более менее нормально работает. Но вот тут - процессы отваливаются просто через некоторое время и все тут.

Вот примерно как код выглядит
PHP код:
$ch curl_init($url10[$i]);
curl_setopt($chCURLOPT_USERAGENT$useragent[$i]);
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
curl_setopt($chCURLOPT_TIMEOUT10);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_HEADER1);
$res1[$i] = curl_exec($ch);
curl_close ($ch);

if (
substr_count($res1[$i],"blablabla"))
{
...
}
else
{
}
... 
macdacdie вне форума  
Старый 19.05.2014, 16:10   #2
krob
Senior Member
 
Аватар для krob
 
Регистрация: 29.04.2011
Сообщений: 378
Бабло: $111340
По умолчанию

Цитата:
Сообщение от macdacdie Посмотреть сообщение
Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
попробуй увеличить таймаут
krob вне форума  
Старый 19.05.2014, 17:11   #3
SoftMaster
я крут як root
 
Аватар для SoftMaster
 
Регистрация: 28.05.2012
Адрес: HTTPHEADER
Сообщений: 333
Бабло: $49360
По умолчанию

попробуй это
PHP код:
set_time_limit(0); 
SoftMaster вне форума  
Старый 19.05.2014, 17:40   #4
VulkanPartner
Конвертим гемблинг траф
 
Аватар для VulkanPartner
 
Регистрация: 27.03.2014
Сообщений: 529
Бабло: $60535
Отправить сообщение для VulkanPartner с помощью ICQ Отправить сообщение для VulkanPartner с помощью Skype™
По умолчанию

Цитата:
Сообщение от macdacdie Посмотреть сообщение
Вероятно страница слишком большая попдается или что-то еще что скрипт переварить не может.
Кто нибудь сталкивался с подобным? Если сталкивались как решали праблу?
Тут только полное логирование всех шагов и анализ, на каком этапе и по какой причине отваливается процесс. Но для начала попробуйте оба совета выше - это наиболее вероятная причина и должно помочь.
__________________
VulkanPartner.com - ведущая гемблинг-партнерка с revshare до 50% от каждого депозита!
VulkanPartner вне форума  
Старый 19.05.2014, 19:35   #5
oledj
Senior Member
 
Аватар для oledj
 
Регистрация: 23.07.2008
Адрес: Kiev
Сообщений: 395
Бабло: $76145
Отправить сообщение для oledj с помощью ICQ
По умолчанию

Очень вероятно что ты еще не очень силен в пыхе, надо видеть весь код чтоб определить утечку. А еще пхп сам по себе гавно, более разумно сделать костыль который каждые пол часа тормозит и запускает с нужного места.

и слово праблы это норм
oledj вне форума  
Старый 19.05.2014, 20:58   #6
Final Fantasy
private.
 
Аватар для Final Fantasy
 
Регистрация: 30.04.2008
Сообщений: 3,495
Бабло: $406660
По умолчанию

Цитата:
Сообщение от oledj Посмотреть сообщение
А еще пхп сам по себе гавно, более разумно сделать костыль который каждые пол часа тормозит и запускает с нужного места.
Опять php гавно, он априори не может быть говном когда на его основе возникали такие проекты как fb, vk, и прочие

macdacdie, если ты хочешь использовать много-поточно парсинг, авторизацию, и прочее, то используй мультикурл - он как раз для этого и предназначен.

Попробуй так:
PHP код:
$ch curl_init(); 
curl_setopt($chCURLOPT_URL ,$url10[$i]);
curl_setopt($chCURLOPT_REFERER$url10[$i]);
curl_setopt($chCURLOPT_USERAGENT$useragent[$i]); 
curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
curl_setopt($chCURLOPT_TIMEOUT10); 
curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
curl_setopt($chCURLOPT_RETURNTRANSFER1); 
curl_setopt($chCURLOPT_HEADER1);
// если используются сайты с ссл
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);

// все ошибки будут записаны в файл 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.
Final Fantasy вне форума  
Старый 19.05.2014, 21:05   #7
CTAKAH
Senior Member
 
Регистрация: 24.12.2008
Сообщений: 198
Бабло: $42778
По умолчанию

На PHP процесы часто сами по себе выключатся. Лучше поставь скрипт на крон и сделай что-бы каждый раз ограниченое количество процесов запускалось.
CTAKAH вне форума  
Старый 19.05.2014, 21:15   #8
oledj
Senior Member
 
Аватар для oledj
 
Регистрация: 23.07.2008
Адрес: Kiev
Сообщений: 395
Бабло: $76145
Отправить сообщение для oledj с помощью ICQ
По умолчанию

Цитата:
Сообщение от Final Fantasy Посмотреть сообщение
Опять php гавно, он априори не может быть говном когда на его основе возникали такие проекты как fb, vk, и прочие

macdacdie, если ты хочешь использовать много-поточно парсинг, авторизацию, и прочее, то используй мультикурл - он как раз для этого и предназначен.

Попробуй так:
PHP код:
$ch curl_init(); 
curl_setopt($chCURLOPT_URL ,$url10[$i]);
curl_setopt($chCURLOPT_REFERER$url10[$i]);
curl_setopt($chCURLOPT_USERAGENT$useragent[$i]); 
curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
curl_setopt($chCURLOPT_TIMEOUT10); 
curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
curl_setopt($chCURLOPT_RETURNTRANSFER1); 
curl_setopt($chCURLOPT_HEADER1);
// если используются сайты с ссл
curl_setopt($chCURLOPT_SSL_VERIFYHOSTfalse);
curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);

// все ошибки будут записаны в файл 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); 
Я имел ввиду процесс длиной более полу часа, и то решаемо костылями. С отображением страничек у него всё ок, тем более в умелых руках.
oledj вне форума  
Старый 20.05.2014, 19:54   #9
macdacdie
Member
 
Регистрация: 09.01.2012
Сообщений: 58
Бабло: $14280
ТС -->
автор темы ТС По умолчанию

Давненько не кодил на Пыхе. В общем все решилось. Заменил в php.ini max_execution_time=0 (было 30) и memory-limit=1024M (было 128M). Пашет щас стабильно - больше 48 часов (отваливается за все время 10-20% потоков где-то). Остальные до конца пашут. Для моих задач самое то.
to oledj По multi курлу - было дело когда плотно занимался многопоточностью на PHP юзал его - он тока для простых задач - если что посложнее --> там идут куки, преобразование кук, массовые GET, POST запросы, еще различные вариации кода - с его помощью все это решить очень проблематично...
macdacdie вне форума