Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CGI скрипт с применением SSI, как это можно сделать? 
:(
    Опции темы
MacTep
Дата 12.12.2006, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Нужно написать CGI скрипт, который бы выводил время при помощи технологии SSI. Вот мой код, но он не работает. Подскажите, что не так?
Код

#!/usr/bin/perl -w
print "Content-Type: text/html\n\n";
print "<html>";
print "<br><br><br><br>";
print "<h2 align=center>THIS IS MY <u>SECOND</u> CGI PAGE</h2><br>";
print "<hr width='50%'>";
$data = $ENV{<!--echo var="DATE_LOCAL"-->};
print "Время: $data";



--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
Ramirez
Дата 12.12.2006, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 1
Всего: 5



ээээ.... судя по вашему коду вы пытаетесь сделать все наоборот...

как это обычно работает:

у вас есть html документ с расширением .shtml (обычно), типа:
Код

<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>

<BODY>

Текущее время:

<!--#include virtual="/cgi-bin/date.pl" -->


</BODY>
</HTML>


и есть скрипт date.pl:
Код

#!/usr/bin/perl
print "Content-Type: text/html\n\n";
($mm,$hh) = (localtime)[1,2];
print "$hh : $mm";





PM ICQ   Вверх
MacTep
Дата 12.12.2006, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



А такой конструкцией я разве пользоваться не могу? 
<!--echo var="DATE_LOCAL"-->
Или только в html документах? А в самом скрипте не получится?


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
MaxPayne
Дата 12.12.2006, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 9.8.2005

Репутация: нет
Всего: нет



1) Ты определись что тебе надо - или дата созданий документа или текущее время.
2) Если текущее время, то:
 - на странице вставляешь такую конструкцию: <!--#include virtual="/cgi-bin/jd.cgi"-->
 - сам скрипт jd.cgi выглядит так:

Код

#!/usr/bin/perl
use CGI qw(:all);

($second,$minute,$hour,$day,$month,$year)=localtime;
$year+=1900;
$month++;

print header;
print "$hour:$minute:$second";


Он должен выводить типа "22:00:25". Можете естественно сделать любое размещение инфы.




3) Вот эта конструкция вроде для PHP скриптов <!--echo var="DATE_LOCAL"-->.

Это сообщение отредактировал(а) MaxPayne - 12.12.2006, 17:07
PM MAIL WWW ICQ   Вверх
Ramirez
Дата 13.12.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 305
Регистрация: 18.1.2005
Где: Moscow, ExUSSR

Репутация: 1
Всего: 5



MaxPayne, не путайте человека.

эта конструкция <!--echo var="DATE_LOCAL"-->

для тех случаев когда вы в один файл инклудите другой, и надо передать в него какие-то переменные, например есть шапка header.shtml:

Код

<HTML>
<HEAD>
<TITLE> <!--#echo var="PAGE_TITLE" --> </TITLE>
</HEAD>

<BODY>


и есть, например index.shtml

Код

<!--#set var="PAGE_TITLE" value="ЭТО ЗАГОЛОВОК СТРАНИЦЫ" -->
<!--#include virtual="/includes/header.shtml" -->

а тут идет текст страницы или что угодно...



так вот, когда вы браузером запросите index.shtml, веб сервер включит в него код из файла header.shtml
но сналала он возьмет переменную PAGE_TITLE (обозначенную в index.shtml)
<!--#set var="PAGE_TITLE" value="ЭТО ЗАГОЛОВОК СТРАНИЦЫ" -->

и вставит ее значение в соотв. место в header.shtml

Кстати, конструкция <!--#echo var="DATE_LOCAL" --> выведет текущую дату автоматически без каких либо дополнительных скриптов (если конечно переменную DATE_LOCAL не переопределить), т.к. DATE_LOCAL - это одна из встроенных переменных ssi.

SSI очень удобен например, для вывода повторяющихся элементов кода (ленты новостей например) шаблон новости один, а на странице новостей вы пишете что-то типа:

Код

<!--#set var="NEWS_DATE" value="01.10.2005" -->
<!--#set var="NEWS_TITLE" value="заголовок 1" -->
<!--#set var="NEWS_TEXT" value="текст новости" -->
<!--#include virtual="/ssi/news_item.shtml" -->

<!--#set var="NEWS_DATE" value="28.09.2005" -->
<!--#set var="NEWS_TITLE" value="заголовок 2" -->
<!--#set var="NEWS_TEXT" value="текст новости 2" -->
<!--#include virtual="/ssi/news_item.shtml" -->


т.е. перед каждым включением шаблона news_item.shtml задаются необходимые ему переменные.


MacTep, теоретически, вы может и сможете можете настроить апач таким образом чтобы вывод скрипта потом еще обрабатывался через ssi (не факт конечно, не проверял) и тогда вы сможете использовать в выводе скрипта конструкции типа <!--#echo var="PAGE_TITLE" --> но это будет МЕГА ИЗВРАТ. Зачем тогда перл вообще? Эти переменные предназначены для случая когда вы работаете со статичными шаблонами. 

Вообще, много того, что делается чаще скриптами, для мелких проектов, можно сделать с помощью ssi. Там даже простейшая логика есть:

Код

<!--#if expr="$PAGE_TITLE" -->
<div class="page-title"><!--#echo var="PAGE_TITLE" --></div>
<!--#endif -->


а вообще, http://httpd.apache.org/docs/2.0/howto/ssi.html

Это сообщение отредактировал(а) Ramirez - 13.12.2006, 10:21
PM ICQ   Вверх
korob2001
Дата 13.12.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 13
Всего: 61



Не пойму одного, зачем здесь вообще нужен SSI?  smile 
Код

$date = localtime;  # Если здесь нужно текущее серверное время, всё остальное без изменений

Если же нам нужно какое-нить другое значение, его с таким же успехом можно присвоить переменной и генерировать не тег SSI, а конкретное значение. Ведь страница HTML генерируется программой Perl от начала до конца.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
MacTep
Дата 14.12.2006, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1292
Регистрация: 4.8.2003
Где: г. Самара

Репутация: нет
Всего: 4



Спасибо всем за ответы. smile SSI нужен был для того, что нужно было показать его использование в лабораторной работе. smile Все сделано. Спасибо! smile


--------------------
(A)bort, (R)etry, (I)gnore = Haфиг, Heфиг, Пoфиг ... :)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0471 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.