通过php调用批处理文件备份mysql数据库

时间:2010-12-15 12:59:43

标签: php mysql

我之前使用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。参数有问题吗?

1 个答案:

答案 0 :(得分:1)

http://www.php.net/manual/en/function.exec.php#85930

它的内容如下:

  

我在使用PHP时遇到了麻烦   exec命令执行任何批处理   文件。执行其他命令   (即“dir”)工作正常)。但如果我   执行了一个批处理文件,我收到了没有   exec命令的输出。

     

我所拥有的服务器设置   Windows Server 2003服务器正在运行   IIS6和PHP 5.2.3。在这台服务器上,我   有:

     
      
  1. 授予对Internet用户的执行权限   c:\windows\system32\cmd.exe
  2.   
  3. 授予所有人 - &gt;完全控制批处理文件所在的目录   是写的。
  4.   
  5. 授予所有人 - &gt;对整个c:\cygwin\bin目录的完全控制权   及其内容。
  6.   
  7. 授予Internet用户“以批处理方式登录”权限。
  8.   
  9. 指定正在执行的每个文件的完整路径。
  10.   
  11. 测试了从服务器上的命令行运行的这些脚本   他们工作得很好。
  12.   
  13. 确保%systemroot%\system32在。{   系统路径。
  14.         

    事实证明,即使是全部的   以上在服务器上,我不得不   指定cmd.exe的完整路径   exec来电。{/ p>      

    当我使用电话时:

    $output = exec("c:\\windows\\system32\\cmd.exe /c $batchFileToRun");
    
         

    然后一切正常。在我的   情况,$batchFileToRun是   批处理文件的实际系统路径   (即致电的结果   realpath())。