следующее прекрасно работает в командной строке для пользователя xyz:
/opt/local/bin/phantomjs --version 1.9.1
Но, в PHP, с тем же пользователем (xyz), я получаю код ошибки 5
exec('/opt/local/bin/phantomjs --version', $o, $r) echo $r
Я использую MAMP, и exec () нормально работает нормально. Если кто-то знает, как отлаживать это, я бы очень благодарен!
Спасибо Амалу Мурали за то, что он указал мне в правильном направлении!
Это описано также в команде exec () для mac osx возвращает 5 и может быть исправлено путем отмены настройки DYLD_LIBRARY_PATH.
Будет работать следующая команда:
exec('unset DYLD_LIBRARY_PATH ; /opt/local/bin/phantomjs --version', $o, $r) echo $r
Ура,
Альберт.
Перенаправить вывод, добавив 2>&1
в конце вашей команды, например:
exec('/opt/local/bin/phantomjs --version 2>&1', $o, $r); var_dump($r);
2>&1
говорит, что посылает стандартную ошибку, где всегда перенаправляется стандартный вывод. См. Этот ответ для получения дополнительной информации.
Вероятно, это проблема с переменными окружения. Общей проблемой с macports является использование «запаса» apachectl, который поставляется с OSX (расположенным в / usr / sbin / apachectl), а не с macports apachectl, расположенным в / opt / local / apache2 / bin / apachectl.
В большинстве случаев версия запаса будет работать правильно. Однако только версия macports установит правильную среду (например, используя / opt / local / apache2 / bin / envvars и правильно установив DYLD_FALLBACK_LIBRARY_PATH.
Если вы используете sudo apachectl
для управления apache, скорее всего, вы используете версию apachectl.
Вы можете удалить его (или переименовать его в /usr/sbin/apachectl.orig) и symlink вместо версии macports:
mv /usr/bin/apachectlapachectl /usr/bin/apachectlapachectl.orig ln /opt/local/apache2/bin/apachectl /usr/bin/apachectl
Если у вас по-прежнему возникают проблемы, вам может понадобиться изучить глубину в переменных среды, используемых apache (и, таким образом, переданных php).