паралельный процесс

mefist

Новичок
паралельный процесс

У меня возникла необходимость запустить паралельно еще один пхп-скрипт. Я для этого нашел функцию

PHP:
function execInBackground($path, $exe, $args = "") {
   global $conf;
   
   if (file_exists($path . $exe)) {
   echo('zzz');
      chdir($path);
      if (substr(php_uname(), 0, 7) == "Windows"){
         pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r"));    
      } else {
         exec("./" . $exe . " " . escapeshellarg($args) . " > /dev/null &");    
      }
   }
}

Только я никак не могу понять, как ей правильно передавать аргументы
Я пробовал execInBackground('/usr/bin/', 'php5.exe', ' -f Z:\home\rss.com\www\update.php') но тогда у меня открывает окно php с этим же скриптом, которое вызывает следуйщее окно, и так бесконечно =)

Не мог бы кто-нибудь привести пример как правильно запустить этот скрипт? Можно не через эту функцию )
Путь к php - Z:\usr\bin\php5.exe
Пусть к скрипту - Z:\home\rss.com\www\update.php
 

TutanXamoN

Новичок
Что пешает выполнить два раза в командной строке:
PHP:
path_to_php path_to_script
?
 

mefist

Новичок
Тоесть в командной строке? Мне нужно чтобы это скрипт сделал
 

TutanXamoN

Новичок
Что мешает чтобы скрипт выполнил ето в командной строке + если он в командной строке выполняет сам себя передал сам себе какойто параметр чтоб он знал что сам себя он уже запустил и больше етого делать не надо?

-~{}~ 22.12.07 20:29:

PHP:
script:
<?
if($_GET['runned']!='Sss!')
{
exec('Z:\usr\bin\php5.exe -f Z:\home\rss.com\www\update.php?runned=Sss!');
}
// start some work


?>
 

mefist

Новичок
Спасибо, попробую

-~{}~ 22.12.07 21:50:

так вообще не работает
 

TutanXamoN

Новичок
PHP:
pclose(popen("start \"SSS\"  \"Z:\usr\bin\php5.exe\" -f Z:\home\rss.com\www\update.php?runned=Sss!", "r"));
 

mefist

Новичок
Тоже самое получается, почему-то вместо указанного скрипта, он запускает сам себя
 

TutanXamoN

Новичок
Хочешь сказать что:
PHP:
pclose(popen("start \"SSS\"  \"Z:\usr\bin\php5.exe\" -f Z:\home\rss.com\www\update.php?runned=Sss!", "r"));
и
PHP:
pclose(popen("start \"SSS\"  \"Z:\usr\bin\php5.exe\" -f Z:\home\rss.com\www\script.php?runned=Sss!", "r"));
запускают один и тот же скрипт?
 

FractalizeR

Новичок
Могу посоветовать такой способ.
- Скрипты, которые нужно вызывать параллельно, кладем в папку с установленной в .htaccess директивой php_value ignore_user_abort true. Или просто устанавливаем эту директиву на весь проект или в php.ini, если она там еще не установлена.

- Запускаем параллельное исполнение скрипта таким образом:
PHP:
$a = fopen("http://localhost:8082/test/test1.php", "r");
fclose($a);
Открытие URL fopen инициирует запрос к апачу, который сразу же начнет исполнять наш скрипт. Поскольку ignore_user_abort=true, параллельное исполнение скрипта не завершится по fclose. А поскольку никаких данных из открытого потока мы не читаем, fopen выполнится моментально.

-~{}~ 26.12.07 20:22:

Прошу прощения, только что проверил, fopen/fclose, сволочи, почему-то ждут завершения скрипта. Но нашел обходной путь:

PHP:
<?php
$fp = fsockopen("localhost", 8082, $errno, $errstr, 30);
if (!$fp) {
   echo "$errstr ($errno)<br />\n";
} else {
   $out = "GET /test/test1.php HTTP/1.1\r\n";
   $out .= "Host: localhost\r\n";
   $out .= "Connection: Close\r\n\r\n";

   fwrite($fp, $out);
   fclose($fp);
}

echo('DONE!');
?>
Только что проверил на скрипте с бесконечным циклом (test1.php) и повесил себе апач :))
 

FractalizeR

Новичок
Автор оригинала: Alexandre
продолжай в том же духе :)
Есть!

P.S. Кстати, вопрос к автору топика - зачем запускать параллельный процесс из PHP скрипта? :confused:

-~{}~ 26.12.07 23:25:

Кстати, fopen, скорее всего не завершения скрипта ждет, а начала хоть какого-нибудь количества данных.
 
Сверху