ďťż

Blog literacki, portal erotyczny - seks i humor nie z tej ziemi


CGI służy do generowania stron w zalezno?ci od czynników zewnętrzynych np. mozliwe jest zrobienie strony (skryptu) która bedzie miała zupełnie innš zawarto?ć rano, po południu i wieczorem. Oczywi?cie, można pokusić się o to wykorzystujšc JavaScript ale CGI jest tutaj o wiele lepszym rozwišzaniem, sš zastosowania, w których CGI jest niezastapione. Zachęcam goršco do przestudiowania tego kursu, gdyż umożliwi wam tworzenie skomplikowanych stron www zawierajšcych takie elementy jak liczniki, księgi go?ci czy wyszukiwarki (można je tworzyć tylko z pomocš CGI)

Widzę, że wstęp był wystarczajšco zachęcajšcy do zajrzenia do własciwej czę?ci kursu. Efekty takie jak liczniki i inne, które zostanš poruszone w dalszej czę?ci kursu można tworzyć za pomocš np. php, perla ale bioršc pod uwage przeznaczenie tej strony i zainteresowania osób czytajšcych ten kurs zajmiemy się wyłšcznie programami CGI pisanymi w C++.

Hello Work!

Dwoma podstawowymi mechanizmami CGI sš: pobranie informacji od uzytkownika i wysłanie ich użytkownikowi. Zajmiemy się na poczštek tak jak we wszystkich kursach wysyłaniem danych.

Nasz pierwszy program będzie wypisywał na ekranie napis "Hello Work!" (witaj praco). Do zrozumienia tej lekcji będš potrzebne Ci wiadomo?ci z poza zakresu, których tutaj nie przedstawiam:

podstawy HTML
podstawy C++ (należy rozumieć prostš składnię i wiedzieć co to jest standardowe we/wy)

Komunikat, który chcemy wypisać uzytkownikowi jest w formie tekstowej i tak własnie pojawi się u niego na ekranie. Bardzo łatwe, jednak nie plecam pisania programów z tym "zakresem" wiedzy, gdyż w erze multimediów efekty naszej "cięzkiej" pracy zostanš po prostu wy?miane! Zakładajšc, że znasz HTML możesz zaprojektować stronę w html a potem wy?wietlić jš za pomocš CGI.

1.Tworzymy własnš stronę



To jest strona tworzona przy pomocy CGI


Hello Work!



Jeżeli jest w porzšdku to idziemy dalej.

2.Tworzymy program (ja robię to w Borland C++ 4,52) wykorzystujšcy standardowe wyj?cie:

Tworzymy projekt i wybieramy DOS!
Wy?wietlamy zawarto?ć pliku .cpp
i wpisujemy tam program:
#include

void main(){
cout << "Content-type: text/html \n\n"; //- o tym za chwilę
cout << "";
cout << "";
cout << "To jest strona tworzona przy pomocy CGI";
cout << "";
cout << "";
cout << "

Hello Work!";
cout << "";
cout << "";
}

Jak widać program wywala na stdout kod strony HTML. Już jest dobrze, ale co dalej?
Od strony programisty that is all.
Przegladarka "zbiera" to ze stdout i traktuje tak jakby było wpisane normalnie.

Efekt gotowy - do wy?miania :)

Co się dzieje jak przeglšdarka dostanie adres pliku *.cgi?


1.Plik jest uruchamiany na serwerze.
2.Jeżeli przeglšdarka uruchomiła skrypt z formularza to sš przekazywane pola formularza.
3.Program wykonuje swoje zadanie.
4.Dane wygenerowane na standardowe wyj?cie trafiajš do przeglšdarki.
5.Koniec - efekt działania programu jest widoczny na ekranie.

Można powiedzieć, że dla przeglšdarki podanie adresu pliku *.cgi jest równoważne z podaniem adresu *.html, stara się ona otworzyć ten plik tak jak by to była zwykła strona.

To jest koniec lekcji pierwszej, w której poznali?my sposób wy?wietlenia efektów pracy naszego programu.

W lekcji drugiej poznamy, wbrew oczekiwaniom czytelników nie pobieranie danych od uzytkownika, ale od...serwera.

Do tej lekcji powinno się wiedzieć co to sš zmienne ?rodowiskowe.

Załóżmy, że chcemy sprawdzić jakiego portu używa serwer, jakiego protokołu, lub jaki jest adres naszego programu.

Nic prostszego CGI udostępnia nam szereg zmiennych ?rodowiskowych, ograniczę się na poczatku tylko do kilku, reszta będzie umieszczona na końcu kursu.

SERVER_PORT - port serwera
SERVER_PROTOCOL - wspomniany wcze?niej protokół
SCRIPT_NAME - adres naszego pliku
Liczę na pewien zasób wiedzy czytelników, i nie podaje gotowego programu a jedynie wiadomo?ć, jak otrzymać żšdanš warto?ć.

getenv() - jest tym, czego potrzebujemy - zwraca ona tekst, którego spodziewamy się od naszej zmiennej

np.
getenv ("SCRIPT_NAME");
może dać co? takiego - "/cgi-bin/test.cgi"

a
getenv ("SERVER_PORT");
80
Widać więc, że je?li chcemy tylko wy?wietlić zawarto?ć takiej zmiennej to wystarczy użyć cout.

Teraz kolejne zmienne, którym przyjrzymy się bliżej, gdyż sš uzywane odrobinę czę?ciej niż poprzednie:
REQUEST_METHOD - medota przesłania danych do serwera
QUERY_STRING - przesłany string
CONTENT_LENGTH - długo?ć stringa

Czas na odrobinę HTML-a:
Formularz może przesyłać dane na 2 sposoby:

1. Pierwsza metoda czyli GET
Widzieli?my zapewne, jak podczas korzystania z wyszukiwarki natknęli?my się w pasku adresu naszej przeglšdarki na co? takiego "http://szukaj.wp.pl/polska/szukaj.html?szukaj=%22Ala+ma+kota%22&baza=szperacz" - to nic innego jak wedrujace do skryptu dane z naszego formularza (pole w wyszukiwarce).

To jest wła?nie metoda GET. Dane sš doklejane do adresu po znaku zapytania i jak widać trochę "zakodowane".

Metoda GET ma jeszcze jedno zastosowanie - można na stronie zrobic link z adresem np. www.wojek.com/szukaj.html?szukaj=strona1 i bedzie nap odpalał zawsze tš stronę (mozna to wykorzystać, jak chcemy np. umie?cić na stronie godzinę wej?cia /nic innego mi nie wpadło do głowy a to akurat dużo lepiej jest zrobić w JavaScripcie/)

2. Metoda druga POSTem zwana
Tutaj nic nie widać ( może szkoda:) ) bo dane sš dostarczane "po kryjomu". Większe formularze projektuje się przy pomocy metody POST.

Jak wybrać metodę?

Tutaj ucieszš się gryma?ni czytelnicy, możemy sami zdecydować - co wykorzystamy.

Podczas wpisywania w Pajšczku (lub jak robiš to mniej inteligentni - w Wordzie albo Frontpage'u) znacznika form należy wpisać co? takiego:

.......... - [1]
- [2]


action - adres (może być wzgledny) pliku *.cgi
method - wybrana metoda (post,get)
name - nazwa formularza
.......... - własciwa tre?ć formularza (pola, przyciski).
[1] - przycisk, po wcisnięciu którego formularz zostanie przekazany do serwera [2] - znów dla wybrednych - zamiast oblesnego przycisku do wysyłania może służyć ładny obrazek

To na tyle do zobaczenia w 3 cz. - już o odbieraniu.

Lekcja trzecia - halo, odbiór!

Wiemy juz jak wy?wietlać dane, i pobierać zmienne ?rodowiskowe. Spróbujemy teraz pobrać dane] z naszego super formularza:

Dane dostarczone przez użytkownika znajdujš się w zmiennej ?rodowiskowej lub musimy go pobrać oczywi?cie ze stdin. Skšd możemy wiedzieć co wykorzystać? O odebraniu danych decyduje wybrana metoda (post,get). Jeżeli dane sš wysłane za pomocš GET to znajdujš się w zmiennej, jesli za pomoca POST to trzeba będzie je pobrać. Czas na konkrety:

O tym, czy dane zostały wysłane za pomocš GET-a czy POST-a poinformuje nas REQUEST_METHOD. (prawie nigdy nie zachodzi potrzeba sprawdzania jak dane sš wysyłane, przecież wiemy to, z analizy formularza, który jest obsługiwany przez skrypt. Ale je?li z niewiadomych powodów bedziemy zmuszeni do identyfikacji metody to najbliższe kilka linijek okaże się niezastšpione)

getenv("REQUEST_METHOD") daje "POST" lub "GET" i już tylko niezawodny "if".

1.Przypadek pierwszy - łatwiejsza metoda GET

Jeżeli dane sš wysłane GETem to wysłany string znajduje się w QUERY_STRING /getenv()/ i pozostaje jedynie wydobycie z niego interesujšcych nas danych.

2.Przypadek drugi - trudniejsza metoda POST

Jeżeli dane sš wysłane POSTem to znajdujš się na STDIN i należy wczytać je tak jak dane z klawiatury, Mamy tutaj pewnš przewagę nad klawiaturš, znamy z góry długo?ć łańcucha (w GET też można jš uzyskać).

CONTENT_LENGTH zawiera długo?ć naszego łańcucha (UWAGA!!! wszystkie zmienne zwracajš znaki i aby wykorzystać tš liczbę należy przekonwertować jš na int)

atoi() - wykona brudnš robotę.

Teraz przykład pobrania:

cin.get(gdzie,int) // gdzie - wskazuje miejsce przekopiowania stringa, int to liczba znaków do wczytania pobrana wcze?niej (zgodnie z konwencjš get(a,b,c) - a string, b liczba znaków do wczytania, c terminator)

Teraz to tylko wyparsować bo wyglšda trochę jak czary-mary. Ale parsowanie nie jest tylko stosowane w CGI a powszechnie w różnych programach, dlatego wła?nie ważš się losy czy umie?cić parsowanie w kolejnych lekcjach czy pominšć chwilš milczenia i i?c dalej.

W większości książek o programowaniu jest dział w którym nie porusza się składni języka tylko rozważa na tematy związane z programowaniem. Ten kurs aby był pełnowartościowy też musiał zostać uzbrojony w to "narzędzie". Umieszczam je dopiero w cz.4 dlatego, że chciałem aby czytelnicy mogli trochę popisać i stwierdzić, że nie jest to nic trudnego ale większość czytelników (praktykujących) zauważyło to żaden z ich mozolnie tworzonych skryptów nie działa! Nie należy się tym umartwiać gdyż jest to zdrowe i normale! A zaprzęgać nasze skrypty bedziemy w dalszej części kursu.

Dobry smak i inne godne zwrócenia uwagi cechy

Co to jest dobry smak i co ma wspólnego z profesjonalizmem? Profesjonalista z racji ciągłego wykonywania zawodu dopracowuje się "dobrego smaku" widząc wszystkie wady wady swoich tworów usuwa je i z ucząc się na błędach -> (dąży do) doskonałości. Co decyduje jednak o popularności naszych prac? Na pewno nie będzie najlepiej sprzedającą się gra z najlepszą grafiką, wykorzystująca wszystkie nowości OpenGL, dźwiękiem surround i sztuczną inteligencją opartą na systemach eksperckich i przy minimalnych wymaganiach: 800Mhz 256RAM i DVD. Strona internetowa zawierająca zdjęcie pełnoekranowe podstawione jako tło też chyba ubóstwiana nie będzie. Widziałem kiedyś stronę pseudo-rosyjskojęzyczną, której autor za wszelką cenę chciał umieścić wierszyk...cyrylicą. Problem tkwił w ambicjach. Zamiast zastosować odpowiednią stronę kodową (dla podobnych zapaleńców KOI-8r) umieścił limeryk jako...obrazek. Może krytykuję go bezpodstawnie bo celem tego mogła być kompatybilność z przeglądarkami Polaków, którzy nie zainstalowali wspomagania dla tych czcionek. Ale z podstwa grafiki wynika, że czarny tekst na białym tle najlepiej jest zgifować - da to dobrą jakość i mały size, "webmaster" wybrał *.jpg co dało nieczytelny plik o dużym rozmiarze i 16mln "marnujących" się kolorów. Trochę się oddaliłem od tematu tym rozwiązaniem, ale było rzeczywiście amatorskie. Aby uchodzić za profesjonalistę (tak dalej bedzie nazywana osoba, która wie co robi, wie jak to zrobić i jest obdarzona dobrym smakiem) należy być kompatybilnym, oszczędnym, optymalnym i treściwym. Ponieważ kurs tyczy CGI - techniki bezposrednio związanej z tworzeniem stron www dlatego też część rozważań tyczy się samych stron. Jest dużo rzeczy irytujących odbiorców naszych prac, dlatego należy się wystrzegać zbytnich wymagań od sprzętu (nie kazdy przecież ma Athlona), od użytkownika (też nie każdy ma mgr przed nazwiskiem, a i z tymi co mają różnie bywa), nieczytelności naszych prac i błędów (nie tylko programowych ale i ortograficznych) profesjonalista (jako ideał do którego się dązy) jest doskonały i nie pisze "fzhut" gdy chodzi o kierunek geograficzny. Istotą stron www nie jest bombardowanie odbiorcy jpgami 800x600 no może w niektórych wypadkach:) ale niesienie informacji. Nikomu przecież nie będzie lepiej się uczyć z przeładowanej grafiką (najlepiej jak widac ostatnio ruchmą) strony, na której tekst zajmuje waski pasek na środku ciagnący się w gąszczy banerów i napisów traktujących o świetności tego tekstu i jego niezastąpionej przydatności. Skrypty CGI są również narażone na bezmyślność (z dwóch stron). Mogą one generować strony "dopracowane" graficznie a mogą przekazywać samą treść. Czy jako webmaster zastanawiałeś się kiedyś czy czytelnicy wchodzą na twoją stronę obejrzeć galerię ruchomych napisów - raczej nie. W wyszukiwarce przeciez nie pisało:

Twoja.strona.pl - super fajna strona, duże czerwone guziki zmieniające kolor po najechaniu na niebieski!!! Wszystko umieszczone w ramkach, dzięki czemu możesz cały czas to podziwiać. Strona ma podkład dźwiękowy w formacie mp3 dla dobrej jakości - tylko teraz bitrate 512! A po zatym na jednej z podstron jest jakiś kurs CGI.

Jeżeli tak pisze to jesteś rozgrzeszony. Wybaczam (ja i odbiorcy) każdy wielokilobajtowy detal.

Jeżeli nie to czy zastanawiałeś się nad tym w co włożyć wiecej wysiłku - nie żyjemy w baroku, tu liczy się treść.

Ponieważ CGI są programami to narażone są również na błędy języka, lub dawac błędne wyniki. Nikt nie doda twojej strony do często odwiedzanych (unikam podania nazw, gdyż są dwie konkurencyjne i staram się zachować kompatybilność) gdy w dziale matematyka strona podająca wynik równania kwadratowego (przemyśl czy to możliwe) daje błedne wyniki.

Jako profesjonalista wszystko najpierw dwa razy przetestuj zanim to opublikujesz, zawsze bierz zapas na błędy, których nie da się uniknąć. Jak mawia przysłowie - "druty cięte na miarę są zawsze za krótkie".

Skrypt CGI powinien być wolny od błędów, dopracowany, a dopiero potem może robić za wyszukiwarkę na znanym portalu. Ostatnią wymieniona przeze mnie cechą profesjonalisty jest prawidłowy dobór narzędzi. Nikt przecież nie pisze w Basicu systemu operacyjnego. Dobór narzędzi może nie być całkiem bezmyślny niektórzy używają HTML do wysyłania maili albo postów na grupę dyskusyjną - to jest ich sprawa, niech robią co chcą ale genialne to nie jest. C++ nie jest może najlepszym językiem do pisania po stronie serwera ale na pewno bardzo daleko mu do HTMLowych maili. Perl do parsowania tekstu nadaje sie lepiej. Ale według mnie lepiej umieć C++ bardzo dobrze niż kaleczyć w C, PHP, Perlu.

Niedoszły profesjonalista w swoim fachu:
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • qualintaka.pev.pl
  •