PHP

 

Stránka na stiahnutie

 

 

1. ÚVOD

V tomto referáte chcem ukázať čo je to PHP, základnú syntax a pár ilustračných príkladov. Programovanie v PHP sa podobá programovaniu v iných skriptovacích jazykoch. Syntax preberá od C.

PHP skript je vlastne obyčajná WWW stránka doplnená o špeciálne príkazy. Aby server vedel, že  nebude mať do činenia len s obyčajnou WWW stránkou, používajú sa odlišné prípony. Klasická WWW stránka má príponu .html alebo .htm, stránka v jazyku PHP by mala mať príponu .php alebo .phtml.

Skript v PHP je v podstate textový súbor. Tento súbor obsahuje mix kódu HTML a PHP a môže byť napísaný v Notepade, Textpade.... Vytvorené súbory sa ukladajú tam, kde ukladáme WWW stránky. V našom prípade je to adresár C:\apache\htdocs .

2. ZÁKLADY PHP

Nakoľko PHP je program, je preto zložený z určitej sekvencie príkazov. Pretože býva uložený v HTML dokumente, treba WWW serveru jasne vymedziť, odkial ide o skript PHP a kde náš skript končí. Na to slúžia znaky ‘ <?’ resp. ‘ <?php’  a ‘?>’. Tieto znaky definuje norma SGML. Nasledujúce príklady sú ekvivalentné:

<?

echo("Hello World");

?>


<?php
echo("Hello World with XML");
?>


Prvý príklad je jasne najjednoduchší. Nestačí však, keď chceme použiť PHP na generovanie XML dokumentov. Vtedy uprednostníme druhú verziu, pretože XML je vlastne SGML jazyk.

 

Premenné:

 

Premenné sa vždy začínajú znakom dolár ‘$’ a môžu okrem písmen a číslic obsahovať aj znak poddtrhovník, pričom sa nesmú začínať číslicou. Premennú nie je nutné deklarovať, deklaruje sa automaticky. V prípade, že ju ani neinicializujeme, obsahuje imlicitne prázdny reťazec (STRING NULL). 

 

Príklad 1:

<?
$premenna1 = "
ahoj" ;
$premenna2 =
5.13;
printf("%
s<br>\n",$premenna1);
printf("%f<br>\n",$premenna2);
echo "bol vypisany obsah premennych " ;
?>

 

Polia:

 

Pole je špeciálna dátová štruktúra, v ktorej sú jednotlivé premenné prístupné pomocou indexu.Index pola sa zapisuje do hranatých zátvoriek.

Pole môžeme inicializovať priradením hodnôt ku každému prvku, alebo jednoduchšie a ľahšie pomocou funkcie Array. Viac napovedia príklady:

$mesiac[ ]="Januar";// tu indexuje od 0
$mesiac[ ]="Februar";
$mesiac[ ]="Marec";


Skúsme použiť array.

$mesiac = Array("Januar","Februar","Marec");// tu indexujem od 0
$mesiac = Array(1=>"Januar","Februar","Marec");// tu index od 1

 

 

Úloha 1

Máme tri farby a tri čísla ktoré sú indexy tychto farieb. Náhodne vyberieme jeden index a text zafarbíme príslušnou farbou.

 


<HTML>
  <HEAD>

    <TITLE> Priklad 1 </TITLE>

  </HEAD>
  <BODY>
  <?
   

 

 


  ?>
  </BODY>
</HTML>


Objekty a triedy:

 

Trieda má v jazyku PHP nasledovný schématický tvar:

 

class meno_triedy
{
definícia premenných [ = inicializačná hodnota ] ;
definícia funkcií ;
}

 

Napr:

 

class Cstudent
{
var $aMeno, $aPriezvisko,$aRC;
var $aAdresa = "SLOVENSKO";

 

function Vypis() 

printf("Meno: %s<br>\n",$this->aMeno);
}


}

 

Vo funkcii musíme používať operátor this, ak chceme pristupovať k premennej, nakoľko tá ešte fyzicky neexistuje.
 

Teraz vytvoríme inštanciu triedy:

 

$Student = new Cstudent;
$Student->aMeno = "Janko";
$Student->aPriezvisko = "Hrasko";
$Student->aRC = 7701116666;

$Student->Vypis();

Odporucanie jedneho mojho dobreho kamosa (Samo K.):

 

triedy nedoporučujem  pouzivat. Aj tak na nic prakticke sa nedaju pouzit. :)


 

Výrazy:

 

Zložitejší výraz tvorí nasledujúce priradenie:

premenná = výraz bin_operátor výraz;


PHP podobne ako C-čko podporuje skrátený zápis priradení. V nasledujúcej tabulke je uvedený prehľad operácií, ktoré PHP umožňuje zadávať v skrátenej forme.


lný zápis    Skrátený zápis
a = b + c          -
a = a + c       a += c
a = a - c        a -= c
a = a * c       a *= c
a = a / c        a /= c
a = a % c      a %= c


 

operácia PASCAL

PHP

rovnosť = ==
nerovnosť <> !=
log. súčin and &&
log. súčet or ||
negácia not !


 

Podmienený výraz:

 

Podmienený výraz je tiež novinkou, ktorá sa v jazyku Pascal nevyskytuje. Patrí medzi ternárne operátory, čo znamená, že má až tri operandy. Jeho syntax je nasledujúca:

výraz_podmienka ? výraz_1 : výraz_2

A má význam: if výraz_podmienka then výraz_1 else výraz_2, čiže výsledná hodnota výrazu je buď výraz_1 alebo výraz_2, čo závisí na hodnote (pravdivosti) výrazu výraz_podmienka. Na objasnenie malý príklad:

napr.

<?
$i=$j=$k=10;
$i=($j==10) ? 1:3; // i bude 10
$k=($i>$j) ? $i:$j;// k bude maximum z i a j, teda 10
echo "Maximum z $i a $j je $k";
?>

 

Vetvenie programu:

 

Php ponúka dva príkazy, ktoré umožňujú vykonávať určitú časť skriptu podmienene. Slúžia na to príkazy if a switch v rôznych variáciách.

Príkaz if-else

if ( výraz)
  príkaz_A ;
else
  príkaz_B ;

 

Príkaz if-elseif-else

Táto konštrukcia opäť rozširuje možnosti príkazu if. Príkaz uvedený za elseif sa vykoná, ak nie je splnená podmienka pre if a zároveň je splnená podmienka za elseif. Časť elseif môžeme použiť aj viackrát. Príkaz else sa vykoná len vtedy, ak nie je splnená žiadna podmienka elseif.

if ($a < $b)
  echo ‘a je menšie ako b’;
elseif ($a == $b)
  echo ‘a a b sa rovnaju’;
else
  echo ‘a je väčšie ako b’;

 

 

Príkaz switch

V prípade, že máme viac podmienkových vetiev, oplatí sa používať príkaz switch. Jeho syntax je nasledovná:

switch ( výraz1 )
{
case HODNOTA A :
príkazA1;
príkazA2;
......
break;
case HODNOTA B :
príkaz B1;
príkaz B2;
...
break;
...........
default:
príkaz XXX1;
}

Ako to funguje? Najprv sa vyhodnotí výraz1 a potom sú postupne prechádzané hodnoty za case, až kým sa nenájde hodnota, ktorá sa rovná výrazu1. Následne sa vykonávajú príkazy, až kým sa nenarazí na príkaz break alebo koniec príkazu switch. Časť default sa vykoná vtedy, ak ani jedna hodnota sa nerovná výrazu1. Časť default je nepovinná.

 


Cyklus

 

Príkaz while

Tento príkaz testuje podmienky cyklu ešte pred prechodom cyklu, čo znamená že cyklus nemusí prebehnúť ani raz.

while (výraz) príkaz ;
 

Napr.
$cislo = 0;
while ( $cislo < 10)
{
echo $cislo ." <BR>" ;
$cislo++ ;
}


Príkaz do-while

Tento príkaz je ekvivalent Paskalovského REPEAT-UNTIL. Podmienka sa tu testuje a6 po prechode cyklom, teda cyklus prebehne najmenej raz.

do
{
príkazy;
} while ( výraz) ;


Napr.
do
  i++ ;
while ( i<100 );



Príkaz for

for (výraz1 ; výraz2; výraz3) príkaz;

výraz1 je vyhodnotený pred začiatkom prevádzania cyklu. Potom je vyhodnotený výraz2. Aj je vrátené TRUE, prevádza sa telo cyklu príkaz. Na konci každého prechody cyklom sa vyhodnotí výraz3, čo sa deje tak dlho, pokiaľ má výraz2 hodnotu TRUE.
 

Napr.
for ($i = 1 ; $i < 10 ; $i++)
{
echo $i ;
}



for ($i=10 , $j =20; $i+$j <100; $i++, $j++);

 PHP A FORMULÁRE 

 

Jazyk HTML obsahuje podporu formulárov, ktoré slúžia pre načítavanie dát od používateľa. Formulár môže obsahovať tlačítka, editovacie boxy, listboxy,.... Script získané dáta z formulára spracuje a výsledok odošle na okno prehliadača.

V jazyku HTML slúži pre vloženie formulára do stránky tag FORM. Má dva atribúty ACTION a METHOD. Atribút ACTION určí URL adresu skriptu, ktorý slúži pre spracovanie dát získaných z daného formulára. Atribút METHOD určí, akým spôsobom budú dáta z formulára predané serveru, buď metódou GET, ktorá pripojí prenášané dáta za URL odslužného skriptu alebo metódou POST, ktorá zakomponuje prenášané dáta do tela HTTP. Základ formulára by mal dodržiavať nasledujúcu syntax:


<FORM ACTION=”URL skriptu“ METHOD=“GET|POST“>
telo formulára
</FORM>

 

Úloha 2

Zistite či zadané číslo na vstupe je prvočíslo.

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
  <head>
    <title>Priklad 2</title>
    <meta content="text/html; charset=windows-1250" http-equiv="Content-Type">
  </head>
  <body>
  <?
    echo"<form action=\"$PHP_SELF\" method=\"get\">\n";
    echo"Napis cislo:\n";
    echo"<input type=\"text\" size=10 maxlength=6 name=\"cislo\" value=\"$cislo\">\n";
    echo"<input type=\"submit\" name=\"button\" value=\"Vyskusaj\">\n";
    echo"</form>\n";

   if(isset($cislo)){
     echo"<hr>\n";
     if($cislo<1||$cislo>1000000){
       echo"Cislo je mimo povoleneho rozsahu!";
     }
     else{
      

 

 

 

 


       printf("Cislo <strong>%d</strong> %s je prvocislo.\n",$cislo,$ok?"":"nie");
     }
   }
 ?>
 </body>

</html>

 

Funkcie

 

Definícia funckie je nasledovná:

function meno_funkcie (parameter1, parameter2, ... )
{
príkazy ;
return hodnota ;
}


Pomocou parametrou predávame hodnoty, ktoré chceme spracovať. Príkazom return funkcia vracia svoj výsledok. Pri jednoduchých funkciách môžeme parametre úplne vynechať, podobne ako návrat hodnoty príkazom return.

 

Funkcie pre prácu so súbormi a adresármi

V tabuľke nižšie je uvedených zopár príkazov pre prácu so súbormi a adresármi.

 

Príkaz Vysvetlenie
chdir(adresar) funkcia nastavuje aktuálny adresár, ak sa zmena podarí, funkcia vracia true, inak flase
closedir(ukazovatel na adresar) funkcia uzatvorí adresár otvorený na čítanie
copy (zdroj, ciel) skopíruje
fclose(ukazovatel na subor) funkcia uzatvorí súbor, ak sa súbor podarí uzatvoriť, funkcia vracia true, inak false
feof(ukazovatel na subor) test konca suboru, ak je koniec vracia true, inak false
fgetc(ukazovatel na subor) funkcia prečíta zo súboru jeden znak, ak sa dosiahol koniec súboru alebo došlo k chybe, funkcia vracia false, inak vracia prečítaný znak
gfetss(ukazovatel na subor, dlzka) funkcia prečíta jeden riadok zo súboru maximálne dĺžky dlzka-1 znakov, keď nastane chyba funkcia vráti false
file(subor) funkcia načíta súbor do poľa, funkcia vráti pole, kde každý prvok obsahuje jeden riadok súboru
file_exist(subor) funkcia testuje, či daný súbor existuje, ak áno vracia true, inak false
filesize(subor) funkcia vracia veľkosť súboru v B
fopen(subor, mod) funkcia otvorí súbor v zadanom móde a vracia ukazovateľ na tento súbor, ak sa súbor nepodarí otvoriť, vracia false
ako mód môžeme použiť jeden z nasledujúcich reťazcov "r" (otvoriť pre čítanie), "w" (otvoriť pre zápis, ak súbor existuje, zmaže sa), "a" (doplňovanie, zápis na koniec), "r+" (otvorí súbor pre čítanie a zápis, súbor musí existovať), "w+" (otvorí súbor pre čítanie a zápis, ak súbor existuje je zmazaný), "a+" (otvorí súbor pre čítanie a doplňovanie), 
fpassthru(ukazovateľ na súbor) funkcia vypíše zostávajúci obsah súboru na štandardný výstup a súbor zatvorí
fputs(ukazovatel na súbor, retazec) funkcia zapíše reťazec do súboru (to isté ako fwrite)
is_readable(súbor) zistí či sa daný súbor dá čítať, ak áno vracia true, inak false
is_writeable(súbor) zistí či sa dá do súboru zapisovať, ak áno vracia true, inak flase
mkdir(adresár, prava) príkaz vytvorí adresár s danými prístupovými právami, práva sa vyjadrujú číselne v osmičkovej sústave (napr.: 0700)
opendir(adresar) funkcia otvorí adresár a vracia ukazovateľ na tento adresár, ak sa nepodarí adresár otvoriť, funkcia vracia false
readdir(ukazivatel na adresar) funkcia prečíta názov jedného súboru z adresára, vracia názov tohto súboru, ak už boli všetky súbory prečítané, vracia false
readfile(subor) vypíše obsah súboru na štandardný výstup
rename(stare_meno, nove_meno) premenuje súbor, ak sa ho podarí premenovať, vracia true, inak false
rewind(ukazovatel na subor) nastaví pozíciu v súbore na začiatok
rewinddir(ukazovatel na adresar) presun na prvú položku v adresári
rmdir(adresar) odstráni adresár
tempnam(meno, prefix) funkcia vygeneruje jedinečné meno súboru v adresári začínajúce na prefix, funkcia vracia celé meno súboru vrátane cesty 
unlink(subor) zmazanie súboru, ak sa súbor podarí zmazať funkcia vracia true, inak false

 

Úloha 3

Vytvorte program ktorý z daného adresára vypíše súbory s koncovkou .php a po kliknutí na súbor sa zobrazí jeho zdrják.

 

<?
function vypis($fname)
  {

 

 

 

 

        printf("<a href=\"obsah.php?subor=%s\">%s</a><br>\n",$fname,$fname);

      }

    }
  }
?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Priklad 3</title>
<meta content="text/html; charset=windows-1250" http-equiv="Content-Type">
</head>
<body>
<?

 


?>
</body>

</html>

 

 

 PRÁCA S OBRÁZKAMI

Zisťovanie informácií o súbore s obrázkom

 

Pre zistenie informácií o súbore s obrázkom existuje funkcia getimagesize, ktorá zistí formát obrázku a jeho veľkosť.
 

Napr.

<html>
<head>
<title>Příklad 1. z 21. dílu</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
</head>
<body>
<?php
$informacia = getimagesize('obr1.jpg');
echo 'šírka obrázku je ',$informacia[0],' pixelov.<br>';
echo 'výška obrázku je ',$informacia[1],' pixelov.<br>';
echo 'Formát obrázku je číslo ',$informacia[2],'.';
?>

</body>
</html>


Čo ktoré číslo formátu znamená se dozvieme v nasledujúcej tabuľke:
 
 
Číslo Formát obrázku
1 GIF
2 JPEG
3 PNG
4 SWF
5 PSD
6 BMP
7 TIFF(intel byte order)
8 TIFF(motorola byte order)
9 JPC
10 JP2
11 JPX
12 JB2
13 SWC
14 IFF
15 WBMP
16 XBM
 


Funkcia getimagesize vracia pole, kde index s číslom nula obsahuje šírku obrázku v pixeloch, index s číslom jedna výšku obrázku a index s číslom dva vracia číslo formátu.
 


Ako vytvoriť premennú typu obrázok?

 

Premennú typu obrázok je možné vytvoriť niekoľkými spôsobmi. Tieto spôsoby delíme podľa toho, či chceme vytvoriť nový prázdny obrázok alebo chceme obrázok nahrať zo súboru.
 

Pre tvorbu prázdneho obrázku používame funkciu imagecreatetruecolor. Táto funkcia vytvorí prázdny obrázok so zadanou šírkou a výškou.
 
imagecreatetruecolor (šírka, výška)

Existujú funkcie, ktoré vytvoria premennú typu obrázok nahratím zo súboru. Musí sa použiť správna funcia podľa typu obrázku. Keď máme obrázok typu JPEG tak použijeme funkciu imagecreatefromjpeg. Ak ide o obrázok typu PNG tak sa používa funkcia typu imagecreatefrompng. Obe funkcie očakávajú ako parameter meno súboru a vracajú premennú typu obrázok.

imagecreatefromjpeg (jméno_souboru)

imagecreatefrompng (jméno_souboru)


Ďalšie dôležité funkcie:

 

 

Úloha 4

Vytvorte program ktorý vytvorí fotoalbum z fotiek v súbore. Fotky

 

<?
function my_img($fname)
{
  $a=getimagesize($fname);
  printf("<img src=\"%s\" alt=\"Obrazok\" %s border=\"0\">",$fname,$a[3]);
}

function vytvor_zmenseninu($fname,$tname)
{
  $jpg=imagecreatefromjpeg($fname);
  if($jpg){
   

 

 


    $th=imagecreatetruecolor($w,$h);
    imagecopyresampled($th,$jpg,0,0,0,0,$w,$h,$ow,$oh);
    imagejpeg($th,$tname);

  }
}

function ukaz($fname)
{
  if(substr($fname,0,3)=="th_") return 0;
  if(substr($fname,-4,4)!=".jpg") return 0;
  $thumb=sprintf("th_%s",$fname);
    if(!file_exists($thumb))

    {
      vytvor_zmenseninu($fname,$thumb);
    }
  printf("<td><a href=\"%s\">",$fname);
  my_img($thumb);
  echo"</a></td>\n";
  return 1;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
  <head>
    <title>Priklad 3</title>
    <meta content="text/html; charset=windows-1250" http-equiv="Content-Type">
  </head>
<body>
<?
  if($handle = opendir('.')){
    $num=0;
    echo"<table border=1><tr>";
    while(false!==($file=readdir($handle))){
      if(is_file($file)){
        if(ukaz($file)){
          $num++;
          if($num%5==0)

            echo"</tr><tr>";
        }
      }
    }
    echo"</tr></table>\n";
    closedir($handle);
  }

?>
</body>

</html>
 

Linky: