Xpoint
   [напомнить пароль]

Программирование::Технологии CGI и SSI - F.A.Q.

SSI-обработка вывода CGI-скрипта, включенного #include virtual
SSI директивы не обрабатываюся в CGI-сценариях вообще, проще и экономичнее (имхо) открыть этот файл на чтение и вывести его CGI-скриптом.

Как говориться RTFM + мой вольный перевод

-----------------------------------------------------
Apache Tutorial: Introduction to Server Side Includes
What are SSI?
SSI (Server Side Includes) are directives that are placed in HTML pages, and evaluated on the server while the pages are being served. They let you add dynamically generated content to an existing HTML page, without having to serve the entire page via a CGI program, or other dynamic technology.
SSI - это директивы, вставляемые в HTML cтраницы, для указания серверу как формировать эти страницы для вывода. Они позволяют вам добавлять динамическое содержимое в страницы, без использования программ CGI или другой динамической технологии.
Оброзно говоря, директивы SSI указывают серверу, что нужно вставлять в страницу перед отправкой ее клиенту. Указывая < ! -- #include virtual="/cgi-bin/script.cgi" -- >, вы фактически говорите серверу, что в этом месте нужно вставить результат работы скрипта. Сервер вызывает скрипт и вставляет результат его работы в страницу.
CGI-скрипт, возвращает серверу выходной поток, а не формирует некую страницу для сервера. Сервер не может обработать директиву SSI, выданную в выходном потоке скрипта. Употребляя конструкцию вида: print "< ! -- # include virtual=\"/include/topic.html\" -- > "; вы просто напросто "печатаете в окне" браузера эти символы, а не помещаете в HTML-документ директиву для сервера.

Спасибо за перевод получает Дмитрий Горяинов /Gorynych/ :-))

CGI на IIS. После выполнения директивы <--#exec cgi... вместе с результатом выполнения скрипта выводится вот такое сообщение (на webстранице): "HTTP/1.1 200 OK Date: Fri, 28 Sep 2001 11:42:18 GMT Server: Microsoft-IIS/5.0" Как от него избавиться?
HKEY_LOCAL_MACHINE\SOFTWARE\ActiveState\PerlIS EnableCGIHeader [REG_DWORD] -> 0 (по умолчанию - 1) Правда, после этого во всех скриптах, которые не инклюдятся, придется писать print "HTTP/1.0 200 OK\n"; print "Content-type:text/html\n\n" (http://aspn.activestate.com/ASPN/Reference/Products/ActivePerl/faq/Windows/Acti vePerl-Winfaq7.html#My_CGI_scripts_don_t_seem_to_run) Или просто не выдавать хедеры из скрипта.
Где узнать подробнее об SSI?
Apache.Org Docs:
[ http://httpd.apache.org/docs/mod/mod_include.html ]
Основная документация на серверный модуль mod_include.
[ http://httpd.apache.org/docs/mod/core.html#directory ]
Документация по разделу Directory в настройке апача
[ http://httpd.apache.org/docs/mod/core.html#options ]
Документация по директиве Options в настройке апача
[ http://httpd.apache.org/docs/misc/FAQ.html#ssi-part-i ]
FAQ по динамическому выводу контента в Апаче, CGI и SSI - как настроить и как решать некоторые из самых распространённых проблем.
Как передать параметр в скрипт, включенный в html-докумет с помощью SSI директивы #include virtual?
Параметры скрипту передаются так же, как в строке запроса, например < ! -- #include virtual="/cgi-bin/script.pl?a=1&b=2" -- >. Если Вы хотите, чтобы в скрипт попала строка запроса, присутствующая у самого html-документа, нужно написать так: < ! -- #include virtual="/cgi-bin/script.pl?$QUERY_STRING" -- >
CGI-скрипт с помощью SSI не выполняется под IIS.
1. Убедитесь, что ваш скрипт выполняется по прямой ссылке (http://www.server.ru/cgi-bin/test.cgi). Если скрипт не выполняется - то проблема не в SSI.
2. CGI-скрипты под IIS выполняются исключительно директивой #exec cgi. Директива #include virtual включит в страницу исходный текст скрипта.
3. Директива #exec cgi обрабатывается только в файлах, с расширениями, "замапленнными" (закладка "app mappings" в настройках IIS) на ssinc.dll. По умолчанию - .stm, .shtm, .shtml.
4. В директиве #exec cgi необходимо указывать полный виртуальный путь к скрипту. Для скрипта выше соответствующей директивой будет
<!-- #exec cgi="/cgi-bin/test.cgi" -->
Powered by POEM™ Engine Copyright © 2002-2005