【发布时间】:2015-12-15 19:34:50
【问题描述】:
我正在使用 exec() 执行 mysql-dump,但它在 apache 上生成一个空文件,但是当我使用“php artisan serve”时,文件生成正确,输出文件具有相同的用户和组apache 和工匠服务。
使用:Ubuntu 14.04 和 Xamp 5.6.12
$dir = substr(__DIR__, 0, 24).'database/backups/';
$newBackup = Backup::create();
$command = 'mysqldump -uroot lions > '.$dir.$newBackup->getDateTimeString().'.sql';
exec($command);
【问题讨论】:
-
回显 $command 看看它是什么,检查文件夹是否可写,应该有遗漏的地方
-
该命令与“工匠服务器”完美配合并生成正确的文件(带有数据),但是当我在 apache 中尝试时只生成一个空文件并且该文件夹是可写的,因为该命令会创建文件但不是数据(0 字节)
-
尝试从
exec获取输出和退出代码并记录它们,以便查看命令是否成功运行。只需使用exec($command, $output, $exitCode);。也许这与用户权限有关,因为artisan serve命令将拥有您的用户权限,而另一个将拥有 Apache 的权限。 -
这意味着找不到文件。而不是 mysqldump 尝试使用完整的 PATH
-
退出代码 127 表示 找不到命令。正如@72DFBF5BA0DF5BE9 建议的那样,您应该尝试使用
mysqldump二进制文件的完整路径运行该命令。你可以通过运行locate mysqldump找到路径(如果你在 Ubuntu 上,那可能是/usr/bin/mysqldump)。