Скрипты на PERL, некоторые особенности запуска и передачи параметров

Вся "прелесть" PERL заключается в возможности создавать динамические страницы на основе внешней разнообразной информации. А это можно сделать только через обработку входных параметров.

Немного теории:

Скрипт читает данные полученные методом POST, GET и из хеш-массива %ENV{}.

GET - запрос применяется для получения данных указанных в URL.

POST - то же, что и GET, но содержит данные передаваемые в теле запроса.

Хеш-массив %ENV{} содержит такие элементы, как имя программы сервера, версия CGI-интерфейса, корневая директория страниц и т.д.

Практика:

Необходимо запустить PERL скрипт из HTML страницы и передать ему параметры указав их в URL.

Решение:

Начнем с того, что страничка должна исполнять SSI директивы. Как правило эти странички имеют расширение .SHTML.

Далее необходимо запустить PERL скрипт. Сделать это можно двумя способами. Точнее одной из двух директив:
Первая: <!--#exec cgi="myscript.pl"-->
Вторая: <!--#include virtual="myscript.pl"-->

Названия, надеюсь, говорят сами за себя.
Первая - исполнить скрипт.
Вторая - включить (вставить), но не скрипт, конечно, а результат его работы.

И до тех пор пока Вы не передаете скрипту какие-то данные, разницы в работе этих директив не видно.

А что происходит, когда скриптом необходимо обработать данные переданные методом GET, то есть в строке URL?

Скрипты запущенные директивой <!--#exec cgi="myscript.pl"--> видят данные, указанные в строке URL безо всяких проблем.

А вот директивой <!--#include virtual="myscript.pl"-->, нет. То есть эти данные нужно принудительно "подсунуть" в вызов скрипта. И делается это следующим образом: <!--#include virtual="myscript.pl?$QUERY_STRING" -->.

А к чему собственно написана статья? Ну используй <!--#exec cgi="myscript.pl"--> где нужны данные из URL, и <!--#include virtual="myscript.pl"--> где нет!

Но дело в том, что все Хостеры настоятельно рекомендуют использовать для вызова скриптов именно директиву <!--#include virtual="myscript.pl"-->. А недавно я наткнулся на сервер, где директива <!--#exec cgi="myscript.pl"--> просто не исполнялась.

Яндекс.Метрика