这个问题在这里已经有了答案:
How do you run a .bat file from PHP?
(7 个回答)
php How do I start an external program running - Having trouble with system and exec
(3 个回答)
2年前关闭。
在每个人都开始讨论“安全风险”“无法完成”之前,先停下来阅读整个帖子
我有一个从家用笔记本电脑设置的网络服务器,它用作游戏网络服务器,我正在尝试创建一个 GUI 以便我们更容易维护服务器,我正在尝试使用批处理文件在计算机上执行操作
所以为了把它放在眼里,我有我的索引文件 index.php
<form method="post">
<input type="submit" name="startServer" value="Start Server">
</form>
<?
if(isset($_POST['startServer'])){
exec('batch/startServer.bat');
}
?>
我的 startServer.bat 将在运行服务器的笔记本电脑上运行,并将执行所有必要的操作来启动我们的游戏服务器,因此还有另一个目录“Instance”包含一个可执行的“Server.exe”,批处理文件将运行
我遇到的问题是运行 web 服务器并测试它如果我直接打开批处理文件它不起作用但它似乎 php 代码不起作用
为了澄清起见,我使用的是 apache 而我的浏览器是 chrome
对于任何愿意回答我走的路线的人来说,这是一个简单的问题,对吗?使用 php 将允许所有内容在托管服务器的机器上运行,因此最终用户将只能看到 GUI,服务器将运行批处理文件和 Web 服务器上的所有内容,而不是本地机器,如果这有意义的话?
编辑:为了更清楚地了解 exec 函数的运行情况,但它只是像应用程序加载一样挂起我需要一个实际打开应用程序的解决方案是我的主机,例如如果我想打开记事本我按下一个按钮在 Web 服务器上,记事本将在计算机上打开
编辑 2:我想指出,我不完全是 需要使用
exec
功能,并且我已经尝试了迄今为止 7/19/2017:3:45pm 的所有答案,如果我在排序上做一些事情,则没有任何效果echo exec('start text.bat');
我会得到一个 This is a test to show your batch is working
只需 echo .....
在批处理文件中,我遇到的主要问题是服务器没有像显示 GUI 那样物理显示打开的文件让我们以记事本为例只要我的批处理文件在完成运行后关闭记事本,我就可以打开记事本并获得一些返回值,但是记事本的 GUI 永远不会显示,这非常重要
我读了几篇关于使用 apache 作为服务的文章,我很确定我是这样,但我知道 xaammp 有足够的特权,我已经选中了“允许 apache 与桌面交互”框,但是没有弹出 GUI我想我想解决的主要问题是我需要显示 GUI,而不仅仅是将文件作为后台服务打开。
如果它使回答更容易,如果有一种可以更轻松地做我想做的事,我愿意切换编程语言
最佳答案
您的理论是正确的,它将在服务器上运行,但是您可能会在直接从 php 运行应用程序时遇到问题(使用这种方法,它不会与 PHP 分离,并且 webapp 在应用程序运行时“挂起”)。
确保:打印/记录返回值。只是一个
<?php
if(isset($_POST['startServer'])){
echo exec('batch/startServer.bat');
}
?>
可以为您指明正确的方向。您的发行版中可能已禁用 exec 功能。
使用
<?php
代替
<?
强烈建议,默认情况下,在大多数发行版(wamp、xamp 等)中不启用 short_tags。
设置 Debug模式并打印所有内容以获取有关问题的信息:
<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
if(isset($_POST['startServer'])){
echo exec('batch/startServer.bat');
}
?>
如果您没有任何响应,请尝试使用带有“hello world”的简单批处理文件来测试它是否有效。
请注意,权限和限制来自 php 环境,批处理文件继承了运行 PHP 代码/Apache 的相同权限(在 mod_php 的情况下)
关于php - 打开批处理文件php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44942150/