我之前使用mysqldump方法失败了。现在,我正在尝试调用批处理文件,该文件将调用mysqldump。 调用批处理文件的php文件如下所示:
<?php
shell_exec('c:\\abc.bat');
?>
批处理文件,当我直接执行时会生成我期望的7kb sql文件:
mysqldump --opt -u root -ppassword onstor > c:\onstordb.sql
但是当我使用php执行它时,我得到一个0 Kb的文件,我想知道为什么。我尝试了shell_exec和exec。参数有问题吗?
答案 0 :(得分:1)
http://www.php.net/manual/en/function.exec.php#85930
它的内容如下:
我在使用PHP时遇到了麻烦
exec
命令执行任何批处理 文件。执行其他命令 (即“dir”)工作正常)。但如果我 执行了一个批处理文件,我收到了没有exec
命令的输出。我所拥有的服务器设置 Windows Server 2003服务器正在运行 IIS6和PHP 5.2.3。在这台服务器上,我 有:
- 授予对Internet用户的执行权限
c:\windows\system32\cmd.exe
。- 授予所有人 - &gt;完全控制批处理文件所在的目录 是写的。
- 授予所有人 - &gt;对整个
c:\cygwin\bin
目录的完全控制权 及其内容。- 授予Internet用户“以批处理方式登录”权限。
- 指定正在执行的每个文件的完整路径。
- 测试了从服务器上的命令行运行的这些脚本 他们工作得很好。
- 确保
醇>%systemroot%\system32
在。{ 系统路径。事实证明,即使是全部的 以上在服务器上,我不得不 指定
cmd.exe
的完整路径exec
来电。{/ p>当我使用电话时:
$output = exec("c:\\windows\\system32\\cmd.exe /c $batchFileToRun");
然后一切正常。在我的 情况,
$batchFileToRun
是 批处理文件的实际系统路径 (即致电的结果realpath()
)。