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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Небольшая проблема с гостевой книгой 
:(
    Опции темы
Shadow_1512
Дата 8.2.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Суть проблемы:
Есть некий сайт, у которого есть гостевая книга. Сайтик работает под Apache 1.3 на Unix-сервере. Все замечательно.
Взяли Windows-сервер, поставили Apache 2 (не бейте меняsmile), скопировали сайтик на новый хост, установили туда Перл, ПХП ну и т.д. Поменяли пути в cgi-файлах - запускаем. В целом, сайт работает как и ранее. Т.е. cgi-скрипты работают, работа с бд как обычно. Но...
Гостевая книга не работает, когда ей отдаешь в одном из полей русские символы. Как только все символы латиницей - все ок, как только русские - беда. Для передачи данных используется GET-метод, используется модуль CGI, функция param, в которую, как я понял, встроены декодировщики данных. В чем прикол? Проблема в том, что модуль писал не я, да и вообще я с перлом знаком слабо, мое основное поле деятельности - PHP. Так что вся надежда на вас. Заранее спасибо.

Код

use CGI;

my $q = new CGI;
my $type = $q->param("type") || 0;
my $add = $q->param("add") || 0;
my $name = $q->param("name");
my $email = $q->param("email");
my $subj = $q->param("subj");
my $text = $q->param("text");
my $ip = $ENV{'REMOTE_ADDR'};


Ошибка, которую в логах апача я нашел -
(22)Invalid argument: couldn't create child process: 22: guest.cgi, referer: *
(22)Invalid argument: couldn't spawn child process: *

Повторюсь - когда форму заполняешь латинскими символами - все ок. А когда все это работало на Unix'e под Apache 1.3 вообще проблем не было.

Криво я перенес что ли или существуют тонкости, о которых я не знаю?
PM MAIL   Вверх
korob2001
Дата 8.2.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Привиди часть кода, где программа разделяется на процессы. Судя по ошибке, она не может создать дочерний процесс.

Это сообщение отредактировал(а) korob2001 - 8.2.2006, 16:06


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


Новичок



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

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



Извиняюсь, что долго молчал - вопрос на некоторое время перестал быть актуальным. Значит что происходит - происходит следующее:
есть некая ссылка, которая ведет на http://somehost.com/guest.html. Содержимое guest.html привожу ниже:
Код

<html>
<head>
<title>Гостевая книга</title>
<!--#include virtual="/ssi/meta.txt" -->
<link rel="stylesheet" href="/main.css" type="text/css">
</head>
<body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0" bgcolor="white">

<!-- No index start 1 -->
<!--#include virtual="/ssi/head.shtml" -->
<!--#include virtual="/ssi/menu.shtml" -->
<!-- No index end 1 -->

<!--#include virtual="/ssi/guest.shtml?$QUERY_STRING" -->

<!-- No index start 2 -->
<!--#include virtual="/ssi/prefoot.shtml" -->
<!--#include virtual="/ssi/foot.shtml" -->
<!-- No index end 2 -->

</body>
</html>


Как можно видеть основным тут является момент, где вызывается guest.shtml?$QUERY_STRING.
Привожу содержимое guest.shtml

Код

<table cellpadding="0" cellspacing="0" border="0" width="783" align="center">
  <tr>
    <td background="/images/vline.gif" width="3"><img src="/images/spacer.gif" width="3" height="3" alt="" title=""></td>
    <td width="177" valign="top"><table cellpadding="0" cellspacing="0" border="0" width="177">
      <tr>
        <td valign="top"><!--#include virtual="/cgi-bin/category.cgi?$QUERY_STRING" -->
              <!--#include virtual="/cgi-bin/lastupdate.cgi" -->
        </td>
        <td width="3" background="/images/afisha/pere2.gif"><img src="/images/spacer.gif" width="3" height="23" alt=""></td>
      </tr>
    </table></td>
    <td valign="top"><table cellpadding="0" cellspacing="0" border="0" width="100%" align="right">
      <tr>
        <td valign="top"><!--#include virtual="/cgi-bin/guest.cgi?$QUERY_STRING" --></td>
      </tr>
    </table></td>
    <td background="/images/vline.gif" width="3"><img src="/images/spacer.gif" width="3" height="3" alt="" title=""></td>
  </tr>
</table>


Здесь есть вызов трех скриптов, которые все не работают после добавления записи в гостевую, когда есть хотя бы одно поле, заполненное кирилицей (хотя несопредственно к гостевой никакого отношения не имеют) и естественно работают на других страницах, на которых вызываются. Нас интересует гостевая....(guest.cgi). Ну так что - если вызывать guest.cgi а вместо $QUERY_STRING вставить ту строку, что добавляется в URL после сабмита формы (в том числе параметры кириллицей), то запись успешно добавляется и все ок.
Стало быть, обломное местно, на мой взгляд именно в вызовах <!--#include virtual="/cgi-bin/guest.cgi?$QUERY_STRING" -->. А вот что тут не так, я, как не специалист PERL сказать не могу. Повторюсь, если все латиницей - все работает!
PM MAIL   Вверх
Shadow_1512
Дата 28.2.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну что, товарищи, неужели действительно сложная проблема и никто никогда не сталкивался?
Или ждать, пока придет всемогущий korob2001 ??
Может он что знает...
PM MAIL   Вверх
sharq
Дата 28.2.2006, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

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



Shadow_1512, возможно проблема заключается в настройках Apache 2!

Возможно еще и такой вариант - добавь эти строки в начало твоих скриптов:
Код

use locale;
use POSIX qw (locale_h);
setlocale(LC_CTYPE, 'ru_RU.CP1251');
setlocale(LC_ALL, 'ru_RU.CP1251');


Если не поможет, привиди код "камня предкновения" (по-твоему мнению), потестируем.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 1.3.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Как ты принимаешь параметры? Как декодируешь их?
Сохрани этот код, в файл guest.cgi и положи его вместо одноимённого файла в каталог /cgi-bin, затем запусти файл guest.html и попробуй передать ему параметры, примерно так:
Код

http://localhost/guest.html?name=Вася&lastname=Пупкин&age=11

или через свою форму.
Код

#!/usr/bin/perl -w
use strict;
use CGI;

my $cgi = new CGI;

print $cgi->header( -charset => "Windows-1251" );

foreach my $key ( keys %{$cgi->Vars()} ) {
     print $cgi->b($key);
     print $cgi->span(" => " . ${$cgi->Vars()}{$key});
     print $cgi->br();
}

Если увидешь в окне браузера преданные параметры, значит они чудно доходят до CGI программы. Потому можешь смело показывать часть скрипта, где ты получаешь и декодируешь полученные данные. У меня параметры успешно дошли до программы CGI.

Это сообщение отредактировал(а) korob2001 - 2.3.2006, 14:23


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


Новичок



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

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




Модератор: Сообщение скрыто.

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


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

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


 




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


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

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