【问题标题】:PHP Not executing .bat file in windowsPHP不在Windows中执行.bat文件
【发布时间】:2013-12-05 13:31:20
【问题描述】:

我正在尝试在 Windows Server 2008 上使用 PHP 执行批处理文件。

该文件名为NEWDNS.bat,其目的是将新条目写入存储在c:\windows\system32\dns 中的DNS 区域文件。区域文件名为motlocal.co.uk

这里是newdns.bat的内容


@echo off
cd windows\system32\dns\
dnscmd dsvr012345 /recordadd motlocal.co.uk mynewsubdomain A 88.208.200.221
dnscmd dsvr012345 /ZoneReload motlocal.co.uk

newdns.bat 存储在服务器上与调用它的 PHP 页面相同的目录中:-

这里是调用newdns.bat的页面内容(php页面叫做dnscreator.php)


<?php
if(isset($_POST['submit']))
{
    echo exec("cmd.exe /c newdns.bat");
    echo "Done!";
} else {
?>
    <form action="" method="post">
    <input type="submit" name="submit" value="DO IT!">
    </form>
<?php
}
?>

当我双击 Windows 文件夹中的批处理文件时 - 它会运行并完美执行其命令并在 dns 区域文件中创建新的子域。

但是 - 无论我如何尝试(我已经使用了 2 天了),当我运行 dnscreator.php 时它不会执行。

表单执行并显示消息“完成!”但是newdns.bat中的命令没有执行。我知道批处理文件有效,因为正如我所说 - 我可以从 windows 文件夹(双击)运行它,它会做它应该做的事情。

PHP 安全模式已关闭,以防万一您想知道,我已尝试将批处理文件移动到 c:\windows\system32 中,但这也不起作用。

非常感谢您提供的任何帮助/建议/指点 - 我无能为力!非常感谢。

【问题讨论】:

标签: php windows batch-file exec batch-processing


【解决方案1】:

如果您的 PHP 页面与批处理文件位于同一目录中,则执行以下操作:

exec("batchname.bat");

参考;

个人经历

【讨论】:

  • 您好,感谢您的快速回复。 - 我已经尝试过了,我只是再次这样做以确保 - 仍然无法正常工作。
  • 我如何检查 A) PHP 用户是谁和 B) 他们有什么权利 - 谢谢
  • 嗨,达里尔——我完全按照你说的做了。 没用。
  • @MediaHaus 抱歉耽搁了,请尝试运行: echo exec("whoami");查看用户,然后检查文件上的安全选项卡以查看 apache 是否具有执行权限
  • 嗨 Daryl - 这是一个运行 IIS7 / PHP 5.4 / MySQL 的 WINDOWS 服务器 - 没有安装 Apache。真的不想安装 apache - 运行你的“whoami”命令,它什么也没返回。假设那是由于缺少 Apache。我确信这可以在没有 Apache 的情况下完成。你的想法是什么?谢谢
【解决方案2】:

1 - cd windows\system32\dns\ CD 从哪里来?它是调用批处理文件的进程当前目录的相对路径

2 - 您可以运行批处理文件,但是,帐户(运行 Web 服务器的帐户)可以吗?

3 - 你怎么知道批处理文件是否正在运行?尝试从批处理文件中留下日志 (echo inside batch &gt; "%temp%\batchphp.log")

【讨论】:

  • 嗨 - 我知道批处理文件没有运行 - 如果是 - 它将执行批处理文件中指定的任务并在 DNS 文件中创建一个新的主机条目。如果我从 Windows 运行这个批处理文件,它运行良好并且执行它应该做的事情 - 但是当我从 php 文件调用它时,DNS 文件内没有任何反应。我会尝试你的建议并回复你谢谢
  • 我还将批处理文件中的路径更改为:cd c:\windows\system32\dns\ - 仍然无法正常工作
  • @MediaHaus:从所提供的信息(您所说的)中,您知道某些事情不起作用。不知道批处理文件是否未运行,或者批处理文件是否正在运行但未执行应有的操作。 PHP 在某个用户帐户下运行(可能在与 webserver 相同的用户帐户下,其他如果以 fastcgi 运行),并且该帐户无权做你想做的事。批处理文件将启动但不执行任何操作,因为它没有权限。
  • 我以管理员身份登录相关机器并在浏览器中本地运行 dnscreator.php。
  • @MediaHaus:愚蠢的问题,但是,你如何在浏览器中运行你的 php?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2015-03-11
  • 2011-11-25
  • 2010-12-25
  • 1970-01-01
  • 2012-01-11
  • 2022-01-11
相关资源
最近更新 更多