gpt4 book ai didi

php - Laravel exec() 产生一个 mysql-dump 空文件

转载 作者:可可西里 更新时间:2023-11-01 08:28:35 25 4
gpt4 key购买 nike

我正在使用 exec() 来执行 mysql-dump 但它在 apache 上生成了一个空文件,但是当我使用“php artisan serve”时文件生成正确,输出文件具有相同的用户和组apache 和 artisan 服务。

使用: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);

最佳答案

好的,我在使用 Laravel 5.6 和运行 Windows 时遇到了同样的问题。首先,您应该确保包含密码参数(--password-p),即使它是空的。

$cmd =
"mysqldump -h " . env('DB_HOST') .
" -u " . env('DB_USERNAME') .
" -p\"" . env('DB_PASSWORD') . "\"" .
" --databases " . env('DB_DATABASE');

主要问题是,尽管有几个消息来源指出 exec 会一直等到进程完成,但没有办法确定这一点,撇开这一点不谈,因为进程可能由不同的用户拥有如果您创建一个临时文件然后将输出数组的内容闪入其中而不是希望 mysqldump 为您完成这件事,可能会更好。

$output = [];
$name = "your_random_file_name.sql";

exec($cmd, $output);

$tmppath = tempnam(sys_get_temp_dir(), $name);
$handle = fopen($tmppath, "w");
fwrite($handle, implode($output, "\n"));

最后,将主文件写入您想要的位置,在我的例子中,我将其直接上传到 Amazon S3 bucket,然后关闭临时文件。

Storage::disk('myS3bucket')
->putFileAs("backups", new File($tmppath), $name);
fclose($handle);

我知道这似乎是多余的,但正如我上面提到的,没有办法确定。

关于php - Laravel exec() 产生一个 mysql-dump 空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32655624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com