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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не работает cgi программа 
:(
    Опции темы
foma07
Дата 22.1.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите ламеру в чем может быть проблема если cgi программка на топсервере 2.1 работает а на хостинге нет. Пути прописаны правильно. Текст программы такой

#!/usr/bin/perl -wT
#antest.cgi
use strict;
use cgi;
$datafile="ank.txt";
sub urldecode{
 local($val)=@_;
 $val=~s/\+/ /g;
 $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
 return $val;
 }
if($ENV{'REQUEST_METHOD'} eq 'GET'){$query=$ENV{'QUERY_STRING'};}
elsif($ENV{'REQUEST_METHOD'} eq 'POST')
  {sysread STDIN,$query,$ENV{'CONTENT_LENGTH'};}
if($query ne ''){
  @formfields=split(/&/,$query);
  foreach(@formfields){
   if(/^famil=(.*)/){$famil=urldecode($1);}
   if(/^im=(.*)/){$im=urldecode($1);}
   if(/^otch=(.*)/){$otch=urldecode($1);}
   if(/^teln=(.*)/){$teln=urldecode($1);}
   if(/^pocht=(.*)/){$pocht=urldecode($1);}
   if(/^ind=(.*)/){$ind=urldecode($1);}
   if(/^strana=(.*)/){$strana=urldecode($1);}
   if(/^obl=(.*)/){$obl=urldecode($1);}
   if(/^gor=(.*)/){$gor=urldecode($1);}
   if(/^ulz=(.*)/){$ulz=urldecode($1);}
   if(/^cons=(.*)/){$cons=urldecode($1);}
   if(/^mytext=(.*)/){$mytext=urldecode($1);}
   }
$anket_str=join '\t',($famil,$im,$otch,$teln,$pocht,$ind,$strana,$obl,$gor,$ulz,$cons,$mytext);
  open DATA,">>$datafile" || print_err("Cannot open $datafile $!");
  print DATA "$anket_str\n";
  close DATA;
}
print "Location: /index.htm\n\n";

Заранее благодарен!
PM MAIL   Вверх
amg
Дата 22.1.2008, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



1. Попробуй закомментировать 
# use strict;

2. use CGI; (CGI заглавными буквами).

Это сообщение отредактировал(а) amg - 22.1.2008, 15:36
PM MAIL   Вверх
foma07
Дата 22.1.2008, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не помогло. Всеравно 500 ошибка.
В логе пишет Premature end of script headers:

Это сообщение отредактировал(а) foma07 - 22.1.2008, 15:43
PM MAIL   Вверх
amg
Дата 22.1.2008, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Вместо use CGI; напиши
use CGI qw(:standard);
print header;
PM MAIL   Вверх
foma07
Дата 22.1.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не хочет работать.
Может ошибка здесь print "Location: /index.htm\n\n";
PM MAIL   Вверх
KSURi
Дата 22.1.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(foma07 @  22.1.2008,  16:13 Найти цитируемый пост)
Может ошибка здесь print "Location: /index.htm\n\n"; 

Попробуй заменить на print redirect('/index.html');


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
biophreak
Дата 23.1.2008, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Прошу прощения за оффтоп, но это жесть smile
Код

   if(/^famil=(.*)/){$famil=urldecode($1);}
   if(/^im=(.*)/){$im=urldecode($1);}
   if(/^otch=(.*)/){$otch=urldecode($1);}
   if(/^teln=(.*)/){$teln=urldecode($1);}
   if(/^pocht=(.*)/){$pocht=urldecode($1);}
   if(/^ind=(.*)/){$ind=urldecode($1);}
   if(/^strana=(.*)/){$strana=urldecode($1);}
   if(/^obl=(.*)/){$obl=urldecode($1);}
   if(/^gor=(.*)/){$gor=urldecode($1);}
   if(/^ulz=(.*)/){$ulz=urldecode($1);}
   if(/^cons=(.*)/){$cons=urldecode($1);}
   if(/^mytext=(.*)/){$mytext=urldecode($1);}

PM MAIL ICQ Jabber   Вверх
amg
Дата 23.1.2008, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Не нравится, что много единообразных строк? Но зато все понятно.
Можно сделать короче и непонятнее, заменив кусок
Код

  @formfields=split(/&/,$query);
  foreach(@formfields){
   if(/^famil=(.*)/){$famil=urldecode($1);}
   if(/^im=(.*)/){$im=urldecode($1);}
   if(/^otch=(.*)/){$otch=urldecode($1);}
   if(/^teln=(.*)/){$teln=urldecode($1);}
   if(/^pocht=(.*)/){$pocht=urldecode($1);}
   if(/^ind=(.*)/){$ind=urldecode($1);}
   if(/^strana=(.*)/){$strana=urldecode($1);}
   if(/^obl=(.*)/){$obl=urldecode($1);}
   if(/^gor=(.*)/){$gor=urldecode($1);}
   if(/^ulz=(.*)/){$ulz=urldecode($1);}
   if(/^cons=(.*)/){$cons=urldecode($1);}
   if(/^mytext=(.*)/){$mytext=urldecode($1);}
  }
одной строкой
Код

  /^(\w+)=(.*)/ and ${$1}=urldecode($2) for split /&/, $query;


PM MAIL   Вверх
Itsys
Дата 23.1.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Попробуй так:
Код

use Strict;
use CGI
my $datafile="ank.txt";
my $query = new CGI;
$query->import_names('R');
$anket_str=join '\t',($R::famil,$R::im,$R::otch,$R::teln,$R::pocht,$R::ind,$R::strana,$R::obl,$R::gor,$R::ulz,$R::cons,$R::mytext);
open DATA,">>$datafile" || print_err("Cannot open $datafile $!");
print DATA "$anket_str\n";
close DATA;
print redirect('/index.html');


Помоему должно работать smile

Это сообщение отредактировал(а) Itsys - 23.1.2008, 18:08
PM MAIL WWW Skype   Вверх
nitr
Дата 24.1.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

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



А вообще какие права на скрипт? smile
Это самая перое что надо было проверить.

Если всё ок, то уберите -wT (на время ;) ). Ну, а далее попробуйте самый простой скрипт CGI. ;)

Удачи!


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


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

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


 




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


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

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