3

Я хочу связать два простых файла Windows Bat с моим приложением PHP, которое может запускать и останавливать встроенный веб-сервер PHP для тестирования приложения на локальном хосте.

Это то, что у меня есть на winlaunch.bat :

php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php

Вещи, которые я не знаю, как сделать:

  • Как перенаправить вывод в файл журнала?
  • Как автоматически закрыть командное окно, если оно вызывается из проводника Windows, сохраняя работоспособность приложения?
  • Что я положил в сценарий остановки?
  • Как проверить, запущено ли уже приложение?

1 ответ1

4

Символ перенаправления в Microsoft Windows, как и в других операционных системах, таких как Linux, OS X и т.д., Является «>». Таким образом, вы можете перенаправить вывод следующим образом:

php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php > "C:\somedir\php.log"

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

Примечание: если вы используете символ «>», если какой-либо файл уже существует с указанным вами местоположением и именем, этот файл будет перезаписан. Если вы хотите, чтобы файл журнала продолжал расти, т.е. вы хотите добавить существующий файл при следующем запуске php.exe, тогда используйте >> , а не > . Это приведет к созданию файла, если он не существует, но вывод будет добавлен к существующему файлу.

Вы можете использовать команду taskkill для завершения процесса. Например, вы можете использовать:

taskkill /f /fi "imagename eq php.exe"

/f может и не понадобиться, но с этой опцией вы можете заставить процессы командной строки taskkill закрываться, которые иначе не могли бы закрыться. /fi фильтрует вывод команды taskkill. В этом случае вы будете фильтровать, поэтому вы видите только процессы с именем php.exe. Если процесс не запущен, вы увидите следующее, если выполните эту команду:

C:\>taskkill /fi "imagename eq php.exe"

INFO: No tasks running with the specified criteria.

Вы можете проверить, запущен ли php.exe с помощью команды tasklist:

tasklist /fi "imagename eq php.exe"

Это покажет вам все запущенные процессы с именем php.exe. В некоторых случаях вы можете иметь несколько процессов с одним именем, например, chrome.exe. В других случаях, таких как explorer.exe, вы должны увидеть только один и увидеть что-то вроде следующего:

C:\>tasklist /fi "imagename eq explorer.exe"

Image Name                     PID Session Name        Session#    Mem Usage
========================= ======== ================ =========== ============
explorer.exe                 91484 Console                    1     37,424 K

Вы также можете проверить, запущен ли он, "отправив" выходные данные команды tasklist в команду find с помощью «|» труба персонажа. Например:

C:\>tasklist /fi "imagename eq explorer.exe" | find /i /c "explorer.exe"
1

/i инструктирует find игнорировать регистр букв, например, заглавные и строчные буквы не имеют значения. Это, вероятно, не требуется в этом случае, если процесс всегда будет называться «php.exe», но я упоминал об этом, если вы можете использовать find "Php.exe" когда процесс называется «php.exe». /c указывает find только для подсчета количества вхождений строки, которую вы указали для поиска.

Если результат равен "1" или больше, если процесс может выполняться более одного раза, то он выполняется. Если это "0", он не работает. В вашем случае ответ, скорее всего, всегда будет 0 или 1, и вы измените «explorer.exe» на «php.exe». Если вы хотите проверить результат и выполнить команду taskkill, если значение не равно нулю, или вы можете просто выполнить команду taskkill в любое время, когда вы хотите остановить процесс, если он выполняется. Если он не запущен, команда taskkill просто сообщит: «INFO: Нет заданий, выполняемых с указанными критериями».

Если вы не хотите, чтобы окно оставалось открытым, вы можете использовать команду "Пуск" в вашем пакетном файле. Например,

start "PHP" "php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php"

"PHP" после команды предоставляет заголовок для окна. Вы можете выполнить команду start /? в командной строке, чтобы увидеть параметры для команды запуска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .