Я создал команду резервного копирования, которая работает из cmd без каких-либо проблем. Ниже приведен исходный код команды:
use Illuminate\Console\Command;
class BackupDBCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mysql:backup';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Backup the database';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//
$username = env('DB_USERNAME','root');
$password = env('DB_PASSWORD','');
$dbname = env('DB_DATABASE','dbname');
$filename ='public/backups/'. $dbname.'-' . \Carbon\Carbon::now()->toDateString() . '.sql';
exec('C:/xampp/mysql/bin/'.'mysqldump -u'.$username.' '.$dbname. ' > ' . $filename);
$this->info('Your backup is being saved to the root directory ' . $filename);
}
}
Но когда я хочу выполнить эту команду из контроллера, она не работает для меня. Файл журнала и сообщение показывают результат вывода, который гласит: «Ваша резервная копия сохраняется в каталоге root public / backups / dbname-2020-03-09. sql». Исходный код контроллера:
public function create()
{
try {
// start the backup process
Artisan::call('mysql:backup');
$output = Artisan::output();
// log the results
Log::info("Backpack\BackupManager -- new backup started from admin interface \r\n" . $output);
//dump($output);
// return the results as a response to the ajax call
//Alert::success('New backup created');
return redirect()->back();
} catch (Exception $e) {
//Flash::error($e->getMessage());
return redirect()->back()->with(["error"=>$e->getMessage()]);;
}
}
Почему не создан файл резервной копии?