2010-12-15 113 views
0

我之前用mysqldump方法失败了。现在我试图调用将调用mysqldump的批处理文件。 PHP文件它调用批处理文件,看起来像这样:通过调用php批处理文件备份mysql数据库

<?php 
shell_exec('c:\\abc.bat'); 

?> 

而且批处理文件,当我执行直接产生的是我期待的7KB SQL文件:

mysqldump --opt -u root -ppassword onstor > c:\onstordb.sql 

但是,当我使用PHP来执行它,我得到一个0 Kb文件,我想知道为什么。我尝试了shell_exec和exec。参数有问题吗?

回答

1

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

它读取:

我用的是PHP exec命令执行任何批处理文件 有问题。执行其他命令 (即“dir”)正常工作)。但如果我 执行批处理文件,我收到输出从exec命令。

我的服务器设置包含 运行的Windows Server 2003服务器 IIS6和PHP 5.2.3。在此服务器上,我 有:

  1. 授予执行权限互联网用户上 c:\windows\system32\cmd.exe
  2. 已授权Everyone-> Full控制写入批处理文件 的目录。
  3. 授予Everyone->完全控制整个c:\cygwin\bin目录 及其内容。
  4. 授予Internet用户“作为批处理登录”权限。
  5. 指定每个正在执行的文件的完整路径。
  6. 测试这些脚本从服务器上的命令行运行,并且它们工作得很好。
  7. 确保%systemroot%\system32位于 系统路径中。

事实证明,即使所有的服务器上进行上述 的,我不得不 在 的exec调用指定的完整路径cmd.exe

当我使用的电话:

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

则一切正常。在我的 的情况下,$batchFileToRun是 到批处理文件 的实际系统路径(即对 realpath()的调用结果)。

+0

请不要只是粘贴链接的答案。如果你想这样做,考虑让他们评论。如果远程站点消失或暂时不可用,请通过对所提供的链接进行汇总或引用,从而使答案更有价值。 – Gordon 2010-12-15 13:11:34

+0

如果php.net消失了,愿上帝怜悯我们的灵魂。 – DampeS8N 2010-12-15 13:13:38

+0

@Dampe我至少有一次发生过这种情况。 php.net关闭了,并且提供的链接在一段时间内不工作,这让OP不知所措。当然,提供一个链接到镜子固定的,但尽管如此。 – Gordon 2010-12-15 13:18:00

相关问题