spatie/laravel-backup无法在控制器中调用Artisan命令备份

在项目中想要做数据库备份, 使用了 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就可以了.

如果有帮助到你, 请点个赞吧.

推荐阅读更多精彩内容