php exec() - mysqldump создает пустой файл
Я хочу создать резервную копию из базы данных, но я получаю только пустой файл.
include('config.php');
$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql";
exec($command);
echo "<br />".$command;
test.sql создается там, где находится файл.php.
Редактировать:
Заметка! Я использую XAMPP WINDOWS!
Решение:
Поскольку я использую веб-сервер Windows (XAMPP), мне нужно было указать путь:
$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql';
- Я убрал пробел между -p и проходом. Это выглядит как:
-pMYPASSWORD
- Заменены
"
с'
Я думаю, что если вы используете веб-сервер на базе Linux, вам не нужно указывать путь для mysqldump.
Ура!:-)
8 ответов
Попробуй это:
$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1';
- о выдаче разрешения.
Это параметры
-uROOT -pPASSWORD - БД БД --result-file=FILE.SQL
Если вы посмотрите руководство для exec, то выходные данные перейдут в массив, который является вторым аргументом. Это может быть источником проблемы.
Вы должны удалить пробел между -p и паролем.
--opt
не требуется с последними версиями mysql.
Кроме этого, ваш синтаксис правильный, поэтому если он не работает с исправлением -p, вам следует проверить параметры и произведенную команду.
Для тех, кто на Mac
Я боролся с этим вопросом весь вечер сегодня. Глупая ошибка: нужно chmod каталог, в который вы выгружаете файл.
Я запустил это, которое решило проблему:
chmod -R 777 your_dump_directory/
Выньте переменные из кавычек и удалите --opt.
Также убедитесь, что у вас есть уникальные имена файлов
$backupfile = $dbname . date("Y-m-d-H-i-s") . '.sql';
$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";
system($command);
Попробуй это:
$DBUSER="user";
$DBPASSWD="password";
$DATABASE="DBname";
$filename = "backup-" . date("d-m-Y") . ".sql";
$command = '"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump.exe" '.$DATABASE ." -u".$DBUSER ." -p".$DBPASSWD." > your_web_site/$filename";
passthru($command);
- Измените маршрут в направлении приложения mysqldump.exe вашего компьютера.
- Соблюдайте " " внутри команды.
Затем принудительно загрузите файл:
if (file_exists("your_web_site/".$filename)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
readfile("your_web_site/".$filename);
exit;
}
Изменить: Вы должны дать разрешения для папки, в которой вы храните копии.