imitronov

imitronov

Кто я?

Веб разработчик. Работаю с WordPress, 1C-Bitrix, modX, OctoberCMS. Делаю обзоры онлайн сервисов и малоизвестных CMS.


О чем я пишу


Свежие записи

Yii2: MySQL дамп базы данных

Контроллер, который создает дамп и отдает его в браузер для скачивания

На хостинге не должно быть ограничения на использование функции exec()

<?php

namespace app\controllers;

use Yii;
use yii\web\Controller;

class BackupController extends Controller {

    public function actionBase() {

        $mysql_file = Yii::getAlias('@app/mysqldump.sql');
        preg_match('#mysql:host=([^;]+);dbname=(.*)#', Yii::$app->components['db']['dsn'], $dbmatch);
        $db = [
            'host' => $dbmatch[1],
            'user' => Yii::$app->components['db']['username'],
            'pass' => Yii::$app->components['db']['password'],
            'base' => $dbmatch[2]
        ];

        exec("mysqldump --user={$db['user']} --password={$db['pass']} --host={$db['host']} {$db['base']} --result-file={$mysql_file} 2>&1", $output);

        Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;

        header('Content-Type: application/sql');
        header('Content-Disposition: attachment; filename=dump-'.$dbmatch[2].'_'.date('YmdHis').'.sql');
        header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($mysql_file)).' GMT', true, 200);
        header('Content-Length: '.filesize($mysql_file));

        readfile($mysql_file);

    }

}

?>