Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Запустить скрипт на выполнение и не ждать результата
 
 автор: Trivium   (29.01.2010 в 17:58)   письмо автору
 
 

Всем привет!
Мне надо запустить скрипт, который будет долго выполняться из другого скрипта.
Я пробовал exec, system, fopen, но всё они ждут результата выполнения.
Можно как-то запустить скрипт или послать ему запрос на выполнение, например при помощи сокетов или функции header, чтобы родительский скрипт продолжил выполняться, и новый запустился.
Вариант с pcntl и fork тоже не подходит, т.к. их на серваке нету.

  Ответить  
 
 автор: Тень   (29.01.2010 в 18:06)   письмо автору
 
   для: Trivium   (29.01.2010 в 17:58)
 

Неа, затёр...

То есть способ такой: получить только заголовки при GET/POST запросе скрипта, а потом оборвать соединение. В запрашиваемом скрипте либо отсутствие вывода, либо ignore_user_abort(true). Но способ тупой.

Скорее всего, тебе просто нужен cron.

  Ответить  
 
 автор: Trivium   (29.01.2010 в 18:39)   письмо автору
 
   для: Тень   (29.01.2010 в 18:06)
 

Нет, крон не надо. Мне надо блог в поисковиках пинговать. Там большая база и надо разослать всем хостам, а они там ответа заставляют ждать и долго в общем это. Надо как-то отправить запрос и не ждать ответа моему скрипту.

  Ответить  
 
 автор: Trivium   (31.01.2010 в 13:23)   письмо автору
 
   для: Trivium   (29.01.2010 в 17:58)
 

так как кто-нибудь знает как можно такое реализовать?
ну должны ж быть в PHP средства для хоть какой-то многопоточности и многозадачности кроме cURL'а и pcntl fork'а...

  Ответить  
 
 автор: Владимир55   (31.01.2010 в 13:35)   письмо автору
 
   для: Trivium   (29.01.2010 в 17:58)
 

Для подобной цели я использую Аякс, а результат пишу в файлы.

  Ответить  
 
 автор: Trivium   (01.02.2010 в 10:15)   письмо автору
 
   для: Владимир55   (31.01.2010 в 13:35)
 

ну я тоже это как один из вариантов рассматриваю, но а всё таки средствами PHP как такое сделать?
я вроде прочитал можно с ignore_user_abort реализовать это

  Ответить  
 
 автор: Владимир55   (01.02.2010 в 12:36)   письмо автору
 
   для: Trivium   (01.02.2010 в 10:15)
 

С этим оператором я не знаком. И вообще, как мне кажется, для рнр эта задача не свойственна.

А еще можно запустить рнр-скрипт, вызвав его файл так, как если бы это была картинка. Типа src="123.php".

  Ответить  
 
 автор: Trivium   (01.02.2010 в 13:41)   письмо автору
 
   для: Владимир55   (01.02.2010 в 12:36)
 

ну я знаю, не свойственна да, но как-то бы без картинок и AJAX'а можно ещё как-то? просто как-то отправить запрос серваку, но не ждать ответа? а сервак будет себе выполнять в фоне указанный скрипт

  Ответить  
 
 автор: guye   (01.02.2010 в 15:20)   письмо автору
 
   для: Trivium   (01.02.2010 в 13:41)
 

через popen пробывал ?

  Ответить  
 
 автор: Trivium   (01.02.2010 в 15:27)   письмо автору
 
   для: guye   (01.02.2010 в 15:20)
 

посмотрел в мануале, это вроде процесс открывает только? как ей запустить скрипт?

  Ответить  
 
 автор: guye   (01.02.2010 в 15:47)   письмо автору
 
   для: Trivium   (01.02.2010 в 15:27)
 

я думал сделать что типа такого:

<?php
echo date('h:i:s')."\n";
$p=popen('php proba.php','r');
echo date('h:i:s')."\n";//дата будет меньше чем у дочернего процесса
exit;
//pclose($p);
echo date('h:i:s')."\n";
?>

proba.php:
<?php
$content='';
$f=fopen('file','w');
for($i=0;$i<1000000;$i++){
fwrite($f,$content,strlen($content));
}
fwrite($f,date('h:i:s'));
fclose($f);
?>

но родительский процесс все равно ждет завершения дочернего процесса (но если тебе нужно породить несколько процесов одновременно должно прокатить)

  Ответить  
 
 автор: Trivium   (01.02.2010 в 16:25)   письмо автору
 
   для: guye   (01.02.2010 в 15:47)
 

не, мне надо как раз именно не ждать выполнения... и popen он же целый процесс стартует, а это сервак грузит сильно

  Ответить  
 
 автор: Владимир55   (01.02.2010 в 15:55)   письмо автору
 
   для: Trivium   (01.02.2010 в 13:41)
 

Я так и делаю, как Вам написал: директива на сервер уходит и процесс осуществляется своим чередом.

Что Вас не устраивает, какую цель Вы преследуете?

  Ответить  
 
 автор: Trivium   (01.02.2010 в 16:27)   письмо автору
 
   для: Владимир55   (01.02.2010 в 15:55)
 

я преследую цель запустить выполнение скрипта и не ждать когда он выполнится

  Ответить  
 
 автор: Владимир55   (01.02.2010 в 17:29)   письмо автору
 
   для: Trivium   (01.02.2010 в 16:27)
 

Аякс так и делает. Чем Вас это не устраивает.

  Ответить  
 
 автор: Trivium   (01.02.2010 в 17:35)   письмо автору
 
   для: Владимир55   (01.02.2010 в 17:29)
 

ну наверно так и сделаю... вставку на jQuery... просто хотелось на чистом PHP сделать, я думал есть средства... может в будущих версиях введут шо нить "эдакое"

  Ответить  
 
 автор: Shorr Kan   (01.02.2010 в 15:50)   письмо автору
 
   для: Trivium   (29.01.2010 в 17:58)
 

exec('php script.php>/dev/null &');

  Ответить  
 
 автор: guye   (01.02.2010 в 15:55)   письмо автору
 
   для: Shorr Kan   (01.02.2010 в 15:50)
 

exec дожидаеться выполнения системной команды popen порождает отдельный процесс(замени popen на exec в моем скрипте и посмотри на разницу во времени)

  Ответить  
 
 автор: Loki   (01.02.2010 в 16:15)   письмо автору
 
   для: guye   (01.02.2010 в 15:55)
 

& на конце как раз и призван решить эту проблему

  Ответить  
 
 автор: Trivium   (01.02.2010 в 16:27)   письмо автору
 
   для: Trivium   (29.01.2010 в 17:58)
 

мне тут посоветовали сделать echo >>> EOF
только я не понять зачем оно надо? это ж для чтения вроде?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования