Perl и CGI программы
Хостинг Ipipe.ru поддерживает работу CGI скриптов на языке программирования Perl.
Создание CGI скрипта для примера на Perl
При работе в операционной системе Windows, для написания CGI скриптов необходимо использовать любой текстовый редактор с поддержкой подсветки кода для удобства работы. Мы, в данном примере будем использовать программу Notepad++ (бесплатно скачать можно здесь), программу Блокнот от Windows использовать не рекомендуется.
В программе Notepad++ создайте новый файл и введите следующие строки:
#!/usr/bin/perl -w print "Content-type: text/html\n\n"; print "Hello world!";
После, сохраните этот файл с расширением .pl (тип файла: Perl source file).
Первая строка данного кода, указывает путь к интерпретатору CGI скриптов. Остальные, непосредственно исполняемый код.
Загрузка CGI скриптов на сервер
Главное условие загрузки файла скрипта на сервер это загрузка в режиме ASCII . Большинство приличных FTP клиентов позволяют это делать. Также очень важно, устанавливать ваши скрипты в каталоге cgi-bin вашего домена. По умолчанию каталог cgi-bin находится в каталоге html.
Мы воспользуемся популярным FTP клиентом FileZilla (можно скачать здесь). Войдите в вашу учетную запись на FTP сервере (как это сделать, можно узнать здесь). В правой панели перейдите в каталог cgi-bin вашего домена (путь будет выглядеть так: /domains/your-domen.ru/html/cgi-bin/).
В верхнем меню, перейдите в Передача – Тип передачи, и убедитесь что установлен режим ASCII .
После этого, в левой панели, на вашем файле скрипта нажмите правую кнопку мыши и выберите Загрузить на сервер. Файл будет загружен на сервер, далее, уже на правой панели на файле скрипта нажмите правую клавишу мыши и выберите Изменить атрибуты. Необходимо проверить права на ваш CGI-скрипт. Они должны быть установлены в значение -rwxr-xr-x или 755.

Загрузка CGI скрипта завершена, теперь, Вы можете его запустить по адресу your-domen.ru/cgi-bin/test.pl
Подробнее о правах доступа
Значение прав доступа файла определяет тех кто имеет право на редактирование и исполнение файлов. Права доступа файла определяются в CHMOD файле. Права доступа можно изменить большинством популярных клиентов FTP или через, встроенный в панель управления, Web FTP.

Наиболее, часто используемые, уровни доступа к файлам:
600 Файл недоступен
644 Доступ всем для чтения (например, документы HTML )
666 Файл может прочитан и модифицирован (для файлов HTML , изменяемых посредством скриптов)
755 Файл может быть прочитан и запущен кем угодно (например, скрипты)
777 Доступен для записи и запуска кому угодно (не рекомендуется)
Большинство скриптов CGI требуют установки прав 755. Пожалуйста, обращайтесь к инструкции, прилагаемой к скрипту, для получения дополнительных указаний установки.
Ошибки работы скрипта
Для корректной работы, необходимо проверять скрипты перед тем, как помещать их на веб-сервер. Если в скрипте есть ошибки, то, запустив скрипт в unix shell, Вы сможете понять чем недоволен интерпретатор Perl.
Ошибка 403 Если при обращении к скрипту Вы видите сообщение об ошибке 403, это значит, что на скрипт установлены некорректные права доступа. На CGI-скрипты необходимо установить атрибут исполнения (права доступа 755 или -rwxr-xr-x).
Ошибка 500 Если во время запуска своего скрипта Вы видите сообщение о 500-ой ошибке, это значит что в скрипте есть какая-то ошибка из-за которой транслятор Perl’а не может успешно завершить свою работу. Ошибка может быть как синтаксическая (например Вы забыли где-то закрыть кавычку или фигурную скобку), так и логическая, например в результате каких-либо ваших действий происходит деление на ноль.
Информация на данном сайте носит ознакомительный характер и может быть изменена. © 2005-2023 iPipe.ru
Как добавить скрипт perl на html страницу
Сообщений: n/a
Как вставить перл скрипт в html страничку — 27.06.2004, 14:28
hi!Я скачал скрипет аукциона написаный на перле но как вставить его в html не знаю . помогите если сможете.
ответы присылайте на artya@ngs.ru
Thanks
« Предыдущая тема | Следующая тема »
| Опции просмотра |
| Линейный вид |
| Комбинированный вид |
| Древовидный вид |
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Perl скрипт и загрузка страницы
Я хотел бы спросить, как можно написать код веб странички на html чтобы одновременно с загрузкой страницы запускался скрипт?
Отслеживать
7,137 3 3 золотых знака 29 29 серебряных знаков 55 55 бронзовых знаков
задан 25 янв 2012 в 4:47
317 3 3 золотых знака 8 8 серебряных знаков 23 23 бронзовых знака
Скрипт на стороне клиента или сервера? Под IIS и IE это (perlasp на сервере и perlscript на клиенте) можно было делать ещё в прошлом тысячелетии. Ну перловые cgi-скрипты — вообще классика жанра 90х.
25 янв 2012 в 6:10
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Например сделать вызов скрипта загрузкой картинки или как вызов яваскрипта , или на худой конец как iframe < iframe src="http://domain.ru/scrip.pl"> , поля чтобы сделать iframe невидимым — гуглите, я не помню.
Отслеживать
ответ дан 25 янв 2012 в 7:35
54 2 2 бронзовых знака
В зависимости от того, что этот скрипт должен делать: Если он выводит некоторую текстовую информацию внутрь страницы, то можно использовать SSI (узнать больше про SSI в apache), например:
Ограничение SSI — только внутри одного сервера.
Если это какой-то внешний ресурс, например картинка, то в HTML:

Но в этом случае этот ресурс бкдет запрошен только «нормальным» броузером который загружает картинки и роботы (google, yandex) этот скрипт дергать не будут.
Как добавить скрипт perl на html страницу
Perl является интерпретируемым языком, созданным программистом Лари Уоллом (Larry Wall) для обработки больших текстов и файлов и расшифровывается, как Practical Extraction and Report Language (язык для практического извлечения данных и составления отчетов). С помощью Perl вы, например, можете создать скрипт, который открывает один или несколько файлов, обрабатывает информацию и записывает результаты.
С изобретением World Wide Web, Perl оказался прекрасным средством для взаимодействия с web-серверами через Common Gateway Interface (CGI) — общий интерфейс взаимодействия. Команды Perl могут легко получить данные из формы HTML или другого источника и что-нибудь с ними сделать.
Как Perl обрабатывает данные из форм
- добавить их в текстовый файл,
- ввести их в базу данных,
- вставить их в электронное письмо,
- добавить их в существующую web-страницу,
- создать новую web-страницу,
- отобразить их в окне браузера.
Некоторые из этих примеров рассматриваются в нашем уроке.
Как генерируются web-страницы «на лету»
- благодарностью за заполнение формы
- страницей подтверждения с возможностью редактирования
- запросом дополнительных данных
- результатом запроса к базе данных или запроса поиска
Эта возможность обеспечивает истинную интерактивность вашего узла. Такие скрипты позволят web-серверу автоматически реагировать на определенный набор запросов пользователя, предоставляя данные в требуемом пользователем виде.
В чем различие между программой и скриптом?
Перед началом работы с Perl необходимо понять разницу между программой и скриптом. Оба из них используют набор инструкций для выполнения определенного задания, но программа скомпилирована в эффективный двоичный формат, что позволяет ей быстро выполняться на определенной платформе, в то время как скрипт хранится в оригинальном текстовом формате.
За счет того, что скрипты значительно короче программ, они выполняются тоже достаточно быстро.
За счет того, что скрипт не надо компилировать перед запуском он становится замечательным средством для быстрого создания и внесения исправлений в разработку интерактивных частей узла.
Альтернативы Perl
- С, Visual Basic — более традиционные компьютерные языки для обработки вводимых данных. Должны компилироваться под определенную платформу.
- ActiveX — включение программных компонент, выполняющихся в браузере.
- JavaScript, VBScript — обеспечивают некоторую интерактивность HTML страниц, которую HTML обеспечить не может.
- Cold Fusion — сторонняя программа для связи форм с базами данных.
- PHP/FI — еще одна сторонняя программа для связи форм с базами данных.
Несмотря на это Perl на сегодняшний день является наиболее простым и быстрым и в тоже время очень мощным средством придания интерактивности вашему узлу.
Что вам требуется, чтобы запустить Perl
- Скрипт, написанный вами или предложенный вам другим, сохраненный в текстовом файле.
- Perl интерпретатор. Любой Perl скрипт в первой строке содержит путь к этой программе.
- Web-страница с которой будет запускаться этот скрипт. Она может содержать форму или просто ссылку, если скрипт не требует входных данных.
- Web-сервер. Взаимодействие между web-страницей и скриптом производится сервером. Поэтому вы должны иметь доступ к web-серверу с возможностью записи и запуска на нем скриптов.
Где взять Perl
- Общая информация о Perl — http://www.perl.com/perl/index.html
- Perl для UNIX — http://www.perl.com/perl/info/software.html
- Perl для Win32 — http://ntperl.hip.com
Этапы создания скрипта
- Создать форму для вызова скрипта.
- Создать сам скрипт.
- Отладить скрипт. Проверить отсутствие ошибок (если это возможно, лучше проверить все возможные пути выполнения программы).
- Поместить скрипт на сервер и не забыть дать ему права на выполнение.
- Связать скрипт с формой, вставив его имя в параметр action тэга form. Например:
- Убедиться, что скрипт правильно работает вместе с формой.
Основные части Perl скрипта
- Настойка. Первая часть скрипта обязательно запускает интерпретатор и устанавливает переменный, используемые в теле скрипта. Для запуска интерпретатора необходимо знать правильный путь к программе.
- Чтение входных данных. Эта часть «считывает» и сохраняет в переменных входные данные в удобной для обработки форме. Эта часть обычно неизменна во всех скриптах.
- Обработка входных данных. Эта часть соответствующим образом обрабатывает введенные данные. Она может быть простой (около 5 строк) или очень сложной (более 1000 строк) в зависимости от выполняемой задачи.
- Вывод результатов. Пользователь обычно ожидает какого-либо ответа на свои действия. Эта часть достаточно проста в реализации.
Пример скрипта с формой
Рассмотрим теперь описанные нами шаги на конкретном примере. От вас не требуется понимания каждой строки скрипта, все они будут объяснены ниже.
Шаг 1 — Создание формы
Создадим для простоты форму, содержащую всего одно поле и позволяющую пользователю зарегистрировать его имя. Напишем в редакторе следующий текст:
Test Form Введите Ваше имя:
Сохраните файл на диске.
Шаг 2 — Создание скрипта
Предложенный ниже скрипт берет введенные данные, сохраняет их в файле и показывает сообщение, содержащее ссылку на файл с сохраненным именем. Наберите в редакторе текст программы и сохраните в файле testform.pl в каталоге cgi-bin вашего web-сервера. Убедитесь, что первая строка программы содержит правильный путь к программе-интерпретатору (для определения местоположения программы на UNIX воспользуйтесь командой which perl, под Windows выполните поиск файла perl.exe). Убедитесь также, что путь к выходному файлу является корректным путем к области хранения документов web-сервера. В заключение исправьте URL на адрес вашего сервера.
#!/usr/local/bin/perl # ); @pairs = split(/&/, $buffer); foreach $pair (@pairs) < ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $input = $value; > # Save the user output in a file $targetfile = "/usr/local/www/htdocs/names.html"; # >$targetfile"); print NAMEFILE "Имя: ",$input,"
\n"; print NAMEFILE "
\n"; close (NAMEFILE); # Send a message back to the user print "Content-Type: text/html\n\n"; print "
Спасибо, что заполнили форму
\nНажмите "; print 'сюда'; #
Шаг 3 - Тестирование скрипта
Проверив скрипт визуально на наличие ошибок - отсутствие ";" в конце строк, наличие непарных скобок и кавычек и т.п., запустите скрипт для проверки прямо из командной строки, перейдя предварительно в каталог cgi-bin. Вот некоторые примеры того, как это делается:
./testform.pl /usr/local/bin/perl testform.pl c:\perl\perl.exe testform.pl
Если в скрипте содержатся ошибки, то вы увидите сообщение типа
syntax error at testform.pl line 18, near "open" Execution of testform.pl aborted due to compilation errors.
В этом случае проверьте текст около указанной строки. Помните, что причина ошибки может быть выше на несколько, иногда достаточно много строк. Исправленный скрипт сохраните, и тестируйте так до тех пор, пока он не выдаст корректных выходных данных:
Content-Type: text/html Спасибо, что заполнили форму
Нажмите сюда, чтобы увидеть Ваш ввод.
Шаг 4 - Тестирование скрипта с формой
- Убедитесь, что web-сервер запущен.
- Запустите ваш браузер.
- Наберите URL по которому находится ваша форма (обратите внимание, что строка должна начинаться с http://, а не с file://.
- Введите ваше имя в поле формы и нажмите кнопку "Зарегистрировать".
- Вы должны увидеть сообщение вроде этого:
Спасибо, что заполнили форму
Нажмите сюда, чтобы увидеть Ваш ввод.
- Если вы видите правильно сгенерированную страницу, нажмите на ссылку. Вы должны будете увидеть новую страницу, созданную скриптом примерно в таком виде:
Имя: Новиков
Если вы не видите этого, проверьте правильность пути в переменной $targetfile и правильность URL в предпоследней строке скрипта. В противном случае форма и скрипт правильно работают вместе. Вы успешно создали первое web-приложение.
Далее мы рассмотрим четыре части созданного нами скрипта более внимательно.
Обсуждение: Настройка скрипта
Как уже было сказано, первая часть скрипта содержит настройки, включающие в себя несколько элементов. Первая строка определяет путь к программе-интерпретатору:
#!/usr/local/bin/perl для UNIX
или
\Program Files\Perl5\perl.exe для Win32
Также в начале скрипта вы, для удобства, можете разместить комментарий о том, для чего предназначен этот скрипт.
Комментарии могут располагаться в любом месте программы и начинаются с символа #:
# Это комментарий
open (NAMEFILE, ">$testfile"); #Открываем файл для записи.
Также хорошей манерой является определение в начале скрипта всех констант и глобальных переменных. (Советую все пути прописывать в виде переменных, особенно если программа содержит более 50 строк, для удобства изменения местоположения файлов). Например:
$homepage = "http://server_name/home/index.html";
Все обычные переменные в Perl начинаются с символа $. Существует много других видов переменных, таких как массивы и т.п.
Все строки программы кроме первой и комментариев должны заканчиваться на ";".
Обсуждение: Чтение данных из формы
Теперь необходимо "считать" введенные пользователем данные в переменные Perl. После того как пользователь нажмет кнопку Submit в форме браузер посылает серверу имя скрипта и данные, взятые из формы. Данные передаются скрипту на стандартный вход.
В этом случае данные будут посланы скрипту в следующем формате:
user_name=Andy+Novikov&co_name=TeleSputnik&phone=(812)+123-45-67
Perl скрипт должен разобрать эту строку по частям и сохранить в переменных для дальнейшей обработки. Строки, производящие эти действия достаточно стандартны:
read(STDIN, $buffer, $ENV);
Эта строка читает данные со стандартного входа и помещает их в переменную $buffer. Длина строки передается скрипту через переменную окружения CONTENT_LENGTH.
Как только данные помещены в переменную $buffer вы можете разбить их на отдельные переменные с соответствующими им значениями:
@pairs = split(/&/, $buffer);
Теперь мы получили массив @pairs со следующими строковыми переменными:
[1] user_name=Andy+Novikov
[2] co_name=TeleSputnik
[3] phone=(812)+123-45-67
Теперь нам необходимо разбить эти строки на пары параметр-значение:
foreach $pair (@pairs) < ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; # заменяем плюсы на пробелы $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; $input = $value; >
Таким образом вы получаете массив переменных, индексом в котором является значение параметра name поля формы, а значением - данные, введенные в соответствующее поле.
Обсуждение: Что делать с данными?
Следующим шагом является обработка данных. Но как? Все зависит от того, что вы хотите сделать с данными. В нашем примере мы на основе полученных данных создаем новый HTML документ. Нише мы рассмотрим несколько простых примеров того, что можно сделать с полученными данными. Обратите внимание, что мы не предпринимаем попыток проверить правильность (validate) содержимого полей. Хотя в реальных скриптах это является желательным, а иногда и необходимым действием.
Обсуждение: Запись в файлы
Одно из действий, которое вы можете совершить над данными, это записать их в файл. Perl предоставляет набор функций для открытия, обработки и закрытия файлов. Таким образом вы можете создать новый HTML документ, добавить данные в уже существующий HTML документ или сохранить данные в текстовом файле для дальнейшей обработки.
Функция открытия файла выглядит следующим образом:
open (HANDLE, "name"); # Открыть файл для чтения open (HANDLE, ">name"); # Открыть файл для записи open (HANDLE, ">>name"); # Открыть файл для добавления в конец
HANDLE является любым временным именем, который вы будете использовать как идентификатор файла при проведении операций. Как только файл открыт, вы можете писать в него, используя функцию print:
print HANDLE "Этот текст будет помещен в файл как есть.\n"; print HANDLE "В этом случае переменная ",$variable," будет помещена в текст."; print HANDLE "Переменную $variable можно помещать в текст и так.\n"; print HANDLE "Кавычки и др. Спецсимволы \; надо \"подсекать\".\n";
После завершения операций с файлом необходимо его закрыть:
close (HANDLE);
После этого все записанные данные будут сохранены на диск.
Перед осуществлением запись в файл, вы должны убедиться, что web-сервер имеет доступ к директории, в которой находится файл и имеет права на запись в этот файл.
Обратите внимание: функция close должна располагаться как можно ближе к последней функции записи в файл. Это обусловлено тем, что web-сервер выполняется в многопользовательской среде, и скрипт может запускаться одновременно несколькими пользователями. При открытии файла на запись он (файл) блокируется и другие экземпляры скрипта не смогут его открыть, что вызовет задержку в выполнении запроса.
Пример: Создание новой HTML страницы
Следующий пример может показаться на первый взгляд сложным, но все что он делает, это пишет некоторую информацию в файл.
В связи с тем, что мы создаем web-страницу файл содержит тэги HTML вместе с обычным текстом. Помните, что \n просто вставляет перевод строки в текст для удобства последующего просмотра созданного файла.
Все входные данные из формы содержатся в переменных $input. При печати такие переменные должны выноситься за кавычки и отделяться запятыми.
# Определяем переменную, содержащую путь к записываемому файлу $newfile = "c:\webserver\htdocs\mynewpage.html"; # Открываем файл, используя идентефикатор USERINFO open (USERINFO, ">$newfile"); # Формируем содержимое print USERINFO "\n\n"; print USERINFO "Информация о регистрации \n\n"; print USERINFO "\n\nДанные регистрации:
"; print USERINFO " \n
\n"; print USERINFO "Имя: ", $input,"\n
"; print USERINFO "Компания: ", $input,"\n
"; print USERINFO "Телефон: ", $input,"\n
\n \n"; print USERINFO "\n\n\n"; # Закрываем файл close (USERINFO);
Пример: Добавление в конец файла
Запись в существующий файл проста, когда вы хотите добавить новую информацию в конец файла. Например, для добавления данных о новом пользователе в созданный выше файл вам потребуется следующий скрипт:
# Определяем переменную, содержащую путь к записываемому файлу $targetfile = "c:\webserver\htdocs\mynewpage.html"; # Открываем файл, используя идентификатор NEWINFO open (NEWINFO, ">>$targetfile"); # Добавляем новые данные в файл: print NEWINFO "\n\n"; print NEWINFO "Имя: ", $input,"\n
"; print NEWINFO "Компания: ", $input,"\n
"; print NEWINFO "Телефон: ", $input,"\n\n \n"; close (NEWINFO);
Пример: Добавление в середину существующего файла
Более сложной задачей является вставка новых данных в середину файла. Обратите внимание, что в первом примере мы вставили в файл линию комментария, выглядящую следующим образом:
Этот комментарий будет служить нам меткой места, в которое нужно вставлять новые данные. Данный пример содержит не совсем изящное решение, но прост в реализации и понимании. Он использует временный файл, хотя можно обойтись и без него:
# Определяем переменную, содержащую путь к исходному файлу $origfile = "/pathname/originalfile.htm"; # Определяем переменную, содержащую путь к временному файлу $newfile = "/pathname/newfile.htm"; open(INFILE, "<$origfile"); open(OUTFILE, ">$newfile"); while ($line = ) < printf OUTFILE $line; if ($line =~ //i) < # Добавляем новые данные в файл: print OUTFILE "\n\n"; print OUTFILE "Имя: ", $input,"\n
"; print OUTFILE "Компания: ", $input,"\n
"; print OUTFILE "Телефон: ", $input,"\n\n \n"; > > # Закрываем файлы close(INFILE); close(OUTFILE); # Удаляем исходный файл и переименовываем новый в исходный unlink($origfile); rename($newfile, $origfile);
Пример: Отправка данных по e-mail
Иногда вам может потребоваться, чтобы данные введенные в форму были посланы по некоторому адресу электронной почты.
Для этого вам потребуется программа посылки почты с интерфейсом командной строки. Под UNIX это может быть sendmail или mail. В данном примере данные посылаются с помощью программы sendmail. Вместо записи в файл мы используем запись в специально открытый канал (pipe):
# Адрес e-mail $sendto = "webmaster\@telesputnik.ru"; # Открываем канал open (MAIL, "| /usr/bin/sendmail $sendto") # Печатаем в канал в специальном формате print MAIL "From: Web-сервер\n"; print MAIL "To: $sendto\n"; print MAIL "Subject: Ввод новых данных"; print MAIL "Кто-то воспользовался формой для ввода новых данных"; print MAIL "Вот что он ввел:"; print MAIL "Имя: ", $input,"\n"; print MAIL "Компания: ", $input,"\n"; print MAIL "Телефон: ", $input,"\n "; # Посылаем письмо, закрывая канал close (MAIL);
Обсуждение: Создание web-страниц "на лету"
Последней важной частью Perl скрипта является посылка результата обратно пользователю. Это достигается тем же print, но без идентификатора файла или канала. Все, что печатается на стандартный выход формирует текущий документ в окне браузера. Например:
print "Content-Type: text/html\n\n"; print "\n\nСпасибо \n"; print "\nСпасибо за заполнение формы
"; print "Мы получили ваше имя, место работы и телефон,"; print " которые вы видите ниже:
\n"; print "Имя: ", $input,"\n
"; print "Компания: ", $input,"\n
"; print "Телефон: ", $input,"\n\n \n"; print "\n";
Обратите внимание на первую строку. Эта строка содержит информацию о типе возвращаемых данных. Двойной перевод стоки при этом обязателен. Эта страница будет возвращена пользователю почти сразу после нажатия им кнопки Submit.
Учтите, что это всего лишь один из многих примеров того, какой может быть страница "на лету". В принципе вы можете формировать HTML документ любой формы и содержания.
