ru en uk

  авторизация

(044) 362 48 16   (098) 294 41 60


   Цены

Пример 1


Чтобы понять как работает CGI создадим два примитивных примера, которые запустим на Виндовзе. Для начала убедимся что Апач понимает CGI, для этого найдем примерно такие строчки, и если их нет, то создадим:
ScriptAlias /cgi-bin/ "C:/apache/www/cgi-bin/"
<Directory "C:/apache/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

Потом запустим Борланд Паскаль и напишем такую програмку:
uses dos;
var i:integer;
begin
writeln('Content-type: text/html');
writeln;
writeln('This is an example of CGI program.');
writeln('Here is list of environment variables available for you');
writeln('<pre>');
For I:=1 To EnvCount Do WriteLn(EnvStr(I));
writeln('</pre>');
end.

Скомпилируем её (Alt+F9 или Ctrl+F9) и поместим файл *.exe в папку C:/apache/www/cgi-bin/. Потом откроем броузер и введем адрес
http://localhost/cgi-bin/example.exe?var1=value1&var1=value2

Появится список доступных переменных окружения. Теоретически даже на Паскале можно писать программы любой сложности, но для настоящего проекта его инструментарий явно захудалый.

Пример 2


Создадим командный файл run.bat
@echo off
echo Location: /cgi-bin/example.exe

Когда вызвать
http://localhost/cgi-bin/run.bat

то всё что он выведет - это редирект на программу из Примера 1.

Итоги


Итак, мы увидели, что CGI программа может запускаться веб-сервером (Апач, IIS) двумя способами:

  • Это исполняемый файл и он запускается как есть, весь результат возвращается назад броузеру. Перед запуском в переменные окружения помещаются некоторые значения.
  • Это интерпретируемый (пакетный) файл, запускается ассоциированная с ним программа и, в качестве параметров,- пакетный файл. Таким способом работают PHP и Perl, если установлены как CGI.

Откуда веб-сервер знает как запускать программу


Это сильно отличается на Виндах и *никсах.

  • На Виндах веб-сервер смотрит расширение файла (это обычно все последние символы до первой точки с конца). Если это *.exe или *.com то файл запускается как исполняемый. Если это *.bat (и *.cmd на WinNT) то запускается коммандный интерпретатор DOS command.com (cmd.exe на WinNT) с файлом в качестве параметра. Если веб-сервер IIS, то можно также запускать и *.dll программы. Если файл имеет другие расширения, то веб-сервер сначала смотрит в свою конфигурацию (httpd.conf etc) нету ли там зарегистрированных расширений. Если нету, то дальше он смотрит в реестр Виндоуз. Apache делает это только в случае если установлена директива
    <b>ScriptInterpreterSource</b> registry

    Если вышеуказанный параметр не выставлен (по-умолчанию он стоит в
    <b>ScriptInterpreterSource</b> script

    ), то он предпринимает попытку прочитать первую строку файла и найти там т. зв. вводную строку (shebang line):
    #!c:/program files/perl/perl

    которая указывает чем нужно обрабатывать файл.
    Если ничего не найдено, выводится ошибка.
  • На сервер *nix исполняемые файлы как правило начинаются с символов .ELF Такие файлы могут сразу обрабатываться ядром ОС. В противном случае расширение файла ищется в настройках сервера (httpd.conf, .htaccess). Если его там нет, ищется вводная строка как и на виндах. Если на виндах имеется только один встроенный интерпретатор (command.com), который не очень подходит для написания веб-приложений, то *nix'ы предлагают широкий выбор шеллов (семейство shells): Bourne-shells, C-shells, Korn-shells со всеми их последователями.

На WinNT и *nix, кроме того, исполняемые файлы должны быть помечены как такие, т.е. текущий пользователь должен иметь права на исполнение (chmod 700 etc).

 
Блокировка файлов
29.05.2007
"Warning! On most operation systems flock() is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock() to protect files against other PHP scripts running in parallel threads of the same server instance!"
Как отослать почту
29.05.2007
Если Вам нужно послать сообщение администратору, пользователю, сделать рассылку, отправить отчет по електронной почте, то проще всего это сделать с помощью встроенной функции mail()...
Введение в PHP5
29.05.2007
PHP5 ещё официально не вышел, но "рабочие" версии уже трудоспособны (равно как и нестабильны!), так что мы вполне можем начать изучение новых возможностей грядущего релиза PHP и попрактиковать с ними. В этой статье мы поговорим о трёх основных нововведениях в PHP5

 

Rambler's Top100