Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从PHP脚本执行mysqldump_Php_Mysql_Apache_Exec - Fatal编程技术网

无法从PHP脚本执行mysqldump

无法从PHP脚本执行mysqldump,php,mysql,apache,exec,Php,Mysql,Apache,Exec,我正在尝试使用mysqldump和exec()函数创建数据库的定期备份(穷人的cron)。我正在macOS上使用XAMPP/PHP7 $command = "$mysqldump_location -u$db_user -h$db_host -p$db_password $db_name > $backup_file_location"; exec($command); 当我运行PHP脚本时,在$backup\u file\u location中提到的路径中没有SQL转储,但是如果我直接

我正在尝试使用
mysqldump
exec()函数创建数据库的定期备份(穷人的cron)。我正在macOS上使用XAMPP/PHP7

$command = "$mysqldump_location -u$db_user -h$db_host -p$db_password $db_name > $backup_file_location";
exec($command);
当我运行PHP脚本时,在
$backup\u file\u location
中提到的路径中没有SQL转储,但是如果我直接在终端上执行相同的
$command
字符串,我会在所需位置获得所需的SQL文件

我无法理解这里可能有什么问题。还可以接受关于转储整个数据库的更好方法的建议

编辑1:

$mysqldump_location
的值是
/Applications/XAMPP/xamppfiles/bin/mysqldump

$backup\u file\u location
的值是
/Applications/XAMPP/xamppfiles/htdocs/app5/data/sqldumps/sql\u data.sql

/app5/
是我开发应用程序时所在的文件夹

编辑2:
可能的重复建议不适用,因为此处的问题不是如何转储SQL备份。这里的关键问题是,使用mysqldump的备份是通过终端工作的,而不是通过PHP的exec()函数。

从上面的注释来看,问题的解决办法是,PHP请求以具有有限权限的用户的身份在XAMPP中执行,mysqldump进程继承这些权限

通过检查
exec()
运行的进程的退出状态,确认mysqldump以非零退出状态退出,表明它由于某种原因失败

在mysqldump进程尝试写入的目录上打开对777的写入权限,解决了该错误


它还应该足以确定Apache进程的特定uid和gid(检查Apache配置文件(例如xampp home/Apache/conf/httpd.conf)中的
User
Group
配置值)并使输出目录可由该uid或gid写入。

向我们显示所有这些变量的值,或者至少显示
$backup\u file\u位置
您的网页是否作为没有写入sqldumps目录权限的用户在XAMPP中执行?您可以使用可选的第2和第3个参数来捕获输出和退出统计这是PHP的
exec()
的一个缺点:很难捕获stderr输出,这是解决此错误可能需要的。一个解决方法是编写一个运行备份的shell脚本,然后
exec())
您的shell脚本。这样您就有更多的机会在shell脚本中处理stderr输出,记录它或其他任何内容。有关使用
exec()处理stderr的更多提示:@BillKarwin确实,问题似乎出在写入权限上。只使用777进行了尝试。工作正常。谢谢!