Одна и та же команда дампа MySQL на cli и PHP возвращают разные - PullRequest
1 голос
/ 07 июня 2019

Сценарий PHP 5.5.9 и MySQL 14.14 установлены в Ubuntu 14.

Возьмите следующую команду mysqldump

mysqldump -h myhost -u myuser -pmypassword --lock-all-tables mydb mytable --where="foo = 3" > /mypath/mydump.sql

При запуске вручную в командной строке возвращает 0 (как и ожидалось, согласно https://serverfault.com/questions/249853/does-mysqldump-return-a-status тоже)

>mysqldump -h myhost -u myuser -pmypassword --lock-all-tables mydb mytable --where="foo = 3" > /mypath/mydump.sql
>$?
0

При программном запуске через PHP

$cmd = mysqldump -h myhost -u myuser -pmypassword --lock-all-tables mydb mytable --where="foo = 3" > /mypath/mydump.sql
var_dump(exec($cmd));

возвращается

127

Какая разница?

Спасибо

1 Ответ

2 голосов
/ 07 июня 2019

Посмотрите документацию для PHP: exec :

Возвращаемые значения

Последняя строка из результата команды. (...)

То есть exec() возвращает не возвращаемое значение команды, а последнюю строку ее вывода, т. Е. Все, что команда выводит на свой стандартный вывод.

Чтобы получить возвращаемое значение, вы должны использовать аргумент return_var.

return_var

Если присутствует аргумент return_var ..., то в эту переменную будет записан статус возврата выполненной команды.

Так что вам нужно изменить код на что-то вроде:

...
exec($cmd, $output, $return_var);
var_dump($return_var);
...

(И правильно указывать строковый литерал в присваивании $cmd.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...