2014-11-11 2 views
2

Я искал несколько вопросов, подобных этому, но я не нашел ответа, подходящего для меня, особенно для системы Windows. Я установил PHP и Apache на Windows-машине. У меня есть приложение, которое вызывает Page1.php. В Page 1 я выполняю какой-то код и в какой-то конкретный момент я хотел бы запустить скрипт php scriptchan, позволим ему сценарий Script.php асинхронно. Мне не нужно передавать какой-либо параметр этому второму сценарию - если бы он мог быть полезным, но это не обязательно, и мне не нужно ждать, пока скрипт закончит beacuse. Я не хочу сохранять связь с пользователем, поскольку скрипт выполняет много операций с файлами, и он может длиться довольно долго. Я видел и пробовал ответы на основе exec, popen, shell, system и т. Д. ... но я не нашел для меня подходящего, может быть, потому, что я работаю над Windows. Это были некоторые из решений Я попытался без anysuccess:Выполнять php-скрипт с php-страницы асинхронно в системе WINDOWS

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

схема может быть более или менее следующим образом:

page1.php

<?php 
echo "Hello World"; 
echo "\n"; 
.... 
if ($var>$var2) { 
    HERE CALL SCRIPT.PHP ASYNC 
} 
... 
?> 

script.php

<?php 
... 
... 
?> 
+0

Пробовал ли вы эту команду в командной строке? Он создает синтаксическую ошибку, потому что &> ничего не значит в Windows. (И/dev/null.) –

ответ

0

То, что вы называете «асинхронным», на самом деле не является асинхронным. Вы вызываете другой скрипт для выполнения в случае $var > $var2, и он называется if-statement.

Если ваш сценарий должен быть в другом файле, вы можете попробовать использовать include, include_once или require или require_once:

if ($var > $var2) { 
    include "Script.php"; 
} 

Остальное зависит от script.php.

+0

OP хочет знать, как вызывать другой скрипт асинхронно. Тот факт, что он хочет, чтобы это произошло внутри оператора if, является просто несущественной детальностью. –

+0

Привет, Гарри, вот в чем смысл. Утверждение if абсолютно не имеет значения. Мне нужно выполнить script.php без Page1.php, ожидая его завершения, чтобы продолжить свою собственную линию выполнения. – user3188554

2

Скопировано из комментариев PHP.net на exec's page:

Это будет выполнять $ CMD в фоновом режиме (без CMD окна) без PHP дожидаясь его завершения, как на Windows, и Unix.

<?php 
function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
     pclose(popen("start /B ". $cmd, "r")); 
    } 
    else { 
     exec($cmd . " > /dev/null &"); 
    } 
} 
?> 

Я не проверял это сам, но это было подобное направление к тому, что я имел в виду. Вы также можете посмотреть на вопрос this stackoverflow для получения дополнительной информации (может помочь).

+0

Но в этом подходе я выполняю Script.php. Как я вижу из вашего кода, он выполняет только командную строку, верно? – user3188554

+0

@ user3188554 Команда может использоваться для запуска другого скрипта. Посмотрите страницу [«Командная строка PHP на Microsoft Windows»] (http://php.net/manual/en/install.windows.commandline.php) страницы php.net, чтобы узнать, как это сделать на вашем компьютере. – iLot

+0

ОК, я почти получил его, но он еще не работает, я думаю, проблема заключается в разрешениях учетной записи. Возможно, учетная запись должна обладать правами администратора, имеет ли это смысл? – user3188554

Смежные вопросы