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 Web Server (XAMPP), мне нужно указать путь:

 $command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql'; 
  1. Я удалил пространство между -p и проходом. Это выглядит так: -pMYPASSWORD
  2. Заменено " с помощью '

Я думаю, что если вы используете веб-сервер на базе Linux, вам не нужно указывать путь для mysqldump.

Ура! 🙂

Solutions Collecting From Web of "php exec () – mysqldump создает пустой файл"

Это параметры

-uROOT -pPASSWORD –databases DB -result-file = FILE.SQL

Попробуй это:

 $command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql 2>&1'; 

– о проблеме разрешения.

Если вы посмотрите на руководство для exec, выход будет передан в массив, который является вторым аргументом. Это может быть источником проблемы.

Вы должны удалить пробел между -p и паролем.

--opt не требуется с последними версиями mysql.

Кроме этого, ваш синтаксис правильный, поэтому, если он не работает с -p fix, вы должны проверить параметры и подготовленную команду.

Возьмите переменные из кавычек и удалите –opt.

Также убедитесь, что у вас есть уникальные имена файлов

$backupfile = $dbname . date("YmdHis") . '.sql';

$command = "D:\xampp\mysql\bin\mysqldump -u $_user -p$_pass $_db > $backupfile";

system($command);

Для тех, кто находится на Mac

Сегодня я борюсь с этой проблемой весь вечер. Глупая ошибка: нужно chmod директорию, в которую вы сбрасываете файл.

Я запустил это, чтобы устранить проблему:

 chmod -R 777 your_dump_directory/ 

Попробуй это:

 $DBUSER="user"; $DBPASSWD="password"; $DATABASE="DBname"; $filename = "backup-" . date("dmY") . ".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; } 

Изменить. Вы должны предоставить разрешения для папки, в которой вы храните копии.