我想将两个简单的 Windows bat 文件与我的 PHP 应用程序捆绑在一起,以便启动和停止 PHP 内置 Web 服务器以在本地主机上测试该应用程序。
winlaunch.bat
这是我目前得到的信息:
php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php
我不知道该怎么做:
- 如何将输出重定向至日志文件?
- 如果从 Windows 资源管理器调用,如何自动关闭命令窗口,以保持应用程序运行?
- 我该在停止脚本中放些什么?
- 如何检查应用程序是否已在运行?
答案1
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.
您可以使用 tasklist 命令检查 php.exe 是否已在运行:
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”,则在这种情况下可能不需要它,但我提到它是为了防止您在进程名为“php.exe”find "Php.exe"
时使用。该/c
命令指示 find 仅计算您要求它查找的字符串的出现次数。
如果结果是“1”,或者如果进程可以运行多次,结果会更大,则表示进程正在运行。如果结果是“0”,则表示进程没有运行。对于您来说,答案可能始终是 0 或 1,您可以将“explorer.exe”更改为“php.exe”。如果您愿意,您可以测试结果,如果值不为零,则发出 taskkill 命令,或者如果进程正在运行,您可以随时发出 taskkill 命令来停止进程。如果进程没有运行,taskkill 命令将只报告“INFO:没有按照指定条件运行的任务”。
如果您不想让窗口保持打开状态,您可以在批处理文件中使用“start”命令。例如,
start "PHP" "php.exe -S 127.0.0.1:80 -t path/to/my/app/webroot my_app_bootstrap_script.php"
命令后面的“PHP”是窗口的标题。您可以start /?
在命令提示符下发出该命令以查看启动命令的选项。