У меня есть страница site.shtml
на сервере Apache, в который я пытаюсь включить несколько сценариев CGI, например:
<p><pre><!--#include virtual="files/testfile" --></pre></p>
<p><pre><!--#include virtual="cgi-bin/randhtml.cgi"--></pre></p>
<p><pre><!--#include virtual="cgi-bin/echo.cgi" --></pre></p>
<p><pre><!--#include virtual="echo.cgi" --></pre></p>
<p><pre><!--#include virtual="cgi-bin/echo.cgi?test" --></pre></p>
В таком случае, files/testfile
текстовый файл, cgi-bin/randhtml.cgi
- это предустановленный исполняемый файл CGI, и оба экземпляра echo.cgi
сценарий:
#!/bin/sh
echo $0;
echo $*;
Все скрипты имеют права доступа 755 и могут выполняться из оболочки, где они ведут себя, как ожидалось (случайный вывод или повторение аргументов).
Когда я пытаюсь загрузить веб-страницу, файл и случайный сценарий выполняются правильно, и я получаю ожидаемый результат. Эхо-скриптов нет, и я получаю ряд ошибок на странице:
This is a test text file.
random
An error occurred while loading this page.
An error occurred while loading this page.
An error occurred while loading this page.
Журнал ошибок содержит только:
unable to include "cgi-bin/echo.cgi" in parsed file /home1/user/public_html/site.shtml
unable to include "echo.cgi" in parsed file /home1/user/public_html/site.shtml
unable to include "cgi-bin/echo.cgi?test" in parsed file /home1/user/public_html/site.shtml
Я тестировал различные другие сценарии, как shell, так и perl, с именами .cgi и .pl (Apache настроен для обработки как сценариев CGI), и все, похоже, выдают эту ошибку. Я дважды проверил разрешения и попробовал их с 777, но безрезультатно. Я написал виртуальные пути как cgi-bin/
и /cgi-bin/
, ни то, ни другое не работает.
Есть ли у меня какие-то ограничения, синтаксическая ошибка или странная проблема с сервером?
Возможно, вам потребуется добавить заголовок Content-type к выходным данным CGI.
Вы уверены, что в ваших журналах ошибок Apache поблизости ничего не отображается? (Вы их просматриваете или смотрите на них без фильтров?) Когда я пытался воссоздать вашу проблему, я вижу такие строки:
[Sun Dec 11 07:27:47 2011] [error] [client 192.0.2.1] unable to include "cgi-bin/echo.cgi" in parsed file /var/data/www/www.example.org/ssi-test.shtml
... но они сопровождаются:
[Sun Dec 11 07:31:39 2011] [error] [client 192.0.2.1] malformed header from script. Bad header=/var/data/www/www.example.org: echo.cgi
Подозреваю, что если добавить:
echo "Content-type: text/html"
echo ""
... в начало вашего скрипта, прежде чем появится какой-либо другой вывод, ваша проблема исчезнет ... или, по крайней мере, эта ее часть исчезнет. :-)