php system (); функция теряет аргументы при запуске через CGI, но не из Cli - PullRequest
0 голосов
/ 27 июля 2011

При вызове php-файла, который содержит:

<?php system('/bin/sh /usr/local/bin/myScript.sh '.'myArg'); ?>

из cli через php myScript.php все работает нормально, но при выполнении этого через cgi, открывая URL в браузере (apache на заднем плане) myArg Строка теряется.Кто-нибудь знает, что может быть сбоем?

PD: myScript.sh - это просто

echo "$# $*" >> /tmp/foo.txt  

, так что хвост /tmp/foo.txt показывает, что все работает отлично от cli, но не от apacheCGI.Нужна ли какая-либо дополнительная настройка в php.ini?Нужно ли мне что-то особенное в моем файле псевдонимов Apache?Это шутка?

Ответы [ 2 ]

1 голос
/ 27 июля 2011

Убедитесь, что у пользователя, который запускает apache, есть оболочка в /etc/passwd. Пользователь по умолчанию nobody.

1 голос
/ 27 июля 2011

Если ваш код соответствует указанному выше, 'myArg' не будет потерян. Однако, если вы заполняете аргумент динамически, вам нужно убедиться, что вы собираете аргумент таким образом, чтобы он подходил для вызывающего метода.

Когда вы выполняете скрипт через браузер, вы можете собирать аргументы через $_REQUEST, $_GET или $_POST. Когда вы выполняете скрипт через CLI, аргументы будут найдены в $argv.

Если вы убедились, что получили правильное значение для аргумента, следующим шагом является проверка разрешений. Убедитесь, что у пользователя CLI есть разрешения на выполнение команды с указанным аргументом.

...