Idiotski vodič za riješavanje Perl CGI problema

Ova stranica se prvenstveno odnosi na Unix i Unix slične sisteme. Ako radite na nečem drugom, poslije čitanja ove stranice, trebate vjerovatno da provjerite i druge Perl FAQs u svakom slučaju.
Ako ste kao većina osoba na Internetu, koja nam predstavlja klasičan CGI problem: "to ne radi", a da nam ne pošaljete dovoljno podataka za provjeru takvog problema onda je to ozbiljna smetnja, zato što izgledate kao neki smiječan idiot koji moli za besplatne savjete i pomoć, a da nije uradio nikakvo istraživanje sa svoje strane. Oni ljudi koji bi Vam inače pomogli, bježe od takvih poruka i to smanjuje moć Interneta pogoršavajući već dovoljne pristune smetnje takvog tipa.

Za početak treba da prođete kroz ovu listu za nekoliko jednostavnih pitanja koja zahtijevaju odgovore. Nekoliko primjer odgovora se nalaze ovde, ali većinu odgovora morate sami da smislite.


Q:
Kome pripadaju programi?
A:
Meni.
Q:
Koje dozvole pristupa imaju programi?
A:
Bili su 0600, ali sada vidim da ne mogu da se izvršavaju. Staviću ih bilje na 0755 umjesto toga.
Q:
Da li je Vaš program u ispravnom direktorijumu?
A:
Ne, zaboravio sam da ga stavim u /usr/local/etc/httpd/cgi-bin/.
Q:
Da li je izvršavanje CGI programa dozvoljeno na tom serveru i za taj direktorijum i za taj nastavak naziva datoteke?
A:
Ne, moj administrator je zaboravio da to tako konfiguriše. Mislio je da je GET sasvim dovoljni i nije uključio POST mogućnosti.
Q:
Pod kojim uid se izvršavaju CGI programi na tom serveru?
A:
wwwuser (Oops, ne može da piše moje datoteke i direktorijume).
Q:
Može li serverov uid da piše bilo koje datoteke koje trebate?
A:
Ne, meni pripadaju datoteke, ali ne pokreću se pod mojim nalogom i dozvole su 0600 umjesto 0666. Mislim da zato datoteke ne mogu da se otvore za pisanje.
Q:
Šta se dešava kada pokrećete datoteke interaktivno?
A:
Nisam znao da ovi programi mogu da se pokreću interaktivno zato što nisam nikada ni pročitao dokumentaciju za CGI.pm biblioteku.
Q:
Šta se nalazi u log datoteci servera?
A:
Nisam se toga ni sjetio. Aha, tu je - onda u redu.
Q:
Gdje se nalazi log datoteka servera?
A:
(Nema načina da se to zna je zavisi od sistema. Provjerite sa Vašim administratorom ako je ne možete naći u /usr/local/etc/httpd/logs/error_log)
Q:
Koja je Perl verzija i OS verzija?
A:
Perl verzija 5.002, SunOS verzija 4.1.3
(Pokušaj koristeći perl -v i uname -a da pronađeš, i ako je tvoj Perl ispod verzije 5.002 da uzmeš ZADNJU VERZIJU!)
Q:
Koja je verzija biblioteke?
A:
grep -i version u biblioteci, ili za CGI.pm, uradi:
$ perl -le 'use CGI; print $CGI::VERSION'
2.21
Q:
Koja je putanja do perl programa na serveru?
A:
/contrib/bin/perl
Q:
Koja je putanja za perl program koja stoji u tvom CGI programu?
A:
/usr/bin/perl (oops, naravno ne može da ga nađe)
Q:
Koja je verzija http servera tako da ljudi koji mogu da ti pomognu, nešto više znaju o lokalnom okruženju?
A:
NCSA 1.5
Q:
Šta se desi kada dodate Perl-ov -w argumenat?
A:
Pokaže mi moje smiješne greškice koje su sve izlistane u detalje u perldiag dokumentaciji i koje sam propustio da nađem.
Q:
Šta se desi kada dodate Perl-ov -T argumenat?
A:
Kaže mi o sigurnosnim problemima, opisanim detaljno u perlsec dokumentaciji, koje sam pažljivo pročitao i razumio. Ja čak čitam i CGI Security FAQ.
Q:
Šta se desi kada dodaš use strict?
A:
To me tjera da deklarišem moje varijable i stavim stringove u navodnik i nađe sve smiješne greškice koje sam ja pažljivo ispravio koristeći my() deklaracije, use vars, i navodnike.
Q:
Je si li zaboravio da izbaciš MIME vrstu prije bilo kojeg drugognon-header izlaza (druga zaglavlja mogu biti Location: ili Set-Cookie:)
A:
Aha, u redu. Prvo treba da bude ispravno zaglavlje, pa onda i ispravan izlaz datoteke. Mislim da sam trebao ovo i prije da kažem, nego što sam u radio: da stavim u stvari dva reda na kraju zaglavlja, ne samo jedan.
    print "Set-cookie: GroversDelight\n";
    print "Content-Type: text/html\n\n";    # <-- dva nova reda
    print "
<head> <title>Neki naslov</title> </head>
Q:
Je si li zaboravio da izbrišeš STDOUT na početku tvoga programa tako da MIME vrsta izađe prije bilo kojih drugih grešaka?
A:
Ne, nije ni čudo da nema izlaza datoteke prije toga! Mislim da je bolje da dodam ovo na vrh datoteke:
 
$| = 1


Q:
Šta se desi kada provjerite vrijednosti od svakog i svakog od Vaši sistemskih poziva?
A:
To mi izgleda kao mnogo posla, ali siguran sam kada dodam nešto kao ovo
open(FILE, ">some_file")
|| die("ne mogu pisatu u datoteku: $!");
onda log greški pokazuje $! sadrži ``Permission denied'' ili ``No such file or directory'', pa mi je sve sada jasno.
Q:
Je si li koristio standardnu CGI.pm modulu da uradiš šta želiš ili si obrađivao podatke ručno (što bi bila stvarno idiotska ideja) ili si koristio nešto ograničeniju biblioteku cgi-lib.pl?
A:
Iii, misliš neko je već uradio ove stvari prije mene? Nisam imao pojma i nisam znao da ne moram sve sam da pravim i da mogu da dobijem zadnju verziju CGI module sa http://www.perl.com/cgi-bin/cgi_mod?modules=CGI.
Q:
Ako si koristio biblioteku, jesi li napisao make install da je staviš u pravilan direktorijum na sistemu (negdje u @INC, vjerovatno nešto kao /usr/local/lib/perl/site_perl/CGI.pm) tako da može pravilno da se nađe i da dozvola pristupa datoteci bude 0644, ili si samo slijepo i ručno kopirao program i tako pokvario putanju, dozvole pristupa ili oboje?
A:
Šta je to "make"? Gledaj, izgleda da sam to (pogrešno) instalirao i na glup način kopirao to sve u cgi-bin direktorijum i da sam to onda napravio sa dozvolom pristupa 0700. Predpostavlja, da to tako uopšte ne radi, je li tako?
Q:
Jesi li se sjetio da pišeš u comp.infosystems.www.authoring.misc, umjesto bombardovanja omp.lang.perl.* grupe sa pitanjima koja se ne odnose na Perl ni najmanje?
A:
Ne - je li zato što ne dobivam korisne odgovore već samo gomilu negodovanja?
Q:
Ako koristiš neki sistem mrtvog-mozga, zavezan i disciplinovani tobože operativni sistem od Zlog Carstva, da li si se potrudio da pročitaš the Windoze Perl FAQ u vezi toga što piše za Web?
A:
Ne, nisam ni znao da ima Perl for Win32 FAQsa Evangelo Prodromou.
Q:
Je si li poslušao savjet da se perl interpreter ne stavlja u cgi-bin kao što si bio upozoren na http://www.perl.com/perl/news/latro-announce.html i sa CERT?
A:
Ne, zašto je to loše? (u pozadini se čuje hard disk kako krklja upravo nakon krađe poslovnih tajni firme sa servera)

Postoji velika vjerovatnoća da ako sami odgovorite na ova pitanja i ako uradite potrebne korake, da ćete vrlo brzo riješiti Vaš problem bez potrebe da molite druge za pomoć ili da se pišate na Internet sa Vašim problemima.

Jednom kada budete temeljno prostudirali SVE od opisanih tema i ako ste pitali sve poznate koji mogu da Vam pomognu, onda možete da idete u grupu (NEWS) i da upišete Vaše pitanje. Morate da budete sigurni da postavite i sve informacije i detalje kao i Vaše moguće odgovore na problem ili na pitanja koja su gore postavljena.

Isto tako, ako većina pitanja koje ovde vidite ni ne počnu da Vam daju neki smisao, onda ste sigurno pretjerano duboko ušli u materiju. Ako je tako, onda je bolje da pričekate sa CGI programiranjem jedno vrijeme. Idi i pronađi za sebe lokalnog gurua i provjeri neke knjige koje su izlistane ovde

http://wwwiz.com/books/cgi-perl.html

IM!HO, Addison-Wesley i O'Reilly knjige su prilično detaljne, ali ima toliko raznih knjiga da je dobro ako i sami potražite u lokalnoj knjižari. Zapamti da debljina knjige ne obećava jasnoću, detaljnost ili ispravnost.


Vrati se na:
Copyright 1996 Tom Christiansen.
All rights reserved.