Назад | Перейти на главную страницу

mysqldump (с использованием PHP exec) не выгружает файл, но без ошибок

Я не был уверен, был ли это вопрос SO или SF, но я подумал, что это может быть лучшим местом. Прошу прощения, если это не так!

Я использую mysqldump через PHP exec, но, похоже, он не работает. Код, который я использую,

<?php
exec('mysqldump -u DB_USER -pDB_PASS DB_NAME > /tmp/test.sql');
?>

Когда я запускаю этот скрипт, я не получаю ошибок в error_log, но не получаю дамп в / tmp. Я не уверен, чем это вызвано. Я не уверен, что он пытается выполнить дамп в / tmp относительно того места, где выполняется файл PHP, что является результатом, который я ищу, или сбрасывает его в / tmp в другом месте? Или я совершаю еще одну ошибку?

Я нашел решение: запустить команду во вспомогательной оболочке, а затем вывести stderr к stdout. Таким образом, $output хорошо заселен.

то есть:

exec("(mysqldump -u$username -p$password $database $tables > $dump_name) 2>&1", $output, $result);

var_dump($result);
echo "<br />";
var_dump($output);
echo "<br />";

Выход :

интервал (6)

array (1) {[0] => строка (46) "mysqldump: Не удалось найти таблицу:" table_name ""}

Надеюсь, поможет !

Указанный вами путь (/tmp/test.sql) является абсолютным путем, поэтому сценарий работает правильно. Что касается файловой системы linux / определяет корневой каталог, и всегда существует /tmp каталог. Может быть, вам нужно немного времени, чтобы понять Общий обзор файловой системы Linux.

Дерево файловой системы начинается с ствола или косой черты, обозначенной косой чертой (/). Этот каталог, содержащий все базовые каталоги и файлы, также называется корневым каталогом или «корнем» файловой системы.

Что касается сброса файла в относительный каталог, вы можете попробовать использовать ./tmp/test.sql или tmp/test.sql, если tmp каталог находится в текущем каталоге, из которого запускается сценарий.

Вы также можете взглянуть на это: https://stackoverflow.com/questions/17407664/php-include-relative-path