我正在尝试在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,这也不起作用。
非常感谢您提供的任何帮助/建议/指示 - 我在我的智慧结束!非常感谢。
答案 0 :(得分:0)
如果您的PHP页面与批处理文件位于同一目录中,那么下面将这样做:
exec("batchname.bat");
参考;
个人经历
答案 1 :(得分:0)
1 - cd windows\system32\dns\
CD来自哪里?它是调用批处理文件的进程的当前目录的相对路径
2 - 您可以运行批处理文件,但是,帐户(运行Web服务器的位置)可以执行此操作吗?
3 - 您如何知道批处理文件是否正在运行?尝试从批处理文件(echo inside batch > "%temp%\batchphp.log"
)