Podstawy języka PHP

Wujek dobra rada.

No więc jak już pewnie gdzieś tam napisałem PHP to język skryptowy server side. Składnia PHP jest identyczna jak w C++, częściowo jest też dostępna składnia basha tak więc powinno wam być łatwo. Jeżeli nie znacie podstaw PHP to zapraszam do manuala lub mojej pracy licencjackiej (obie pozycje w sekcji files do ściągnięcia od ręki). kilka uwag na wstępie:

  • czytaj sporo manuala - nawet jeśli nie korzystasz jeszcze z niektórych funkcji to przejrzyj a będziesz wiedział co można a czego nie.
  • ćwicz dużo ... najlepiej robić jakieś projekty to mobilizuje.
  • uważaj na bezpieczeństwo ... jest po prostu ogrom błędów jakie można popełnić
  • staraj się żeby każdy skrypt był lepszy od poprzednich
  • nie korzystaj z plików txt - używaj bazy danych
  • nie zezwalaj na zapis do plików dla PHP :)
  • ćwicz dużo :)
  • czytaj grupy dyskusyjne, pytaj, szukaj, oglądaj cudze skrypty ... rób wszystko by wiedzieć jak najwięcej.
  • dziel skrypty na sporą ilość plików a w każdym trzymaj funkcje pewnej grupy.
  • staraj się nie używać gotowców - niczego się nie nauczysz !
  • porządkuj kod i rób dużo komentarzy - po 7 dniach zapomnisz o co szło :)

Sorry za te bzdury :)) ale to nie takie do końca głupie.

Co to jest WWW

  • na przełomie lat 80-90 wydzielono cywilną część internetu i zezwolono na komercję
  • powstał standard HTML do opisu dokumentów publikowanych w sieci ponieważ były ogromne problemy z kompatybilnością okumentów

Czym jest HTML

  • jest to język opisu stron internetowych ich formatowania i umieszczania w nich specjalnych elementów jak odnośniki, zdjęcia i inne.
  • HTML nie pozwala na programowanie i nie daje możliwości na tworzenie dynamicznie zmieniających się stron (tylko ruchome napisy marqe)
  • W HTML tekst formatujemy za pomocą "znaczników".
  • Znacznik jest pewnego rodzaju poleceniem (dla przeglądarki) co ma zrobić z tekstem który jest objęty jego działaniem.
  • Znaczniki mogą być jedno i dwu częściowe. <a> lub <b> ...... </b>
  • Znaczniki mogą też przyjmować parametry. Parametry obejmuje się w cudzysłowy i umieszcza w pierwszym znaczniku (jeżeli jest dwuczęściowy) wewnątrz znacznika
  • Znacznik swym działaniem obejmuje wszystko co znajduje się w jego wnętrzu. W przypadku znaczników jednoczęściowych działanie jest w danym miejscu.
  • HTML pozawala też na tworzenie formularzy za pomocą których wysyłamy informacje do servera

Co więcej

  • sam HTML daje tylko wygląd statycznej strony aby tworzyć dynamiczne strony należy wykorzystać jeden z języków skryptowych lub CGI
  • języki wykonywane po stronie przeglądarki działają tak że gdy przeglądarka odbierze całą stronę skrypt jest interpretowany przez interpreter na komputerze klienta. Po stronie serwera jest to tylko plik tekstowy bez żadnego znaczenia.
  • Skrypty takie nazywamy Client-Side
  • Druga gałąĄ to Server-Side czyli skrypty które wykonuje server a klient odbiera tylko wynik działania.
  • Języki server side to PHP, ASP, oraz interfejs CGI
  • Języki client side to Java script, Flash, oraz DHTML
  • Możliwe jest też łączenie skryptów tak że np. serwer generuje kod HTML na podstawie bazy danych i umieszcza w nim (statyczne dla niego) fragmenty JavaScript. Natomiast przeglądarka po odebraniu takiego pliku interpretuje je.
  • Ponadto do tworzenia www korzysta się też z kaskadowych arkuszy styli CSS oraz warstw.
  • Style umożliwiają definiowanie parametrów znaczników tak by można łatwo i jednolicie formatować stronę. Możemy na utworzyć dwa style znacznika <b> gdzie jeden będzie pogrubiony i powiększony a drugi czerwoną czcionką i korzystać z nich w cale stronie HTML

Co daje PHP

  • Składnia pomiędzy c++ java i bash
  • Największa szybkość wśród server-side
  • Dostępność na większość systemów i serwerów www.
  • Ogromna ilość modułów obsługujących większość baz danych, formatów zapisu multimediów i komunikacji
  • Łatwość w pisaniu aplikacji i szeroka gama funkcji i mechanizmów integrujących skrypty z siecią
  • Częste uaktualnienia
  • Otwarta licencja
  • Możliwość darmowego wykorzystywania nawet w profesjonalnych projektach i zastosowaniach
  • Bardzo szerokie środowisko wspierające PHP zarówno programując moduły jak i pisząc same skrypty
  • Funkcjonalność jaką można osiągnąć jest niemal taka jak programując w językach "Visual"
  • Szeroka gama dodatkowych funkcji pracy na zmiennych znakowych, adresach, nazwach itd.
  • Obiektowość
  • Obsługę sesji
  • Bardzo dobra obsługa błędów i dostęp do poziomu ich pokazywania
  • Doskonała dokumentacja !

Wady PHP

  • trzeba bardzo uważać żeby nie pisać dziurawych skryptów
  • trzeba mieć świadomość zagrożeń

Co daje Java Script

  • dostęp do większości parametrów przeglądarki
  • dostęp do kodu strony którą wyświetlamy i możliwość jego modyfikacji na bieżąco
  • dostęp do warstw i stylów
  • możliwość tworzenia efektów graficznych i ciekawych interfejsów dla stron

Wady Java Script

  • brak jednolitej dokładnej i zorganizowanej dokumentacji
  • brak kompatybilności pomiędzy przeglądarkami
  • brak konsekwencji w stosowaniu wielkich i małych liter w nazwach funkcji
  • brak debuggera przez co znalezienie błędów jest nieraz bardzo trudne

CGI

  • CGI jest biblioteką za pomocą której możemy pisać programy (w językach programowania jak c, c++ pascal lub nawet powłoce systemowej) które mają dostęp do danych przychodzących z internetu i mogą tworzyć kod html jaki ma być wysłany do klienta.
  • Jest to atrakcyjne rozwiązanie ponieważ pozwala pisać w takim języku który już znamy
  • Takie "skrypty" (kompilowane programy c) mogą być znacznie szybsze
  • CGI nie daje tak szerokiej gamy narzędzi sieciowych i dostepowych jak PHP ponieważ jest tylko dodatkiem do języków a nie językiem stworzonym właśnie w celu tworzenia serwisów www.
  • Cgi może też być niebezpieczne z punktu bezpieczeństwa ponieważ skrypt wykonuje się z prawami właściciela !

Komunikacja

  • protokół HTTP jest bez sesyjny to znaczy że nie zostaje nawiązane połączenie a każdy dokument jest pobierany osobno.
  • Przeglądarka (lub inny klient HTTP) wysyła do serwera zapytanie o plik np. index.html
  • Server jeśli został poproszony o ten plik i może go wysłać to go wysyła
  • Przeglądarka analizuje odebrany plik i jeśli jest to HTML i są w nim jakieś elementy graficzne lib dĄwiękowe, odnośniki do plików ze skryptami lub stylami to po kolei wysyła prośby do serwera o kolejne pliki.
  • Proces kończy się gdy całość jest odebrana
  • Za pomocą sekcji <head> możliwe jest sterowanie tą komunikacja i pobieranie np. samych nagłówków lub autoryzowanie
  • HTTP posiada dwie podstawowe metody (coś w rodzaju poleceń - operacji) pierwsza to GET
  • GET jest właśnie metodą za pomocą której przeglądarka odbiera pliki z serwera. Pisze adres oraz nazwę pliku i ewentualne parametry. Parametry te są doklejane na końcu adresu
  • Druga metoda to POST za pomocą której przekazuje się większe ilości parametrów i są one dołączane do zapytania tak że nie pokazują się w adresie.
  • Za pomocą tych dwóch metod odbieramy zmienne od klienta

Podstawy HTML

    <html>
    <head>
    <!-- to jest komentarz w html i tu znajdują się pola nagłówka -->
    </head>
    <body>
    <!-- to jest komentarz i tu znajduje się treść strony -->
    </body>
    </html>
  • znacznik html mówi że treścią będzie plik html
  • w sekcji head ustalamy nazwę strony, stronę kodową, słowa kluczowe itd. Ważne są znaczniki:
    <meta http-equiv="Content-type" content="text/html;charset=ISO-8859-2">
    <title> tytuł </title>

    <meta name="Keywords" content=" słowa kluczowe ">
    <meta name="Author" content="Autor Strony">
  • najważniejsza jest strona kodowa dzięki czemu polskie znaki będą poprawnie wyświetlane. Podstawowe znaczniki:
    <b> 				pogrubiony
    <u> 				podkreslony
    <a href="link">nazw</a>		odnośnik
    <p> akapit </p>
    </br> 				zlamanie wiersza
    <img src="obrazek.jpg"> 		obrazek
    <table> 				początek tabeli
    <tr> 				nowy wiersz
    <td> komórka </td>		komórka
    </tr> 				koniec wiersza
    </table> 				koniec tabeli
    <ul> 				poczatek listy
    <li> 				element listy
    </ul> 				koniec listy

Składnia PHP

  • rozróżniamy wielkości liter w nazwach zmiennych i funkcji
  • nawiasy { } są używane do oznaczenie bloku instrukcji. Są traktowane jako jeden element (np. w pętlach) i mogą być używane w (niemal) dowolnych miejscach.
  • Łamanie wierszy jest opcjonalne a spacje i tab-y są pomijane - dowolność w formatowaniu kodu
  • Komentarze
    • komentarz jednego wiersza
          //  komentuje dany wiersz
          # komentarz wersja 2
      
    • komentarz całego bloku
          /*
          komentuje wszystko
          co jest wewnątrz
          */
      
    • komentowanie znaków specjalnych
          \" \'  \$
      
  • nazwy zmiennych nie mogą zaczynać się od cyfr i nie mogą zawierać spacji i znaków specjalnych
  • deklaracja zmiennej może występować w dowolnym miejscu programu - deklaracja nie jest konieczna
  • zmienne w każdej funkcji są oddzielne i "żyją" do momentu zakończenia funkcji

OPERATORY

= Przypisanie
= = Czy równe / przyrównanie
! Zaprzeczenie
!= Czy różne
% Reszta z dzielenia
&& And / logiczne i
|| Or / logiczne lub
> i < Większy i mniejszy
> = i < = Większy równy i mniejszy równy
+= i -= Dodanie wartości po prawej do zmiennej po lewej
$zmienna++ Zwiększenie zmiennej o jeden

Zmienne w PHP ulegają niejawnej konwersji typów !!!

	$i=1; 			//zmienna liczbowa (całkowita)
	$i=1.2; 		//zmienna liczbowa (zmienno przecinkowa)
	$a = "napis"; 		//zmienna łańcuchowa
	$a = "nap"."is"; 	//łączenie ciągów znaków
	$nazwa[$index]=5;	//przypisanie do tablicy

tablice można w PHP indeksować w dowolny sposób nawet ciągami znaków lub nullem. Przyjęta jest indeksacja od 0 wzwyż liczbami całkowitymi wstawienie w 21 element tablicy liczby 7

	$ciag[20] = 7;

IF Instrukcja warunkowa

	if(warunek){blok poleceń;}
	else{blok poleceń;}

Jeżeli warunek wewnątrz nawiasu jest spełniony (patrz wartość różna od zera) to wykonaj wnętrze. Możliwe (nie konieczne jest dodanie else{} wtedy przy nie zajściu warunku wykona się ten blok Np:

	if($zm3==100)
	echo("zm3 ma złą wartość");
	else{
		echo("zm3 ma wartość $zm3 ");
		echo("zm3 ma wartość ".$zm3." ");
		}

SWITCH Instrukcja wyboru

	switch ($zmienna)
	{
		case wartość1 : {blok instrukcji; break;}
		case wartość2 : {blok instrukcji; break;}
		default : {blok instrukcji;}
	}

Wybieramy względem wartości zmiennej co ma się stać. Jeżeli dodamy wewnątrz bloku instrukcji na końcu polecenie break; to pozostałe case-y nie będą już brane pod uwagę, jeżeli nie dopiszemy to wykonają się pozostałe (kolejne) bloki bez względu na to czy spełniają warunek.

WHILE Pętla dopóki prawda

Funkcja powtarzająca blok dopóki zachodzi warunek. Warunek sprawdzany jest przy wejściu do bloku !

	while (wyrażenie_prawdziwe){blok instrukcji;}

DO WHILE Pętla rób dopóki prawda

Funkcja powtarzająca blok dopóki zachodzi warunek. Warunek sprawdzany jest po zakończeniu bloku !

	do {blok instrukcji;} while(warunek_prawdziwy);

FOR Pętla iteracyjna

Powtarza pętle z góry określoną ilość razy (może być określona przez wartości zmiennych)

	for ($i=0;$i<20;$i++){blok instrukcji;}

lub :

	$v=30;
	for ($i=0, $j=0;$i+$j<$v;$j++,$i=+3){printf("ok.");}

inicjalizuje zmienne lokalne dla pętli o nazwach i,j i wartościach 0. Dopóki ich suma jest mniejsza wykonuje pętle za każdym razem zwiększając j o jeden a i o trzy.

Tablice

Tablice wykorzystujemy często więc należy się z nimi oswoić. Są nieocenione przy upraszczaniu kodu.

	$tab[0]="wartość 1";
	$tab[1]="wartość 2";
	$tab[2]="wartość 3";
	for ($index=0;$i<3;$i++)
	{
	echo("wartość $i : $tab[$index]");
	}

Funkcje

	function funkcja_kwadrat($x)
	{
	echo($x*$x);
	}

	function funkcja2($x, $y)
	{
	$z=($x+$y)/2;
	echo("średnia = $z");
	}

w skrypcie wywołanie :

	funkcja2($a,$b);

spowoduje wypisanie średniej arytmetycznej.

Funkcje są jednak bardziej użyteczne gdy coś zwracają (a nie są jedynie procedurami) wiec komenda return (nazwa zmiennej); zwraca jej wartość i natychmiast kończy działanie funkcji.

	function funkcja3($x, $y)
	{
	return (($x+$y)/2);
	}

teraz piszemy :

	$srednia = funkcja3($a, $b);

i mamy wartość średniej w zmiennej $srednia - możemy z nią zrobić co nam się podoba. Można też zwracać tabele

	return array (wartosc1,wartosc2, ...);

Wtedy zmienna do której zwracamy tablice staje się zmienna tablicową.

Zmienne tworzone dynamicznie

Możemy tworzyć lub odwoływać się do zmiennych których nazwy mamy w innych zmiennych, aby zmiennej $jeden przypisac wartosc 4 można wykonać :

	$jeden=2;
	$nowa_zmienna="jeden";
	$$nowa_zmienna=4;

jest to dość nietypowy sposób odwoływania lecz pokazuje elastyczność i możliwości PHP.

	${$zmienna}[1];
	${$zmienna[1]};

pokazuje to jak stosować tablice i jak używać takich zapisów w ciągach znaków "".

Przekazywanie Zmiennych do skryptu

Mamy 4 podstawowe metody przekazania argumentów:

  • w adresie aby przekazać zmienną do skryptu wystarczy wywołując skrypt dodać ąnazwa_zmiennej=wartość np.

    http://adres.com.pl/skrypt.phpązmienna1=20&zmienna2=dziala

    jak widać zmienne łączymy znakiem & Przykład zawartości skryptu skrypt.php

    	<?php
    	echo("uruchomiłeś mnie z parametrami : ".$zmienna1." ".$zmienna2);
    	?>
    
  • w formularzu np:
    	<form action="obsluga.php" method="POST">
    	<input type="text" name="zmienna1"> imię
    	<input type="submit">
    	</form>
    

    Teraz gdy wciśniemy klawisz wyślij zostanie wywołany skrypt obsluga.php z parametrami takimi jak pola formularza. Zostaną utworzone zmienne o nazwach takich jak nazwy pól formularza i będą mieć wartości jak w formularzu.

    Przykład skryptu obsluga.php:

    	<?php
    	echo("wpisałeś w formularzu imię jako ".$zmienna1);
    	?>
    
  • cookie (zaawansowane)
  • sesje (też zaawansowane)

Zmienne Środowiskowe

  • $HTTP_USER_AGENT
  • $REMOTE_ADDR
  • $HTTP_POST_VARS
  • $HTTP_GET_VARS
  • $HTTP_SESSION_VARS
  • $HTTP_COOKIE_VARS
  • $HTTP_POST_FILES

np. wyświetlenie wieku przesłanego formularzem

	echo($HTTP_POST_VARS['wiek']);

Podstawowe funkcje

  • echo(" "); pisze do zawartości strony
  • $tablica = explode("znak","ciag"); rozbija ciąg znaków na kawałki rozdzielone "znakiem"
  • $string = implode("znak", $tablica); łączy wszystkie elementy tablicy wsawiając między wyrazy "znak"
  • $plik = fopen("nazwa", "tryb"); otwiera plik do "r" odczytu "w" zapisu "w+" tworzy plik od nowa i do zapisu
  • feof($plik) zwraca prawdę gdy znacznik jest na końcu pliku
  • $string = fgets($plik, 4096); czyta z pliku ciąg znaków aż do pojawienia się nowego wiersza, końca pliku lub po przeczytaniu 4KB danych
  • fwrite($plik, "string", 1024); do pliku zostanie zapisana zmienna (do końca jeśli krótsza lub do 1024 znaku)
  • fclose($plik); zamyka plik
  • date("format", timestamp); generowanie daty na podstawi formatu
  • time(); zwraca aktualny timestamp
  • $string = md5("string"); funkcja haszująca (tworzy niemal niepowtarzalny wyznacznik ciągu znaków)
  • sleep($ilosc_sekund); wstrzymuje skrypt na czas $ilosc_sekund
  • exit("opis zakończenia"); przerywa działanie skryptu
  • phpinfo(); generuje stronę z opisem konfiguracji PHP
  • system("string"); wykonuje polecenie systemowe
  • printf("format",zmienne); pozwala na generowanie sformatowanego tekstu
  • $string = sprintf("format",zmienne); jak wyżej tylko że ciąg jest kopiowany do zmiennej
  • $int = strlen($string); zwraca długość ciągu

Przygotowanie środowiska

Aby można dostać się do skryptów na serwerze muszą być w odpowiednim katalogu i dostępne do odczytu. Przechodzimy do katalogu domowego

	cd

tworzymy katalog public_html

	mkdir public_html

nadajemy prawa do naszego katalogu

	chmod a+x ~

nadajemy prawa do podkatalogu

	chmod a+rx ~/public_html

pliki dostępne przez stronę muszą znajdować się w public_html wiec zmieniamy katalog:

	cd public_html

aby utworzyć nowy plik piszemy

	touch skrypt1.php

aby był dostępny przez internet nadajemy prawa (będąc w tym samym katalogu):

	chmod a+r skrypt1.php

w tym momencie skrypt.php jest dostępny poprzez adres:

	kolos.math.uni.lodz.pl/~nazwa_konta/skrypt.php

Przykłady:

Pierwszy przykład pokazuje konfigurację serwera

	<?php
	phpinfo();
	?>

Kolejny pokazuje jak stworzyć prosty formularz i przekazywac zmienne z php do strony html i ze formularza do php

	<?php
	//wyswietlamy formularz
	echo("<form method=\"POST\" action=\"waga.php\">
		<input type=\"text\" name=\"imie\" value=\"$imie\"> imie</br>

		<input type=\"text\" name=\"wzrost\"> wzrost (w cm)</br>
		<input type=\"text\" name=\"waga\"> waga (w Kg)</br>
		<input type=\"submit\">
		</form>");

	//jeśli sa dane to obliczmy i wypisujemy
	if($wzrost > 100 && $waga > 0)
	{ 
		echo("<p>");
		echo("witaj $imie przy wzroście $wzrost powinno się ważyć około 
			".($wzrost-100)." Kg</br> natomiast ty ważysz $waga Kg");
		if($waga > $wzrost-100) 
			echo("</br>oznacza to <b>nadwagę</b> ".($waga-($wzrost-100))." Kg");
		if($waga < $wzrost-100) 
			echo("</br>oznacza to <b>niedowagę</b> ".(($wzrost-100)-$waga)." Kg");
		if($waga == $wzrost-100) 
			echo("</br>oznacza to że ważysz dokładnie tyle ile powinno się ważyć
				ale i tak na pewno wpisałeś/aś jakieś bzdury ;)");
	}
	?>

Comments

Post new comment

Image CAPTCHA