Я играю с резервным скриптом для mysql. Вариант этого работал, но я не смотрел его с php4. Он возвращает пустой файл. Странно, что если я перейду в командную строку и использую ТОЧНУЮ ту же команду, я получаю файл, который я ожидаю.
Я ткнул по интернету и ничего не нашел … мысли?
Плохой код?
$db_host='localhost'; $db_user='root'; $db_pass='root'; $db_name='gakkou'; $dir='backups'; $file_list=scandir($dir); if(count($file_list)>10) unlink($dir.'/'.$file_list[2]); //delete old file $prefix=date("YmdHi").'_'; $command='mysqldump -u'.$db_user.' --password="'.$db_pass.'" --databases '.$db_name.' | gzip > '.$dir.'/'.$prefix.'_backup.sql.gzip'; exec($command,$output,$return_val);
Это отлично работает: mysqldump -uroot -proot -hlocalhost gakkou > /webdocs/gakkou/backups/mysql_backup.sql
и это точно так же, как и команда php-файла (кроме имени файла).
EDIT: обновляется рабочим кодом для всех, кто интересуется. Это оказалось двумя отдельными вопросами. Используя MAMP, мне нужно было указать путь /Applications/MAMP/Library/bin/mysqldump
. Затем на производственном сервере сумасшедший пароль замаскировал работы.
ОК. Наконец-то выяснилось. Мой супер глупый пароль возился с mysqldump, потому что в нем было «&». Не нужно было менять пароль. Я просто вложил пароль в круглые скобки: --password="'.$db_pass.'"
Теперь он работает так, как ожидалось. Так много часов потрачено впустую … @MarcB, большое вам спасибо за вашу помощь. Не знал, как вернуть ошибки, и это определенно был самым большим препятствием.