background image

PHP

PHP: Hypertext Preprocessor

background image

PHP: Hypertext Preprocessor

• Jest to język programowania 

osadzany w 

HTML

składniowo podobny do 

C

Perla

Javy

• PHP to język programowania 

przeznaczony dla programistów WWW 

pozwalający na szybkie tworzenie 
dynamicznych aplikacji WWW

background image

Prosty przykład kodu PHP 

• <html>

<head>

<title>Prosty przykład kodu 

PHP</title>

</head>

<body>

<?php

echo "Witajcie w PHP!" ;

?>

</body>

• </html>

background image

Preprocesor PHP

• Preprocesor PHP wykonuje cały kod zawarty 

pomiędzy znacznikami 

<?php

?>

umieszczonymi w kodzie HTML i zwraca wynik 
w postaci tekstu. 

• Kod ten jest wykonywany na serwerze WWW a 

nie na kliencie. 

• Przeglądarka nie wie, że do stworzenia strony 

był używany PHP. 

background image

Dlaczego PHP

• PHP  jest  pełnowartościowym językiem 

programowania.

• PHP współpracuje z wieloma systemami 

baz danych.

• Możliwy jest również dostęp do usług 

sieciowych takich jak IMAP, POP3, NNTP 

i TTP.

• PHP może być użyty we wielu 

konfiguracjach serwerów. 

background image

Wolne oprogramowanie

• www.php.net

przechowuje kod źródłowy i 

skompilowane moduły PHP.

• PHP jest dostępne na różne platformy.
• PHP można uruchomić z lini poleceń.
• PHP może działać w modelu CGI
• Istnieje wiele dobrych bibliotek funkcji.
• Można programować obiektowo.

• PHP nie wymaga opłat licencyjnych

background image

Konfigurowanie PHP 

• Konfigurowanie PHP zostaw 

administartorowi systemu.

• Jeśli sam jesteś administratorem:

– zapoznaj się dokładnie z dokumentacją
– pomyśl o jakiejś polityce bezpieczństwa
– przeanalizuj 

php.ini

– dostosuj 

php.ini

– jeśli to nie wystarczy, kompiluj PHP z 

własnymi opcjami.

background image

Sposoby oznaczania bloku kodu 

PHP w HTML 

• <?

echo "użycie krótkich znaczników PHP 

do wyjścia z trybu HTML<br>"; ?>

• <?php

echo "wyjście przy użyciu pełnych 

znaczników PHP<br>"; ?>

• <script language="php">

echo "niektóre edytory HTML nie 

obsługują instrukcji przetwarzania<br>";

• </script>

• <%

echo "można stosować również znaczniki 

w stylu ASP<br>"; %>

background image

Komentarze w PHP 

<?php

echo "Witaj świecie!<br>";  

//

To jest jednowierszowy komentarz w 

stylu C++

/*

To jest wielowierszowy 

blok komentarza  

*/

echo "Witamy ponownie.<br>";  

#

To jest komentarz w stylu skryptów 

Uniksa

?>

<?php

/* Poniższa linia spowoduje wypisanie "To wyświetli

nic."

*/

?>

To wyświetli <?php # echo "coś"; ?> nic.<br>

<?php

/*

echo "A tutaj mamy problem."; /* Komentarz ten jest

nieprawidłowy */

*/

?>

background image

Typy

• liczby zmiennoprzecinkowe, 
• liczby całkowite, 
• ciągi, 
• tablice 
• obiekty 

Typ zmiennej jest ustalany w oparciu o 
kontekst w jakim jest użyta zmienna i nie 

jest on jawnie ustalany przez programistę

background image

Liczby — całkowite i 

zmiennoprzecinkowe 

• <?php

$int1 = 523;  // liczba dziesiętna

$int2 = -523;  // dziesiętna ujemna

$int3 = 

01013;  // ósemkowa reprezentacja liczby 523

$int4 = 

0x20B;  // szesnastkowa reprezentacja liczby 

523

$float1 = 523.197;  // zwykły zapis liczby 

zmiennoprzecinkowej

$float2 = 5.23197e2;  // notacja naukowa liczby 

zmiennoprzecinkowej

/* Wypisanie wszystkich liczb.  

Wyświetla "523, -523, 523, 523, 523.197, 523.197". 

*/

print( "$int1, $int2, $int3, $int4, $float1, 

$float2<br>" );

• ?>

background image

Ciągi 

• Ciągi w PHP są ograniczane apostrofami (

'

) lub 

cudzysłowami (

"

). 

• Jeżeli ciąg jest otoczony cudzysłowami, zmienne 

zapisane w ciągu zostają zamienione na ich 

wartości. 

• Ciągi mogą być łączone przy użyciu operatora 

kropki 

(

.

). 

• Podobnie jak w języku C, mamy dostęp do 

poszczególnych znaków ciągu, traktując go jak 

tablicę znaków

background image

Zasady konwersji

• Jeżeli ciąg zaczyna się od danych 

numerycznych, zostaną one skonwertowane na 
liczbę.

• Jeżeli ciąg nie zaczyna się prawidłowymi danymi 

liczbowymi, wartością ciągu będzie zero (0).

• Jeżeli dane numeryczne zawierają jeden ze 

znaków 

.

,

e

lub 

E

, wartość będzie liczbą 

zmiennoprzecinkową a w przeciwnym 
przypadku liczbą całkowitą.

background image

Tablice

• Tablice w PHP zachowują się zarówno tak jak 

tablice indeksowane

(wektory) oraz jak tablice 

mieszające (

asocjacyjne

). 

• PHP pozwala na tworzenie tablic 

wielowymiarowych.

• Można indeksować jeden wymiar tablicy 

wielowymiarowej liczbami a inny w sposób 

asocjacyjny.

• W przypadku tablic wielowymiarowych należy 

użyć 

nawiasów klamrowych

do zaznaczenia 

indeksów. 

background image

Asocjacje

• // Tworzenie tablicy asocjacyjnej

$color["niebieski"] = "#0000FF";

$color["zielony"] = "#00FF00";

$color["czerwony"] = "#FF0000";


• // Tworzenie tej samej co poprzedniej tablicy
• // tylko nieco prościej

$color = array( "niebieski"  =>  "#0000FF",

"zielony"  =>  "#00FF00",

"czerwony"  =>  "#FF0000" );

background image

Zmienne

• Zmienne PHP są oznaczane znakiem dolara (

$

)

• Wielkość liter w nazwach zmiennych 

jest rozróżniana

• Prawidłowe nazwy zmiennych muszą zaczynać się 

literą

lub 

znakiem podkreślenia

, po których może nastąpić 

litera, liczba lub znak podkreślenia.

• Gdy  wartości są przypisywane przez referencję, 

nowa 

zmienna staje się odwołaniem do oryginalnej zmiennej

Zmiana wprowadzona do dowolnej zmiennej powoduje 

zmianę drugiej. Aby wykonać przypisanie przez 

referencję, należy poprzedzić nazwę znakiem 

&

$

variable3 = 

&$

variable1; 

print( "$variable1, $variable3<br>" );

background image

Wersja specyfikacji CGI używanej przez serwer, na 

przykład CGI/1.1.

GATEWAY_INTERFACE

Nazwa i wersja protokołu za pomocą którego 

zostało wysłane  żądanie strony, na przykład 
HTTP/1.1.

SERVER_PROTOCOL

Adres IP użytkownika oglądającego stronę.

REMOTE_ADDR

Zawartość nagłówka 

User Agent:

wysłanego przez 

przeglądarkę. Nagłówek ten opisuje 
przeglądarkę żądającą strony, na przykład: 

Mozilla/4/0 (compatible; MSIE 5.01; Windows 

NT)

”. Więcej na temat wykorzystania tej 

zmiennej znajduje się

w rozdziale 9 

„Niezależność od przeglądarki”.

HTTP_USER_AGENT

Zawartość nagłówka 

Host:

o ile został wysłany 

przez przeglądarkę.

HTTP_HOST

Definicja

Zmienna 

Zmienne środowiska serwera 

Apache

background image

Zmienne środowiska systemu 

System operacyjny działający na serwerze, 

na przykład Linux.

OSTYPE

Systemowa ścieżka serwera.

PATH

Typ komputera, na przykład i386.

HOSTTYPE

Nazwa komputera serwera.

HOSTNAME

Definicja

Zmienna

background image

Zmienne generowane przez PHP 

Tablica asocjacyjna zmiennych 

przekazanych do skryptu za pomocą
metody POST.

HTTP_POST_VARS

Tablica asocjacyjna zmiennych 

przekazanych do skryptu za pomocą
metody GET.

HTTP_GET_VARS

Tablica asocjacyjna zmiennych 

przekazanych do skryptu poprzez 
cookie HTTP.

HTTP_COOKIE_VARS

Nazwa pliku z wykonywanym skryptem.

PHP_SELF

Definicja

Zmienna

background image

Operatory arytmetyczne

Reszta z dzielenie 

$a przez $b

$a % $b

Reszta z dzielenia

%

Iloraz $a i $b

$a / $b

Dzielenie

/

Iloczyn $a i $b

$a * $b

Mnożenie

*

Różnica $a i $b

$a - $b

Odejmowanie

-

Suma $a i $b

$a + $b

Dodawanie

+

Wynik

Przykład

Nazwa

Operator

background image

Operatory bitowe

Przesunięcie bitów w $a

w prawo o $b
kroków

$a >> $b

Przesunięcie w prawo

>>

Przesunięcie bitów w $a

w lewo o $b kroków

$a << $b

Przesunięcie w lewo

<<

Bity ustawione nie są

teraz ustawione i 
odwrotnie

~$a

Negacja

~

Bity ustawione w $a lub 

$b, ale nie w obu na 
raz są ustawione

$a ^ $b

Różnica symetryczna

^

Bity ustawione w $a lub 

$b są ustawione

$a | $b

Suma bitowa

|

Bity ustawione w $a i $b

są ustawione

$a & $b

Iloczyn bitowy

&

Wynik

Przykład

Nazwa

Operator

background image

Operatory porównania

True, jeżeli  $a jest 

większe lub równe 
$b

$a >= $b

Większy lub równy

>=

True, jeżeli  $a jest 

mniejsze lub równe 
$b

$a <= $b

Mniejszy lub równy

<=

True, jeżeli  $a jest 

większe od $b

$a > $b

Większy

>

True, jeżeli  $a jest 

mniejsze od $b

$a < $b

Mniejszy

<

True, jeżeli  $a jest 

różne od $b

$a != $b

Różny

!=

True, jeżeli  $a jest 

równe  $b i są one 
tych samych typów

$a === $b

Identyczny

===

True, jeżeli  $a jest 

równe $b

$a == $b

Równy

==

Wynik

Przykład

Nazwa

Operator

background image

Stałe

• Aby zdefiniować nową stałą używa się 

funkcji 

define()

<?php

define( "aString", "To jest stały ciąg znaków" );
define( "aNumber", 1 );

print( "Mamy tutaj zdefiniowane " . aNumber . " stałych.<br>" 

);

print( "Jej wartością jest '" . aString . "'<br>" );

?>

background image

Programowanie przepływu 

sterowania

• if, else, elseif
• while
• do .. while
• for
• foreach

foreach ( tablica as zmienna_wartosc) instrukcja

foreach ( tablica as zmienna_klucz => zmienna_wartosc) instrukcja

• switch
• break i continue

background image

include i require

• Wyrażenie 

include()

jest zwykłą funkcją 

PHP 

• Wyrażenie 

require()

jest konstrukcją 

językową 

background image

Funkcje

• PHP pozwala na tworzenie funkcji 

definiowanych przez użytkownika 

• Funkcje nie muszą być deklarowane przed ich 

użyciem w kodzie PHP4 

• PHP nie pozwala na przeciążanie funkcji, nie ma 

również mechanizmu usuwania lub 

przedefiniowania wcześniej zdefiniowanych 

funkcji 

• Domyślnie argumenty są przekazywane przez 

wartość 

background image

Przekazanie argumentu przez referencję

// przekazanie argumentu przez referencję

function StringAppend( 

&$

BaseString, 

$

AddString )

{

// ponieważ jest to przekazane przez referencję, wartość
// $BaseString może być zmieniona poza tą funkcją

$BaseString .= $AddString;

}

background image

wartości domyślne

function PrintAnchorTag( $aHREF, $aText, 

$aTarg = ""

){

...

Funkcja ta może być wywołana przy użyciu jednej z 

postaci:

PrintAnchorTag( "href", "text" );
PrintAnchorTag( "href", "text", 

"target"

);

background image

zmienna lista argumentów

function PrintEverything( )

{

$aNumArgs = 

func_num_args();

for ( $nIndex = 0; $nIndex < $aNumArgs; $nIndex++ )

{

$aArgVal = 

func_get_arg( $nIndex );

print( "Argument $nIndex: $aArgVal<br>" );

}   

}

background image

Programowanie obiektowe

• Dostępne jest dziedziczenie 

jednobazowe

,

• nie ma dziedziczenia wielobazowego.
• Istnieją konstruktory klas, 

• nie ma destruktorów

• PHP posiada 

(i wymaga używania)

wskaźnik 

$this

, który jest stosowany do 

odwoływania się do metod i zmiennych 
obiektu. 

background image

tworzenie prostej klasy

class ShoppingBasket

{

var $fItems;
var $fCurValue;

function 

ShoppingBasket

( $aInitialValue = 0.0 )

{

$this->fCurValue

= $aInitialValue; 

}

// Dodanie określonej ilości przedmiotów
function AddItem( $aName, $aValue, 

$aQuantity = 1 )

{

$this->

fItems[$aName]["Quantity"] +=  

$aQuantity;

$this->

fItems[$aName]["Value"] = 

$aValue;

$this->

fCurValue += $aValue * 

$aQuantity;

return True;

}

}

background image

Tworzenie nowego obiektu

• $aBasket = 

new

ShoppingBasket( 3.50 );

• $aBasket->

PrintBasket();

• $aBasket->AddItem( "gizmo", 1.50 ); 
• $aBasket->PrintBasket();

background image

Obsługa formularzy w PHP

<!-- To jest strona HTML, listing1.html -->
<html>
<head>
<title>Wydruk 3.1 - listing1.html</title>
</head>
<body>

<form action="post1.phtml" method="post">

Nazwa użytkownika: <input type="text" 

name="Username"><br>

Hasło: <input type="password" 

name="Password"><br>

<input type="submit" name="Submit" 

value="Wyślij">

</form>

</body>
</html>

background image

Obsługa formularzy w PHP

<!-- To jest skrypt PHP, post1.html -->
<html>
<head>
<title>Wydruk 3.1: post1.phtml</title>
</head>
<body>
<?php

print( "Nazwa użytkownika: $Username<br>" );
print( "Hasło: $Password<br>" );

?>
</body>
</html>

background image

Wielowartościowe elementy formularza

<!-- Nazwy są indeksami tablicy -->
<select name="

Colors[]

" size="5" 

multiple

>

<option value="Red">Czerwony</option>
<option value="Green">Zielony</option>
<option value="Blue">Niebieski</option>
<option value="Purple">Purpurowy</option>
<option value="Yellow">Żółty</option>

</select>

background image

Wielowartościowe elementy formularza

<!-- Trzy linie na dane adresowe. 

Używamy notacji tablicowej

aby zaznaczyć użycie wielu wierszy tablicy -->

<input type="text" name="

address[]

"><br>

<input type="text" name="

address[]

"><br>

<input type="text" name="

address[]

"><br>

background image

Metody odczytywania wartości z 

formularza 

• Predefiniowane zmienne tablicowe 

HTTP_GET_VARS

lub 

_GET

HTTP_POST_VARS

lub 

_POST

zawierają 

tablice asocjacyjne

elementów przesłanych do 

skryptu przy pomocy metod odpowiednio 

GET

POST

.

function DisplayGetVars()
{

global $HTTP_GET_VARS;

DisplayArray( $HTTP_GET_VARS );

}

background image

Użycie rysunku jako przycisku 

wysłania danych

<input type="image" name="SubmitImg" src="submit.gif">

• oprócz danych do serwera zostaną wysłane dodatkowo 

współrzędne x i y (względem lewego górnego rogu 

rysunku) punktu gdzie został kliknięty rysunek) 

• Nazwy zmiennych przechowujących współrzędne są 

tworzone poprzez dodanie 

_x

_y

do nazwy elementu 

reprezentującego rysunek. 

• Niektóre przeglądarki posiadają mechanizm pozwalający 

wykorzystać klawisz 

Enter

zamiast klikania w przycisk na 

formularzu. Gdy użyjemy rysunku zamiast przycisku, 

mechanizm ten nadal będzie działał, ale 

nie zostaną 

wtedy przesłane dane na temat współrzędnych

background image

Cookie

• Cookie są plikami tekstowymi zapisanymi 

na komputerze klienta

• PHP posiada tylko jedna funkcję 

przeznaczoną do tworzenia cookie, 

setcookie()

int setcookie( 

string

nazwa

string

wartość

int

czas

string

ścieżka

,             

string

domena

int

bezpieczny

)

background image

Cookie

• funkcja setcookie() musi być wywołana przed wysłaniem 

jakichkolwiek danych do przeglądarki 

• Dowolne cookie odesłane do aplikacji przez 

przeglądarkę jest automatycznie konwertowane na 

zmienną PHP tak samo, jak dzieje się to w przypadku 

metod GET i POST. 

• Cookie mogą przenosić wartości skalarne jak również 

tablice wartości. 

• Wszystkie argumenty funkcji poza nazwą są opcjonalne 
• Argument czas jest standardowym czasem z systemu 

Unix w postaci liczby, którą można uzyskać jako wynik 

funkcji 

mktime()

lub 

time().

background image

Użycie cookie

<?php

// Sprawdzenie czy istnieje zmienna cookie

$LastTime

if ( !empty( $LastTime ) )
{

$aMessage = "Ostatnia wizyta miała miejsce ";
$aMessage .= date( "d F Y", $LastTime );
$aMessage .= " o ";
$aMessage .= date( "h:i:s a", $LastTime );

}
else
{

$aMessage = "Nie byłeś tu przez ostatnie ";
$aMessage .= "dwa tygodnie.";

}
// Ustawienie cookie ważnego przez dwa tygodnie
$aTwoWeeks = time() + ( 60 * 60 * 24 * 14 );
setcookie( "LastTime", time(), $aTwoWeeks );
// sprawdzenie istnienia niezwykle ważnej tablicy 

z cookie

$aValMessage = "";
if ( !empty( $CookieArray ) )
{

$aValMessage = "Wartości: " . 

$CookieArray[0];

$aValMessage .= ", " . $CookieArray[1];
$aStartValue = $CookieArray[1] + 1;

}
else
{

$aValMessage = "Wartości nie są dostępne!";
$aStartValue = 0;

}

// usunięcie niezwykle istotnej tablicy wartości

setcookie( "CookieArray[0]" ); 
setcookie( "CookieArray[1]" ); 
// dodanie niezwykle istotnej tablicy wartości
setcookie( "CookieArray[0]", $aStartValue, 

$aTwoWeeks ); 

setcookie( "CookieArray[1]", $aStartValue + 1, 

$aTwoWeeks ); 
?>
<html>
<head>

<title>Użycie cookie</title>

</head>
<body>
<?php

print( $aMessage . "<br><br>" . $aValMessage

);
?>
</body>
</html>

background image

Obróbka danych do wyświetlenia

• strip_tags() 
• htmlentities()
• strip_slashes()
• nl2br()

<!-- Skrypt safedisplay2.phtml -->
<?php

error_reporting( 255 );
switch ( $FilterType )
{

case 0 : // brak

$aDisplayText = $TheText;
break;

case 1 : // strip_tags

$aDisplayText = strip_tags( $TheText );
break;

case 2 : // htmlentities

$aDisplayText = htmlentities( $TheText

);

break;

}

?>