У меня есть проблема с оболочкой CGI для PHP. Я очень мало знаю о CGI и PHP как CGI.
Вот что я знаю о системе:
- Солярис 10 на 386
- Suhosin
- PHP обычно работает как CGI, с cgiwrap (http://cgiwrap.sourceforge.net/). Я не могу найти пример wrapper.cgi на сервере для просмотра.
- Общий хостинг (виртуальный хост), поэтому у меня нет доступа к конфигурации Apache. Но админы не помогают. Переключение хостов не вариант.
- Директива опций не может быть переопределена в .htaccess (например, ExecCGI).
.htaccess:
AddHandler php-handler .php
Action php-handler "/bin/test.cgi"
~ / public_html / бен / test.cgi:
#!/usr/bin/sh
# Without these 2 lines, I get an Internal Server Error
echo "Content-type: text/html"
echo ""
exec "/path/to/php-cgi" 'foo.php';
/ бен / foo.php:
<?php
echo "this is foo.php!";
Выход http://mysite.com/bin/test.cgi:
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
Вывод http: / /mysite.com/anypage.php:
X-Powered-By: PHP/5.2.11 Content-type: text/html echo "Content-type: text/html" echo "" exec "/path/to//php-cgi" 'foo.php';
Вещи, которые я отмечаю:
- PHP выполняется, как отмечено в заголовке
X-Powered-By ...
.
- В результатах выводится источник из
/bin/test.cgi
.
- Что бы я ни указывал в качестве второго аргумента
exec
, он не передается в двоичный файл php. Я пытался '-i'
получить phpinfo, '-v'
получить версию ...
- Когда я выполняю
test.cgi
через оболочку, я получаю ожидаемые результаты (аргумент передается php, и он отражается в выводе).
Есть идеи о том, как заставить это работать?
UPDATE
- Похоже, что причина появления источника
test.cgi
была связана с ошибками. Каждый раз, когда происходила фатальная ошибка, либо внутри самого cgi, либо с помощью команды, выполняемой exec
, это приводило к появлению источника cgi.
- В
test.cgi
я могу получить правильный вывод с помощью exec "/path/to/php-cgi" -h
(я получаю то же самое, что и из CLI).