Настройка выполнения Perl сценариев (CGI), PHP и SSI

archive view archive save

dev-languagens По умолчанию в предустановленном вебсервере "Apache 1.3.x" под "OpenBSD 4.9" выполнение Perl сценариев (CGI) запрещено. Для разрешения выполнения Perl сценариев нужно для начала скопировать каталог "/var/www/cgi-bin/" в "/var/www/htdocs/cgi-bin/". В каталоге "/var/www/htdocs/cgi-bin" по умолчанию содержатся файлы Perl сценариев без расширения и с нулевыми правами на выполнение (тобишь запрещено): bgplg, printenv, test-cgi

Теперь все по порядку... Сразу после установки владельцем каталога/файлов "/var/www/htdocs" является "root:daemon" и/или "root:bin" и имеет права 755/644. Первым делом сменим владельца (хоть это и не обязательно):

chown -R www:www /var/www/htdocs

Теперь добавим к файлам, что в каталоге "/var/www/htdocs/cgi-bin/", расширение ".pl" и установим на каталог "/var/www/htdocs/cgi-bin/" и на лежащие в нём файлы права 750 или 755 иначе будет ошибка "500 Internal Server Error", после чего отредактируем файл "vi /var/www/conf/httpd.conf" и поправим строки 610-629, 767 до такого состояния:

...
LoadModule include_module modules/mod_include.so
...
# 610-629
#
# ScriptAlias: This controls which directories contain server scripts.
# ScriptAliases are essentially the same as Aliases, except that
# documents in the realname directory are treated as applications and
# run by the server when requested rather than as documents sent to the client.
# The same rules about trailing "/" apply to ScriptAlias directives as to
# Alias.
#
ScriptAlias /cgi-bin/ "/var/www/htdocs/cgi-bin/"
 
#
# "/var/www/cgi-bin" should be changed to whatever your ScriptAliased
# CGI directory exists, if you have that configured.
#
<Directory "/var/www/htdocs/cgi-bin">
    AllowOverride None
    Options +ExecCGI
    Order allow,deny
    Allow from all
</Directory>
 
# строка 767
AddHandler cgi-script .pl .pm .cgi

ПРИМЕЧАНИЕ: Права 750, на каталог "/var/www/htdocs/cgi-bin" и файлы в нём, будут более безопасными нежели 755!

Если при выполнении Perl сценариев (CGI) возникает ошибка HTTP 500 (Internal Server Error) тогда измените "Options +ExecCGI" на "Options ExecCGI".

Настройка включения на стороне сервера (SSI - Server Side Includes)

Несложный язык для динамической «сборки» веб-страниц на сервере из отдельных составных частей и выдачи клиенту полученного HTML-документа. Реализован в веб-сервере Apache при помощи модуля mod_include. Включённая в настройках по умолчанию веб-сервера возможность позволяет подключать HTML-файлы, поэтому для использования инструкций файл должен оканчиваться расширением .shtml, .stm или .shtm

По умолчанию в предустановленном веб сервере "Apache 1.3.x" под "OpenBSD 4.9" выполнение включения на стороне сервера (SSI - Server Side Includes) отключено и для его включения следует отредактировать в файле "vi /var/www/conf/httpd.conf" строки 769-773 до такого состояния:

#
# To use server-parsed HTML files
#
AddType text/html .shtml .shtm .stm
AddHandler server-parsed .shtml .shtm .stm
 
<Directory "/var/www/htdocs">
    Options Indexes FollowSymLinks +Includes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

Для каждого хоста которому нужно разрешить выполнение включения на стороне сервера (SSI - Server Side Includes) следует указывать "Options +Includes". Более подробная информация о SSI на оффициальной странице справки.

Основные команды SSI (Server Side Includes):

  • config — устанавливает формат сообщений об ошибках, дат и размера
  • set — устанавливает значение переменной
  • printenv — выводит список переменных окружения
  • echo — вставляет значение переменной
  • flastmod — вставляет дату и время изменения файла
  • fsize — вставляет размер файла
  • include — вставляет содержимое другого файла
  • if, elif, else, endif — условные операторы

Настройка выполнения PHP сценариев

По умолчанию в предустановленном веб сервере "Apache 1.3.x" под "OpenBSD 4.9" PHP сценарии выполняются только файлах с расширением ".php" но, нам для полноценного хоста этого не достаточно и мы расширим спектр расширений файлов в которых будут обрабатыватся PHP сценарии. Для этого нам достаточно подправить строку 757 до такого состояния:

RemoveHandler .html
AddType application/x-httpd-php .html .htm .xhtml .xht .xml .php .phtml .php3 
.php4 .php5 .phps

Мы убрали расширение ".html" из обработки его сервером "Apache 1.3.x" и добавили его в обработчик РНР, теперь в HTML/XHTML файлах с расширением .html, .htm, .xhtml, .xht и .xml будут обрабатываться РНР сценарии.

Совместное использование PHP и SSI

Для совместного использования сценариев PHP и SSI (SSI - Server Side Includes), в PHP сенариях следует использовать функцию "virtual()" следующим образом:

<?php 
    virtual("ssi.shtml");
 

или:

<script language="php">
    virtual("ssi.shtml");
</script>

Первый способ, , наиболее предпочтительный, потому как он допускает использование PHP в коде, который соответствует правилам XHTML/XML

Функция virtual() предназначена для работы в среде сервера Apache и является эквивалентом конструкции <!--#include virtual...-->, используемой в mod_include. Эта функция выполняет подзапрос Apache. Она бывает полезной в тех случаях, когда вам нужно включить в свой скрипт результат выполнения других CGI программ или скриптов или обработки сервером Apache .shtml файлов. Имейте в виду, что CGI скрипты должны создавать корректные CGI заголовки. Как минимум, CGI скрипт должен создавать заголовок Content-type. Если вы хотите включить в скрипт PHP файлы, используйте функцию include() или функцию require(); функция virtual() не должна использоваться для включения файлов, которые сами по себе являются PHP скриптами.

Для включения сторонних файлов, а также PHP сценариев в файлы (.shtml .shtm .stm) в которых выполняется SSI (SSI - Server Side Includes) следует использовать директиву:

<!--#include virtual="script.php"-->
<!--#include virtual="content.xhtml"-->
<!--#include virtual="content.txt"-->

Обработка XHTML

Для обработки XHTML (Extensible Hypertext Markup Language — расширяемый язык разметки гипертекста) файлов с расширением .xhtml, .xht, .xml нам не требуется совершать дополнительные манипуляции ибо веб сервер "Apache 1.3.x" в "OpenBSD 4.9" и так в курсе о этом типе файлов и обрабатывает их без каких либо проблем.

По стандартам W3C, XHTML документы должны выдаваться с MIME-типом application/xhtml+xml. "Apache 1.3.x" в "OpenBSD 4.9" знает об этом и отдаёт файлы имеющие расширение .xhtml, .xht, .xml с MIME-типом application/xhtml+xml но, некоторые версии IE не могут правильно обрабатывать файлы с MIME-типом application/xhtml+xml и вместо открытия предлагает сохранить их на диск. Для таких случаев, чтобы для IE файлы имеющие расширение .xhtml, .xht, .xml выдавались с MIME-типом text/html, а для всех остальных с MIME-типом application/xhtml+xml есть такой изврат с использованием mod_rewrite:

RewriteEngine on
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml [OR]
RewriteCond %{HTTP_ACCEPT} "application/xhtml\+xml *; *q=0"
RewriteRule \.xhtml$ - [T=text/html]

Потому как по умолчанию для .xhtml-файлов MIME-тип application/xhtml+xml, мы проверяем есть ли в заголовке Accept такой тип и, если нет, заменяем тип на text/html.

Ссылки по теме:

Автор: Олег Головский


Об авторе
Иван Шаман
Меня нет ни в Инстаграмме ни в Фейсбуке, я просто хожу по улицам и рассказываю первым встречным: сколько зарабатываю; с кем дружу; где живу и чем дышу. У меня даже появилось несколько подписчиков: ПСИХоЛОХ и участковый полицай!
Ещё статьи автора
Комментарии в блоге
Новое на форуме