2015-06-19 2 views
0

со следующим кодом я могу вызвать PHP скрипт и передать некоторые переменные в нееPHP Exec в фоновом режиме с WAMP на Windows,

$cmd = 'php -f C:/wamp/www/np/myphpscript.php '.$var1; 


exec($cmd); 

этот путь мой называется скрипт работает, но мне нужно, что процесс будет в фоновом режиме, я не хочу ждать завершения скрипта, есть ли способ сделать это, используя wamp на окнах? делали чтение, а некоторые добавляли & в конце команды или > NUL, теперь я заметил, что некоторые из них предназначены для Linux, есть ли такая команда для wamp на окнах? если есть, пожалуйста, поделитесь им

ответ

0

EDIT: В связи с тем, как exec() команда ожидает программы для завершения выполнения, это очень трудно сделать это с ванилью exec(). Я наткнулся на these solutions, и это один должен работать:

$rshell = new COM("WScript.Shell"); 
$rexec = $rshell->Run("php -f C:/wamp/www/np/myphpscript.php ".$var1, 0, false); 

Команда WScript.Shell->Run принимает 3 аргумента: команда (при необходимости можно добавить перенаправление вывода), режим окна (0 = скрытый), и ждать, он должен ждать Конец. Поскольку третий аргумент является ложным, этот PHP должен немедленно вернуться.

Оригинальное решение: Как this post предполагает, вы должны попробовать START /B cmd. Это практически эквивалент Linux cmd & тем, что он запускает команду асинхронно, в фоновом режиме, без взаимодействия с пользователем или открытия новой оболочки.

Поскольку это немедленно вернется, PHP не будет ждать его завершения, а команда exec() не получит никакого вывода. Вместо этого попробуйте использовать перенаправление вывода оболочки. Ваш PHP данный код будет выглядеть следующим образом:

$cmd = 'start /b "" php -f C:/wamp/www/np/myphpscript.php '.$var1.' >C:/wamp/www/np/output.txt'; 
exec($cmd); 
+0

, можете ли вы привести пример того, как звонить что внутри php-кода? используя popen или что-то еще? – nonaxanon

+0

le mme see, im засыпая здесь a sec – nonaxanon

+0

запускает скрипт, но не на фоновом режиме, так же, как и у меня сейчас ... зависает, пока он заканчивается – nonaxanon

0

Не знаете, что вы используете, и если вы получите ответ на свою команду. Но, возможно, это помогает, если вы открываете вкладку для каждой команды. Таким образом, вы можете видеть ответы каждого запущенного скрипта, и в конце вы можете вызвать javascript для закрытия вкладки.

+0

сценарий работает, и я получаю ответы хорошо, но мне нужно, чтобы он был на заднем плане, я видел результат, и он делает то, что мне нужно, только он не будет работать в фоновом режиме. что является единственным моментом в его выполнении? – nonaxanon

+0

выполните свой сценарий через браузер или непосредственно в оболочку dos? – WebDevel

+0

сценарий вызывается нажатием кнопки отправки, он работает нормально, но не так, как я хочу, в фоновом режиме, где вам не нужно ждать X секунд, чтобы он закончил – nonaxanon

0

Вы должны установить переменную PHP на окружающую среду окон!

Если вы уже сделали это пропустить шаги руководства:

1. Open: 
     My Computer => Properties => Change Settings 

2. Select the tab: Advanced 

3. Click Environment Variables: Variable system 

4. Click the button New 
     Add the name of the environment variable. Example = php 
     Add the path to executable php.exe. Example = D:\xampp\php\php.exe 

Создать файл myscript.php

The variariaveis $ ARGC и $ argv являются родными php.

Вы заметите, что $ ARGC всегда несет ту же величину, что и результат вызова счетчика ($ ARGV) в любом случае $ ARGC является стандартной используется и составляет несколько миллисекунд быстрее, находясь в памяти (если этот имеет какое-то значение в производительности вашего скрипта).

//\n skip line 
echo "\n\n"; 
//echo test debug 
echo "Print Total Args : "; 
//Print return variavel $argc 
print_r($argc); 
//\n skip line 
echo "\n\n"; 
//echo test debug 
echo "Print Array Args : \n\n"; 
//Print return variavel $argv 
print_r($argv); 
echo "\n"; 
// You can retrieve the arguments in the normal way. 
$myvar_count = $argc; 
$myvar_array_args = $argv; 

Или, если вы хотите установить не переменная среды, можно просто позвонить по тракту

Example: D:\xampp\php\php.exe myscript.php argument1 2 3 4 5 

Retorn Запрашивать в ОС Windows

Total Args : 5 

Array Args : 

Array 
(
    [0] => test.php 
    [1] => argumento1 
    [2] => 2 
    [3] => 3 
    [4] => 4 
) 

Надеюсь, это поможет! Увидимся!