Ответ 1
Вы можете получить выходной результат exec function, передав необязательный второй параметр:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);
Ниже приведена команда, которую я пытался выполнить, без успеха:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess');
Когда вы добавляете в конец штамп(), он обнаруживает ошибку:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess') or die('what?!');
Для вышеупомянутого оператора exec() проблема с разрешениями вызывает ошибку, но PHP не отображает ее. Как вы показываете из PHP, какая ошибка возникает?
Вы можете получить выходной результат exec function, передав необязательный второй параметр:
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess',$output);
var_dump($output);
Параметр $output не работает, если вызывающая программа выводит вывод в STDERR.
Лучший способ справиться с этим - перенаправить вывод из exec в файл, а затем отобразить содержимое этого файла, если есть условие ошибки.
Если $cmd содержит команду exec, добавьте что-то вроде этого:
$cmd.=" > $error_log 2>&1"
Затем просмотрите содержимое файла спецификаций в $error_log для получения подробной информации о том, почему команда не удалась.
Также обратите внимание, что если вы отключаете это с помощью и в конце команды, немедленная проверка содержимого $error_log может не показывать информацию журнала - script может проверить/обработать файл перед ОС закончил.
В следующем коде будут отображаться как нормальный выход (из StdOut), так и вывод ошибки (из SdtErr).
exec('ln -s ' . PLUGIN_DIR . '/.htaccess ' . ABSPATH . '/.htaccess' . '2>&1',$output);
var_dump($output);
это сработало для меня: Добавить 2 > & 1 в конец вашей команды.
Видел здесь: php exec() не возвращает сообщение об ошибке на выходе при выполнении команды svn
Приветствия
Это сработало для меня в нескольких сценариях:
ob_start();
exec($cmd . " 2>&1", $output);
$result = ob_get_contents();
ob_end_clean();
var_dump($output);
Пробел между "2 важен
Если вы не нашли ошибку через этот второй параметр, вы можете выполнить поиск журнала ошибок apache, например, в Ubuntu Server 12.10 с помощью команды $ tail/var/log/apache2/error.log Я запускал python script из php, чья ошибка была напечатана только там, и, следовательно, я смог его диагностировать. С наилучшими пожеланиями.
Это не является прямым ответом на ваш вопрос, но очень полезно, если вы хотите знать, что именно произошло с возвращенным кодом ошибки.
Если код ошибки ($ res), возвращается командой:
exec('command', $out, $res);
находился в диапазоне 1-2, 126-165, 255, чем было возвращено оболочкой (например, BASH), вызванной из PHP (для выполнения вашей команды). Если возвращенный код не находится в этом диапазоне, то он был возвращен вашей командой (не оболочкой).
Смотрите (для описания кода ошибки BASH)
https://www.linuxtopia.org/online_books/advanced_bash_scripting_guide/exitcodes.html