通过调用php批处理文件备份mysql数据库
问题描述:
我之前用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。参数有问题吗?
答
http://www.php.net/manual/en/function.exec.php#85930
它读取:
我用的是PHP
exec
命令执行任何批处理文件 有问题。执行其他命令 (即“dir”)正常工作)。但如果我 执行批处理文件,我收到输出从exec
命令。我的服务器设置包含 运行的Windows Server 2003服务器 IIS6和PHP 5.2.3。在此服务器上,我 有:
- 授予执行权限互联网用户上
c:\windows\system32\cmd.exe
。- 已授权Everyone-> Full控制写入批处理文件 的目录。
- 授予Everyone->完全控制整个
c:\cygwin\bin
目录 及其内容。- 授予Internet用户“作为批处理登录”权限。
- 指定每个正在执行的文件的完整路径。
- 测试这些脚本从服务器上的命令行运行,并且它们工作得很好。
- 确保
%systemroot%\system32
位于 系统路径中。事实证明,即使所有的服务器上进行上述 的,我不得不 在 的
exec
调用指定的完整路径cmd.exe
。当我使用的电话:
$output = exec("c:\\windows\\system32\\cmd.exe /c $batchFileToRun");
则一切正常。在我的 的情况下,
$batchFileToRun
是 到批处理文件 的实际系统路径(即对realpath()
的调用结果)。
请不要只是粘贴链接的答案。如果你想这样做,考虑让他们评论。如果远程站点消失或暂时不可用,请通过对所提供的链接进行汇总或引用,从而使答案更有价值。 – Gordon 2010-12-15 13:11:34
如果php.net消失了,愿上帝怜悯我们的灵魂。 – DampeS8N 2010-12-15 13:13:38
@Dampe我至少有一次发生过这种情况。 php.net关闭了,并且提供的链接在一段时间内不工作,这让OP不知所措。当然,提供一个链接到镜子固定的,但尽管如此。 – Gordon 2010-12-15 13:18:00