在项目中想要做数据库备份, 使用了 spatie/laravel-backup 这个包来做处理.
需要在页面上点击一个按钮然后把生成好的数据库压缩包下载下来.
代码如下:
class SystemController extends Controller
{
public function databaseBackup()
{
set_time_limit(0);
// 下载之前先清理以前的备份
Storage::deleteDirectory('backup');
Artisan::call('backup:run', [
'--only-db' => '1',
'--disable-notifications' => '1',
]);
$files = Storage::files('/backup');
$recentFile = array_pop($files);
return response()->download(storage_path('app/public/' . $recentFile));
}
}
在本地运转良好的代码, 到了线上测试环境却报了一个让人摸不着头脑的异常
"The file "/www/wwwroot/storage/storage/app/public/" does not exist"
使用命令行可以进行备份, 通过控制器调用却不行.
最后确定原因是因为线上环境将一些php函数禁用了, 我这里是需要放开 proc_open 这个函数, 之后重启php-fpm, 重启nginx就可以了.
如果有帮助到你, 请点个赞吧.
网友评论