PHP не может выполнить какую-либо внешнюю команду?
Мы перешли со Slackware на CentOS, здесь все работало нормально, без предупреждения php прекратил выполнять внешние вызовы, такие как "wc" и "spamc". Все такие вызовы появляются в error_log как:
sh: / usr / bin / spamc: в доступе отказано
Пути верны. У нас правильно установлены разрешения, и Apache должен без проблем выполнять файлы. Мы НЕ на Safe_mode, и у нас нет установленного base_dir. Это не SELinux, или, по крайней мере, sestatus говорит, что SELinux отключен.
резюме:
- PHP не может выполнить что-либо через exec() или popen()
- Пути к двоичным файлам верны.
- Мы не в безопасном режиме
- У нас нет установленного base_dir
- Разрешения на двоичные файлы позволяют пользователю Apache выполнять их
- SELinux отключен
- на php.ini параметр disable_functions пуст
- Мы понятия не имеем, почему это не работает
PHP версии 5.3.3 и CentOS 5.5
Кто-нибудь знает, что может происходить? заранее спасибо
2 ответа
Нашел ошибку.
Например, я пытался выполнить / usr / bin / tidy, папка usr имела разрешение 644, что сродни любовному ужасу в моей книге. Я мог работать, потому что я был root.
Я понял это после того, как сошел с ума и решил проверить разрешения для всех компонентов пути команды от корня / папки до двоичного файла tidy, я обнаружил, что все разрешения установлены правильно, но перманенты папки usr были полностью испорчены.
Это исправлено.
Разрешения?
Это хиты разрешений... имейте в виду
"Отказано в доступе" может быть в любом месте пути, а не только в файле, который вы вызываете. Посмотрите также на "/ usr / usr / bin" и "/".
PHP
Это также может быть связано с тем, что php не скомпилировал что-то, что ему нужно. Можете ли вы включить strace и попробовать снова?
чтобы сделать это - вам нужно будет остановить / запустить apache / exim (или что-то еще) с включенным strace:
strace -f -o trace.txt /etc/rc.d/init.d/servicename start
Вообще это Apache кстати
strace -f -o trace.txt /etc/rc.d/init.d/httpd start Теперь просто попробуйте снова запустить функцию
Поскольку опция "-o" сохраняет результат в файл "trace.txt", давайте продолжим и посмотрим @ этот файл:
cat trace.txt | grep "/usr/bin/spamc"
Это должно позволить вам увидеть намного лучший журнал и намек на то, что происходит
Убедитесь, что вы выключили эту полоску - иначе журналы станут очень большими