我尝试使用许多语法在PHP中打开.bat文件,它们工作正常。它运行文件并存储输出。但我手头有一个新问题需要从PHP启动服务器程序。
假设我有一个服务器程序" server.java"和客户端程序" client.java"。需要首先运行服务器,然后运行客户端。我创建了一个批处理文件来运行这个服务器程序作为" server.bat"。是否可以从PHP端启动此server.bat文件并使其在后台运行,直到客户端完成其过程?
答案 0 :(得分:1)
您正在寻找exec function。
请注意此功能的一些危险,即:
当允许将用户提供的数据传递给此函数时,请使用escapeshellarg()或escapeshellcmd()以确保用户不会欺骗系统执行任意命令。
注意:如果程序是使用此功能启动的,则为了它 继续在后台运行,程序的输出必须是 重定向到文件或其他输出流。没有这样做会 导致PHP挂起,直到程序执行结束。
阅读输出
exec命令有一个名为$output
的可选变量,可用于显示通过PHP运行的命令的输出。但是,这仅在子流程(在本例中为批处理文件)退出后才有效,这对于服务器脚本不起作用。
要在脚本仍在运行时显示信息,我们必须将脚本的输出重定向到文件,然后读取该文件。为了证明这一点,我们将举例:
exec("server.bat");
并添加重定向到" server_log.txt"
exec("server.bat > server_log.txt");
一旦运行,我们可以通过阅读" server_log.txt"来检查批处理文件的输出。 可以找到一个关于从PHP读取文件的好(如果有点过时)教程here。
答案 1 :(得分:0)
尝试exec("psexec -d server.bat");
答案 2 :(得分:0)
我通过执行以下代码来实现此目的:
exec("start cmd /c test.bat", $output);
var_dump($output);