Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 13

Temat: Perl-echo.pl-smthg wrong?

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1

    Question Perl-echo.pl-smthg wrong?

    Witam,
    jestem początkujący jeśli chodzi o perl . Mam pytanie:
    Mam sobie stronke z formularzem i chcę aby po potwierdzeniu np.rejestracji
    stronka przetworzyła zebrane dane z formularza i przedstawiła je na nowej stronie ale ona tworzy strone bez żadnych danych nawet typu print "<p>Witam"; . Co do skryptu jestem pewien jest to raczej popularny skrypt.
    Keidy wykonuje potwierdzenie poprzez <input type="submit">
    Przeglądarks ładuje opcje jak przy downloadzie czy zapisac lub czym otworzyc (ścieżka na początku skryptu się zgadza) więc ręcznie wybieram aby wykonać poprzez perl.exe ale nic niestetypozostaje na tej samej stronie lub błąd że unable do wykonania skryptu CGI.
    Moje pytanie to czy stronka musi znajdować się na serwerze czy wystarczy że mam np. index.html i echo.pl w jednym folderze. Czy kompilator perl.exe również musi znajdować sie w tym folderze. Próbowałem wszystkiego łącznie z umieszczeniem wszystkich tych elementów na serwerze na swoim kompie bez neta (127.0.0.1) i nic. Proszę o pomoc i z góry dziękuję.

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    1. Kazdy CGI czy to w perlu czy nie musi byc serwowany przez serwer www a nie z katalogu. Jesli wiec masz index.html i echo.pl musisz je wrzucic na serwer.
    2. Serwer musi byc skonfigurowany do obslugi CGI oraz wiedziec, ze pliki .pl to tez CGI. Zazwyczaj jako cgi obsluguje tylko .cgi
    3. Skrypt CGI zanim zwroci cokolwiek do klienta musi wyslac naglowek HTTP opisujacy co zawiera zwracany ciag znakow. Dla generowania stron z poziomu CGI przed odeslaniem czegokolwiek do przegladarki (nawet komunikatu o bledzie) trzeba dac:

    Kod:
    print "Content-type: text/html\n\n";
    ... inaczej za kazdym razem dostaniesz blad 500 a w logu bedzie informacja o brakujacych naglowkach.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Lightbulb

    Dzięki za szybką odpowiedź,
    co do punktów 1 i 3 jestem takie próby podjąłem, ale najwyraźniej mam źle skonfigurowany serwer. W takim razie idę to sprawdzić.
    YOU SAVE THE DAY

  4. #4

    Question dalej nic ale ciut lepiej

    No więc w konfiguracji serwera(Xitami) ustawiłem:

    1. CGI aliases dla .pl E:\...(ścieżka do perl.exe)
    2. Pass HTML/form fields oba na tak i domyslnie było:
    using prefix HTTP_/FORM_

    Przeczytałem pól help'a ale nic z tego, następujący błąd mnie nawiedza:
    Bad Request probably tried to post a non-executable URL.

    Oczywiście wszystko znajduje się na serwerze :
    (index.html;folder perl.exe; oraz echo.pl)

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ustaw w systemie aby pliki .pl byly odpalane z uzyciem perl.exe, wtedy jak w serwerze zezwolisz na uruchamianie CGI i okreslisz ze .pl to tez CGI to powinno dzialac. Nie uzywam xitami, wiec nie pomoge - sorry.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  6. #6

    Question Udało się !!! hihi next problem

    Yeppa udało się serwer generuje nową stronę z head'em, tytułem i wszystko cacy, tylko już tu pojawił się następny problem : mianowicie,
    nowa strona nie zawiera żadnych danych z formularza co najwyżej = z polecenia print "$_=$dane_uzytkownika{$_}\n";, jak już wspominałem co do kodu jestem prawie pewien że się zgadza pochodzi z kursu i na necie też jest często pokazywany jako przykład. No nic pozostaje mi tylko dalej szukać... chociaż jakaś wskazówka od eksperta też nikomu nie zawadzi.
    pozdrawiam.

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Pokaz kod to powiem Ci co nie tak
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8

    Post Kod

    Oto kod jakiego używam:

    #!/cgi-bin/perl/bin/perl
    %dane_uzytkownika=&wczytaj_dane();
    print "Content-type: text/html\n\n";
    print "<HTML>\n<HEAD>\n";
    print "<TITLE>Dane po stronie serwera</TITLE>\n";
    print "</HEAD>\n<BODY>\n";
    foreach (keys %dane_uzytkownika) {
    print "$_=$dane_uzytkownika{$_}\n";
    }
    print "</BODY>\n</HTML>\n";

    sub wczytaj_dane{
    local(%dane,$dane,$para_pw,@pary_pole_wartosc,$pol e,$wartosc);

    if($ENV{"REQUEST_METHOD"}eq "post"){
    read(STDIN,$dane,$ENV{"CONTENT_LENGTH"});
    }
    else{
    $dane=$ENV{"QUERY_STRING"};
    }
    $dane=~s/\+//g;
    @pary_pole_wartosc=split(/&/,$dane);
    foreach $para_pw(@pary_pole_wartosc){
    ($pole,$wartosc)=split(/=/,$para_pw);
    $pole=~s/%(..)/pack("C",hex($1))/ge;
    if(defined($dane{$pole})){
    $dane{$pole}.=";".$wartosc;
    }
    else{
    $dane{$pole}=$wartosc;
    }
    }
    return %dane;
    }

    a na www:
    ...
    <form action="http://127.0.0.1/cgi-bin/echo.pl" method="post">
    ...
    <input type="submit" name="akcja" value="Zatwierdzam rezerwacje">
    </form>
    ...

  9. #9

    Domyślnie

    No więc powiem tak,
    dopiero się uczę i strasznie mnie irytuje jeżeli mi coś nie działa i tego nie rozumiem. Chcem chociaż zrozumieć czemu to może nie działać, a o fastCGI jeszcze za dużo niewiem. Byłbym dlatego wdzięczny za informacje o których wspominałeś.
    Gdzie pracujesz jeśli wolno spytać?

  10. #10
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Podejrzewam ze dlatego, ze uzywasz

    Kod:
    if($ENV{"REQUEST_METHOD"}eq "post"){
    ...
    Po pierwsze warunek jest zle zapisany... bo jako metoda jest 'POST' a nie 'post', reszta jest jak na moje oko OK ale nie mam kiedy tego wrzucic i odpalic u siebie, wiec nadal jest to odpowiedz 'na oko'...

    Kod:
    if ($ENV{"REQUEST_METHOD"} =~ /post/i) {
    ...
    W tym wypadku uzywamy wyrazenia regularnego dopasowujacego POST bez patrzenia na wielkosc liter moga wiec byc nawet mieszanej wielkosci (poST, PoST, itd).

    Po prostu w Twoim kodzie warunke nigdy nie zwraca wartosci prawda, dlatego ten kawalek kodu sie nie wykonuje. Aby sprawdzac takie rzeczy polecam:

    Kod:
    use CGI::Carp qw/fatalsToBrowser/;
    ...
    
    if($ENV{"REQUEST_METHOD"}eq "post"){
    warn "IN post...<br>";
    # obslugujemy POST...
    } else {
    warn "IN get...<br>";
    # obslugujemy GET
    }
    CGI::Carp pozwala wypluc ladnie do przegladarki wszystkie linie 'warn' i wszelkie bledy w kodzie... tylko wylacz to zanim polecisz z kodem na serwerze docelowym bo to niezbyt bezpieczne
    Jesli nie uzywasz CGI::Carp to wszelkie polecenia 'warn' zostana zapisane do error.log serwera WWW - mozna wiec sledzic co jest w bebechach aplikacji bez specjalnego przerabiania tego co jest zwracane do przegladarki.

    FastCGI to metoda akceleracji jezykow skryptowych - jesli nie uzywasz mod_php bo nie uzywasz apache'a to mozesz odpalic PHP jako FastCGI czyli takie CGI, ktore po uruchomieniu raz (albo uruchomieniu przy starcie serwera jesli tak ustawisz) bedzie zaladowane, skompilowane i trzymane w pamieci... a jak przyjdzie zlecenie to kod jest po prostu wykonywany - oszczedzasz mase czasu na ladowaniu interpretera i interpretacji kodu... Poza tym FastCGI mozna ustawic ze proces aplikacji ma prawo zyc tyle i tyle czasu i ma prawo obsluzyc max NNNN zlecen, po czym proces jest ubijany i w jego miejsce odpalany jest nowy - wiec takie trywialne sprzatanie ewentualnych pozostalosci w pamieci. Uzywam tego caly czas przy baaardzo roznych zastosowaniach. Najpierw jednak naucz sie pisac dobre CGI - poznej je przyspieszaj (FastCGI - CGI na sterydach hehe).

    Co do tego gdzie pracuje... to raczej nie temat na forum. Jesli poczytasz nieco moich postow bedziesz mial pewien obraz firmy ale nigdzie nie podalem dokladnie czym sie firma zajmuje i nie podam aby nie narazac firmy na niepotrzebne niebezpieczenstwo Tyle atakow ktore teraz mamy juz mi wystarczy - wiecej nie potrzebuje.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. pakiety TCP, UDP, echo, tworzenie i wysyłanie
    By gogulas in forum TCP/IP/Analiza/Badanie
    Odpowiedzi: 22
    Autor: 10-06-2007, 09:34
  2. bot irc PERL
    By jaszu in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 08-01-2007, 08:40
  3. Tworzenie katalogow.perl.foreach.
    By riczard_nikson in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 1
    Autor: 01-19-2007, 21:54
  4. Perl - zamiast hashu wyświelta mi 00000000000
    By TexPac in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 4
    Autor: 07-25-2006, 17:30
  5. Problem z Petla Perl
    By szpuni in forum Perl/Python/TCL/Prolog
    Odpowiedzi: 11
    Autor: 07-03-2006, 15:23

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj