Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запуск скрипта без ожидания от него данных.
Форумы портала PHP.SU » » Вопросы новичков » Запуск скрипта без ожидания от него данных.

Страниц (1): [1]
 

1. DeMonyan - 08 Декабря, 2016 - 22:09:38 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function exec_script($url, $params = array())
  2. {
  3.     $parts = parse_url($url);
  4.  
  5.     if (!$fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80))
  6.     {
  7.         return false;
  8.     }
  9.  
  10.     $data = http_build_query($params, '', '&');
  11.  
  12.     fwrite($fp, "POST " . (!empty($parts['path']) ? $parts['path'] : '/') . " HTTP/1.1\r\n");
  13.     fwrite($fp, "Host: " . $parts['host'] . "\r\n");
  14.     fwrite($fp, "Content-Type: application/x-www-form-urlencoded\r\n");
  15.     fwrite($fp, "Content-Length: " . strlen($data) . "\r\n");
  16.     fwrite($fp, "Connection: Close\r\n\r\n");
  17.     fwrite($fp, $data);
  18.     fclose($fp);
  19.  
  20.  
  21.  
  22.     return true;
  23. }
  24.  


У меня написан скрипт который парсит порядка 60 тысяч страниц. Дабы не отваливался по таймауту сделал ограничение в 1600 страниц за раз. И после этого с помощью описанной выше функции запускал следующий экземпляр скрипта, а из текущего выходил. При переносе на другой хостинг функция работать перестала, в логах пусто, если в fsockopen добавить переменные для возврата кода и текста ошибки то там 0 и пусто, но скрипт не запускается. Ткните, пожалуйста, в каком направлении копать.

Если добавить var_dump($fp); и var_dump($data); между fwrite($fp, $data); fclose($fp);
Возврат получается:
resource(6415) of type (stream)
string(0) ""
Сама функйия возвращет: bool(true)
2. armancho7777777 - 09 Декабря, 2016 - 08:56:49 - перейти к сообщению
CODE (shell):
скопировать код в буфер обмена
  1. php /path/to/file.php > /dev/null 2>&1 &

(Добавление)
Скрипт будет выполняться в фоне.
Если хотите получать логи ошибок, то так:
CODE (shell):
скопировать код в буфер обмена
  1. php /path/to/file.php > /dev/null 2>>/path/to/error.log &
3. DeMonyan - 09 Декабря, 2016 - 09:57:10 - перейти к сообщению
Нет у меня шела в виртуальном хостинге. Мне нужно это запускать из PHP.
Суть не в поиске других решений, суть в том чтобы разобраться почему с сокетами не работает.
4. DeMonyan - 09 Декабря, 2016 - 23:12:06 - перейти к сообщению
Проблему решил с помощью поддержки хостинга тестируемого. В nginx просто включили опцию proxy_ignore_client_abort и всё взелетело.

 

Powered by ExBB FM 1.0 RC1