Hálózatok‎ > ‎

PHP

A PHP (PHP Hypertext Prepocessor) nyelv segítségével szerveroldali szkripteket írhatunk. A szkriptek a HTML dokumentumokba ágyazhatók be, és az oldal letöltése előtt a webszerver PHP modulja futtatja őket. A szkriptek által generált kimenet behelyettesítődik a HTML megfelelő pontjára, így kliens oldalon már csak egy "statikus" HTML lapot látunk.


Konfiguráció

Ahhoz, hogy oldalaink PHP részei lefussanak, engedélyeznünk kell a szerveren a PHP kód futtatását. Az apache alatt valahogy így néz ki a beállítás:

/usr/local/apache/conf/httpd.conf:

# Make sure there's only **1** line for each of these 2 directives:
# Use for PHP 4.x:
#LoadModule php4_module	modules/libphp4.so
#AddHandler php-script	.php

# Use for PHP 5.x:
LoadModule php5_module	modules/libphp5.so
AddHandler php5-script	.php 

# Add index.php to your DirectoryIndex line:
DirectoryIndex index.html index.php

AddType text/html	.php

# PHP Syntax Coloring
# (optional but useful for reading PHP source for debugging):
AddType application/x-httpd-php-source phps

PHP beágyazása HTML-be

A fájl kiterjesztése ".php", hogy a webszerver észrevegye, futtatni kell a PHP értelmezőt. A HTML kódban tetszőleges számú PHP blokk lehet. A blokkokat <?php és ?> közé kell zárni.

A PHP blokk parancsait a PHP értelmező végrehajtja, és a parancsok által "kiírt" szövegeket behelyettesíti a HTML kódba, a PHP blokk helyére.

Ebből ...

<h1>Ez még html...</h1>  
<?php
    echo "Ez már PHP...";
?>   

... ez lesz

<h1>Ez még html...</h1>  
Ez már PHP...

Változók

A PHP változókat dollár-jellel vezetjük be. Nem kell előzetes deklaráció, nem kell típust megadni, az a használat módjából derül ki.
A változók tárolhatnak számokat, szövegeket és tömböket.

Számok

<?php  
    $a = 1;
    $b = 2;
    $c = $a + $b;
    echo $c;        //egész
   
    $d = 10;
    $e = 3;
    $f = $d/$e;
    printf("%.3f",$f);    //lebegőpontos, formázva 
?>   

Szövegek

<?php  
    $a = "alma";
    $b = "fa";
    $c = $a.$b;
    echo $c;        //almafa   
?>   

Tömbök

<?php  
    $a[1] = 1;
    $a[2] = 2;
    $a[3] = 42;
    print_r($a);        //tömb kiírása
   
    $b['Aladár'] = 10;
    $b['Béla']   = 15;
    $b['Csilla'] = 24;
    print_r($b);        //asszociatív tömb 
   
    $c = array( 'Aladár'=>10,'Béla'=>15,'Csilla'=>24); //így is lehet
?>   

Ciklusok

Számlálós ciklus

<?php  
    for($i=0; $i<=20; $i++){
        echo $i;
    }         // 0, 1, 2, ..., 20
?>   

Elöltesztelős ciklus  

<?php
    $i = 1;
    while($i<1000){

        echo $i;

        $i *= 2;

    }        // 1, 2, 4, 8, ..., 512

?>     

Tömb-bejáró ciklus   

<?php  
    $primek = array(2,3,5,7,11,13,17,19);
    foreach($primek as $p){
        echo $p;
    }        // 2, 3, 5, ..., 19
?>   
   

Elágazások

<?php  
    $a = 10;
    $b = 20;
    if($a > $b){
        echo "Az 'a' a nagyobb.";
    } else {
        echo "Az 'a' nem a nagyobb.";
    }
?>

GET paraméterek

A HTTP protokoll kétféle metódust definiál arra, hogyan tudunk paramétereket átadni egy szerveroldali szkriptnek. A GET metódus esetén a paraméterek az URL-be kódolva kerülnek átadásra.

http://szerver.com/mappa/server.php?a=3&b=4

Ezeket a paramétereket a PHP kódban így vehetjük át:

<?php
    $a = $_GET["a"];
    $b = $_GET["b"];
    $c = $a*$b;
    echo "A szorzat: ".$c;
?>

MYSQL hívások PHP alatt

A PHP program képes MYSQL adatbázis szerverhez kapcsolódni. A kapcsolódás után SQL lekérdezések futtathatók, a kapott válaszok a programban felhasználhatók, az adatok alapján dinamikusan állíthatók össze HTML tartalmak.

Az alábbi kód séma egy MYSQL tábla kiírását mutatja be:

<?php 
    mysql_connect("szerver","felhasználó","jelszó"); 
    mysql_select_db("adatbázis"); 
    $sql = "SELECT * FROM tábla"; 
    $válasz = mysql_query($sql); 
    while($sor = mysql_fetch_assoc($válasz)){ 
        print_r($sor); 
    
    mysql_close(); 
?>

Mint látható, a fenti kódrészlet érzékeny információkat is tartalmaz. Célszerű a szerveren jól beállítani a hozzáférési jogosultságokat, ha el szeretnénk kerülni, hogy adatbázis jelszavunk rossz kezekbe kerüljön. További óvatosság, hogy az azonosítót és a jelszót tárolhatjuk külön állományban, ahonnan a php kód beolvassa. Így elkerülhető, hogy a php modul esetleges hibája esetén letöltődő php forráskódunkban szerepeljen kritikus információ.

"Twitter"

Összes hozzászólás kiírása

<p>
<?php
mysql_connect("szerver","felhasználó","jelszo"); 
mysql_select_db("adatbázis"); 
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT * FROM posts"; 
$v = mysql_query($sql); 
while($sor = mysql_fetch_assoc($v)){ 
echo "<p>";
print_r($sor); 
echo "</p>";

mysql_close(); 
?>
</p>

Adott felhasználó által követettek hozzászólásai

<p>
<?php
$id = $_GET['id'];
                mysql_connect("szerver","felhasználó","jelszo");
                mysql_select_db("adatbázis");
                mysql_query("SET NAMES 'utf8'");
$sql =  "SELECT users.nev, datum, txt ";
$sql .=  "FROM users, followers, posts ";
$sql .= "WHERE users.id = followers.uid1 AND ";
$sql .= "followers.uid2 = posts.uid AND ";
$sql .= "users.id = ".$id;
 
$v = mysql_query($sql); 
while($sor = mysql_fetch_assoc($v)){ 
echo "<p>";
print_r($sor); 
echo "</p>";
mysql_close(); 
?>
</p>

Adott felhasználó által követettek hozzászólásai, CSS formázással, felhasználó nevével

<html>
<head>
<title>Twitter</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css">
div.poszt {
padding: 10px;
margin: 30px;
width: 200px; 
border-style: solid; 
border-width: 1px;}
</style>
</head>

<body>
<h1> Hozzászólások</h1>
<p>
<?php
$id = $_GET['id'];
mysql_connect("szerver","felhasználó","jelszó"); 
mysql_select_db("adatbázis"); 
mysql_query("SET NAMES 'utf8'");
$sql = "SELECT nev from users WHERE id = ".$id;
$v = mysql_query($sql);
$sor = mysql_fetch_assoc($v);
$nev = $sor['nev'];
echo "<h3>".$nev."</h3>";
$sql  = "SELECT users.nev, datum, txt ";
$sql .= "FROM users, followers, posts ";
$sql .= "WHERE users.id = followers.uid2 AND ";
$sql .= "followers.uid2 = posts.uid AND ";
$sql .= "followers.uid1 = ".$id;
 
$v = mysql_query($sql); 
while($sor = mysql_fetch_assoc($v)){ 
echo "<div class='poszt'>";
echo "<h4>".$sor['nev']."</h4>";
echo "<p>".$sor['txt']."</p>";
echo "<p>".$sor['datum']."</p>";
echo "</div>";
mysql_close(); 
?>
</body>
</html>