如何使用PHP运行批处理文件?

时间:2014-04-10 02:31:49

标签: java php windows batch-file

我尝试使用许多语法在PHP中打开.bat文件,它们工作正常。它运行文件并存储输出。但我手头有一个新问题需要从PHP启动服务器程序。

假设我有一个服务器程序" server.java"和客户端程序" client.java"。需要首先运行服务器,然后运行客户端。我创建了一个批处理文件来运行这个服务器程序作为" server.bat"。是否可以从PHP端启动此server.bat文件并使其在后台运行,直到客户端完成其过程?

3 个答案:

答案 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);