Я не был уверен, был ли это вопрос 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