2016-05-19 4 views
0

Я пытаюсь выполнитьPHP - туздЫшпр не работает

exec('mysqldump -u user -pPASSWORD db1 tbl1 > /etc/table1.sql' ,$output, $return_var); 

, а также я попытался,

exec('mysqldump -u user -pPASSWORD db1 tbl1 > /etc/table1.sql'); 

но $ выход пуст и $ return_var 2

У меня есть права доступа пользователя apache в файле /etc/sudoers

#User privilege specification 
www-data ALL=(ALL:ALL) NOPASSWD:ALL 

Также работает на ЦМД

mysqldump -u user -pPASSWORD db1 tbl1 > /etc/table1.sql 

Может кто-то помочь мне следующее?

+6

'WWW-данные ALL = (ALL: ALL) NOPASSWD: ALL'-это * блестящий * идея! – eggyal

+0

Пока я одобрил комментарий Эггьяла, просто для вашей информации это смешно и саркастично. ** Никогда, никогда, никогда, никогда не предоставляйте свой веб-сервер ** root-доступ **! Это рецепт катастрофы, как предоставление взломщику ключа для вашего дома. – Xorifelse

+0

Хорошо, я вижу, и я исправлю это, но я не думаю, что это причина, по которой команда не работает. – Anon

ответ

0

Я бы предпочел опубликовать это как комментарий, а не ответ, но я предлагаю использовать popen, поскольку он может предоставить более полезную информацию, почему ваша команда не работает.

Полная функция подпись:

popen (string $command, string $mode)

Он работает Сорт, как fopen, в том числе режимов. В вашем случае вы, вероятно, захотите использовать 'r' в качестве своего режима. Функция возвращает дескриптор, такой как fopen, и вы можете сделать fread для данных. Не забудьте сделать pclose после того, как вы закончите!

Чтобы захватить любой вывод ошибки (функция возвращает дескриптор, даже если команда не работает), добавьте 2>&1 (включая ведущее место) после вашей команды. Возможно, вы, возможно, впоследствии удалите это, все, что он делает, перенаправляет ошибки на вывод.

Источник:

http://php.net/manual/en/function.popen.php

+0

Я пробовал, но вывод ресурса id 2 ресурс – Anon

+0

Это похоже на попытку конвертировать дескриптор к строке ('print_r' или' var_dump', может быть?). Вам понадобятся 'fread()' некоторые данные или это не будет полезно. Вы должны быть как '$ actual_output = fread ($ whatever_you_assigned_the_results of_popen_to, 1024)'. Попробуй тогда «эхо» и узнай, что получишь, хорошо? – htmlcoderexe

+0

Я уже пробовал '$ read = fread ($ handle, 1024);' и '$ read = fread ($ handle, 2096);' и вывод: _resource id 3 resource_ ** и ** _resource id 2 resource_ соответственно – Anon