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.