php exec в фоновом режиме с WAMP на Windows
С помощью следующего кода я могу вызвать скрипт php и передать в него некоторые переменные
таким образом, мой вызываемый скрипт работает, но мне нужно, чтобы этот процесс был в фоновом режиме, я не хочу ждать завершения скрипта, есть ли способ сделать это с помощью wamp на windows? делал некоторые чтения, а некоторые добавляют & в конце команды или > NUL Теперь я заметил, что некоторые из них для Linux, есть ли такая команда для Wamp на Windows? если есть пожалуйста поделитесь
3 ответа
РЕДАКТИРОВАТЬ: из-за того, как exec() команда ожидает завершения программы, это очень сложно сделать с помощью vanilla exec() , Я сталкивался с этими решениями, и это должно работать:
WScript.Shell->Run Команда принимает 3 аргумента: команда (вы можете добавить перенаправление вывода), оконный режим (0 = скрытый) и ожидание завершения. Поскольку третий аргумент равен false, этот PHP должен немедленно вернуться.
Оригинальное решение: как следует из этого поста, вы должны попробовать START /B cmd , Это практически эквивалент Linux cmd & тем, что она запускает команду асинхронно, в фоновом режиме, без взаимодействия с пользователем или открытия новой оболочки.
Поскольку это вернется немедленно, PHP не будет ждать его завершения, и exec() Команда не получит никакого вывода. Вместо этого попробуйте использовать перенаправление вывода оболочки. Ваш код PHP будет выглядеть так:
Как использовать php exec(), запустить еще один script и запустить на заднем плане, а не ждать завершения script
Я хочу выполнить большой, интенсивно использующий базу данных script, но не нужно ждать завершения процесса. Я просто хотел бы вызвать script, пусть он работает в фоновом режиме, а затем перенаправляется на другую страницу.
EDIT:
Я работаю на локальном сервере сообщества Zend в Windows 7.
У меня есть доступ к удаленным серверам linux, где также находится проект, поэтому я могу сделать это на linux или windows.
У меня есть это
это работает отлично, но приложение magento зависает, чтобы процесс завершился. он делает все, что я ожидаю, время от времени записывается в файл, и я доволен тем, как он работает. Теперь все, что я хотел бы сделать, это запустить этот script, действие контроллера не зависает, а вместо этого перенаправляет и это. из того, что я узнал о exec(), вы можете сделать это, изменив способ, которым я вызываю exec() выше, чтобы:
который я взял из здесь
если я добавляю » > /dev/null 2 > & 1 &» к вызову exec, он не ждет, как ожидалось, но больше не выполняет script. Может ли кто-нибудь сказать мне, почему, и если да, скажите мне, как я могу заставить это работать, пожалуйста?
Может ли это быть связанной с разрешением проблема?
РЕДАКТИРОВАТЬ: Я предполагаю, что было бы проблемой, чтобы какой-либо вывод регистрировался в файл, если я вызываю функцию exec с (/dev/null 2 > & 1 &), поскольку это отменит это. это правильно?
php exec в фоновом режиме с помощью WAMP в Windows
со следующим кодом я могу вызвать php-скрипт и передать в него некоторые переменные
таким образом мой скрипт работает, но мне нужно, чтобы этот процесс был в фоновом режиме, я не хочу ждать завершения скрипта, есть ли способ сделать это с помощью wamp на окнах? делали некоторые чтения, а некоторые добавляли & в конце команды или > NUL , теперь я заметил, что некоторые из них предназначены для Linux, есть ли такая команда для wamp на окнах? если есть, пожалуйста, поделитесь им
EDIT: из-за того, что команда exec() ожидает завершения выполнения программы, очень сложно сделать это с помощью vanilla exec() . Я наткнулся на эти решения, и этот должен работать:
Команда WScript.Shell->Run принимает 3 аргумента: команда (вы можете дополнительно добавить перенаправление вывода), режим окна (0 = скрытый) и ждать, пока он должен дождаться окончания. Поскольку третий аргумент является ложным, этот PHP должен немедленно вернуться.
Исходное решение. Как говорится в этом сообщении, вы должны попробовать START/B cmd . Это практически эквивалент Linux cmd & в том, что он выполняет команду асинхронно, в фоновом режиме, без взаимодействия с пользователем или открытия новой оболочки.
Поскольку это немедленно вернется, PHP не будет ждать завершения, и команда exec() не получит никакого вывода. Вместо этого попробуйте использовать перенаправление вывода оболочки. Ваш PHP-код будет выглядеть так:
Выполнение фоновых процессов из PHP в Windows
В *nix, запуска фоновых процессов, выполняется простым добавлением амперсанда (&) к команде. В Windows, это не так просто сделать из PHP.
Если вы используете в PHP функции системных вызовов, как exec, system, passthru или shell_exec, то эти методы приводят к подвисанию программы, которая ждет завершения работы вызванного процесса.
Описанные ниже методы предполагают, что вы используете PHP-CLI (работу с php из командной строки). Запуск PHP на веб-сервере требует правильной настройки конфигурации и прав доступа, такие как safe_mode, safe_mode_exec_dir и т.д.
Для примера, мы хотим вызвать cmd из PHP, но чтобы программа продолжала выполнять действия.
Приведенные ниже примеры не работают.
exec(«cmd»);
exec(«cmd >NUL»);
exec(«cmd /c cmd»);
exec(«start /b cmd»);
exec(«runas cmd»);
В каждом случае, PHP ждет пока cmd закроется.
Существуют несколько обходных путей, упомянутых в комментариях к документации по PHP к функции exec()
Краткое изложение этих методов, в порядке предпочтения:
Этот код должен работать на Linux и Windows.
$exe = «cmd.exe»;
pclose(popen(‘start «bla» «‘. $exe. ‘» ‘. escapeshellarg($args), ‘r’));
Этот код работает только в Windows.
$WshShell = new COM(«WScript.Shell»);
// Запуск cmd в свернутом состоянии
$oExec = $WshShell->Run(«cmd», 7, false);
// Запуск cmd в фоновом режиме, иконка на панели задач не выводится
$oExec = $WshShell->Run(«cmd /C dir /S %windir%», 0, false);
Более подробнее о методе Run() читайте в msdn.
Php exec не ждать завершения windows
Здесь могла бы быть ваша реклама
Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel
Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.
Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо
После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..
Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.
Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.
На последок как оно происходит на форумах
Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.
Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12