PHP
De la Enciclopedie Online
PHP este un limbaj de programare destinat în primul rând Internetului, aducând dinamică unei pagini de web. Este unul din cele mai importante limbaje de programare web open-source şi server-side. Numele PHP provine din limba engleză şi este un acronim recursiv : Php: Hypertext Preprocessor. Exemple faimoase de utilizare a acestui limbaj sunt PhpBB (forum), PhpNuke(CMS), chiar şi MediaWiki, software-ul din spatele Wikipedia. Folosirea PHP poate fi văzută ca o alternativă gratuită la utilizarea unor limbaje comerciale cum sunt ASP de la Microsoft, ColdFusion de la Macromedia, sau chiar JSP de la Sun Microsystems.
Cuprins |
[editează] Istoric
PHP a fost început în 1994 ca o extensie a limbajului server-side Perl, şi apoi de o serie de CGI-uri compilate de către Rasmus Lerdorf, pentru a genera un curriculum vitae şi pentru a urmări numărul de vizitatori ai unui site. Apoi a evoluat în PHP/FI 2.0, dar proiectul open-source a început să ia amploare după ce Zeev Suraski şi Andi Gutmans, de la Technion au lansat o nouă versiune a interpretorului PHP în vara anului 1998, această versiune primind numele de PHP 3.0. Tot ei au schimbat şi numele în acronimul recursiv de acum, până atunci PHP fiind cunoscut ca Personal Home Page Tools. Apoi Suraski şi Gutmans au rescris baza limbajului, producând astfel şi Zend Engine în 1999. În mai 2000 a fost lansat PHP 4.0, având la bază Zend Engine 1.0.
[editează] PHP 5
Pe 13 iulie 2004 a fost lansat PHP 5, cu Zend Engine II, ce a adus şi o orientare obiect mai pronunţată şi suportând mai multe caracteristici ale acestui tip de programare.
PHP 5 aduce mai multe noutăţi faţă de versiunea 4:
- Suport îmbunătăţit pentru OOP
- Introduce extensia PDO - PHP Data Objects, care defineşte o modalitate facilă şi consistentă de accesare a diferitelor baze de date
- Imbunătăţiri de performanţă
- Suport îmbunătăţit pentru MySQL şi MSSQL
- Suport nativ pentru SQLite
- Suport SOAP integrat
- Iteratori pentru date
- Control de erori prin tratarea de excepţii
La sfârşitul lui 2007 doar versiunea 5.x mai era întreţinută, deoarece în data de 13 iulie 2007 (exact la 3 ani după lansarea PHP5), PHP Group a anunţat că PHP4 va fi scos din uz pe 31 decembrie 2007, deşi prognozează că anumite upgrade-uri de securitate se vor oferi până pe 8 august 2008.[1]. Dezvoltarea la PHP 6 începuse deja în decembrie 2007 şi urmează să fie oferit odată cu scoaterea din uz a PHP4.
[editează] PHP 6
PHP 6[2] are următoarea agendă de îmbunătăţiri:
- suport pentru Unicode
- scoaterea definitivă a unor funcţii ca register_globals sau magic_quotes
- retragerea definitivă a variabilelor tip $HTTP_*_VARS
[editează] Popularitate
PHP-ul este unul din cele mai folosite limbaje de programare server-side, conform unui studiu efectuat de Netcraft în aprilie 2002, apărând pe 9 din cele 37 milioane de domenii cercetate în studiu. De asemenea, există un grafic al creşterii folosirii PHP-ului pe site-ul oficial. Popularitatea de care se bucură acest limbaj de programare se datorează următoarelor caracteristici :
- Familiaritatea : sintaxa limbajului este foarte uşoară combinând sintaxele unora din cele mai populare limbaje Perl sau C;
- Simplitatea : sintaxa limbajului este destul de liberă. Nu este nevoie de includere de biblioteci sau de directive de compilare, codul PHP inclus într-un document executându-se între marcajele speciale;
- Eficienţa : PHP-ul se foloseşte de mecanisme de alocare a resurselor, foarte necesare unui mediu multiutilizator, aşa cum este web-ul;
- Securitatea : PHP-ul pune la dispoziţia programatorului un set flexibil şi eficient de măsuri de siguranţă;
- Flexibilitatea : fiind apărut din necesitatea dezvoltării web-ului, PHP a fost modularizat pentru a ţine pasul cu dezvoltarea diferitelor tehnologii. Nefiind legat de un anumit server web, PHP-ul a fost integrat pentru numeroasele servere web existente: Apache, IIS, Zeus, server, etc.;
- Gratuitatea : este probabil cea mai importantă caracteristică a PHP-ului. Dezvoltarea PHP-ului sub licenţa open-source a determinat adaptarea rapidă a PHP-ului la nevoile web-ului, eficientizarea şi securizarea codului.
[editează] Utilizare
PHP este simplu de utilizat, fiind un limbaj de programare structurat, ca şi C-ul, Perl-ul sau începând de la versiunea 5 chiar Java, sintaxa limbajului fiind o combinaţie a celor trei. Datorită modularităţii sale poate fi folosit şi pentru a dezvolta aplicaţii de sine stătătorare, de exemplu în combinaţie cu PHP-GTK sau poate fi folosit ca Perl sau Python în linia de comandă. Probabil una din cele mai importante facilităţi ale limbajului este conlucrarea cu majoritatea bazelor de date relaţionale, de la MySQL şi până la Oracle, trecând prin MS Sql Server, PostgreSQL, sau DB2.
PHP poate rula pe majoritatea sistemelor de operare, de la UNIX, Linux, Windows, sau Mac OS X şi poate interacţiona cu majoritatea servereler web. Codul dumneavoastră PHP este interpretat de serverul WEB şi generează un cod HTML care va fi văzut de utilizator (clientului -browserului- fiindu-i transmis numai cod HTML).
[editează] Suport
PHP are un manual oficial[3] întreţinut de comunitatea din jurul proiectului. În plus, răspunsurile la multe probleme pot fi găsite printr-o simplă căutare pe internet. Există multe resurse[4] disponibile pentru un programator PHP începător.
[editează] Exemple de scripturi
[editează] Hello, World!
Acesta este exemplul clasic Hello World! [5]:
<?php # comentariu pe o singură linie // comentariu pe o singură linie /* comentariu pe mai multe linii se pot comenta linii de cod php echo 'acesta este un echo comentat'; */ echo 'Buna ziua'; ?>
[editează] Formular HTML
Un alt exemplu, formular html, instrucţiuni de bază, conectare la o bază de date MySQL, prelucrare de date.
[editează] form.php
<html>
<head>
<title>Formular</title>
</head>
<body>
<form method="post" action="procesare.php" name="formular1">
<input type=text name="rubrica_text">
<br>
<input type="checkbox" name="bifat">
<br>
<select name="selectie">
<?php //script introdus in sursa html
for ($i=0;$i<=99;$i++){ //instructiunea repetitivă "for" = "pentru"
if (($i % 2) == 0 ){
echo "<option value=" . $i . ">" . $i . "</option>\r\n";
}
}
//instructiunea conditionala "if"="daca"
//concatenarea variabilei $i cu un text "intre ghilimele"
?>
</select>
<input type="submit" value="Trimite">
</form>
</body>
</html>
[editează] procesare.php
<?php //aici începe scriptul
//afisarea datelor transmise:
echo "< pre>";
print_r($HTTP_POST_VARS); //print_r()-functie PHP ce poate afişa tablouri
echo "</ pre>";
//urmeaza conectarea la baza de date de tip Mysql
$conexiune = mysql_connect('localhost','utilizator','parola') or die ("Nu mă pot conecta");
mysql_select_db ('baza_de_date') or die ("Nu pot deschide baza de date");
switch ($HTTP_POST_VARS["selectie"])
{
case '0':
mysql_query("INSERT INTO `tabel` (`text`) VALUES ('".$HTTP_POST_VARS['rubrica_text']."')");
//inserarea in baza de date a textului din rubrica de tip text din formularul html(form.php)
break;
case '2':
if (isset($HTTP_POST_VARS['bifat'])){echo "Ai bifat casuta";};
//dacă a fost transmisa variabila.
break;
case '4':
echo "toate datele transmise sunt:<pre>";
var_dump($GLOBALS); //funcţie asemenănătoare cu print_r
echo "</ pre>";
break;
default:
echo "ai ales un numar mai mare ca 4";
break;
}
mysql_close($conexiune);
?>
Note:
- PHP tratează noile linii ca spaţii libere, într-o manieră de limbaj liber (excepţie făcând între ghilimele). O linie se termină cu punct şi virgulă(;) cu mici excepţii. [6]
- Un punct (.) concatenează variabilele şi datele de tip şir de caractere. [7]
- Variabilele fac diferenţă între majuscule şi litere mici, ele incep cu semnul dolar.
Exemplu:
$variabila = 'şir de caractere' . funcţie() . 'alt şir de caractere';
[8]
- Comentariile se fac cu // sau cu # dar e preferabil ca în C++ [9]
- Pentru scriere se poate folosi:
echo, dar şi:printşiprintf.
[editează] Shout box
Iată un exemplu complet de Shout box Vom folosi un fişier de conectare la baza de date pe care îl vom include în toate paginile:
[editează] conect.php
<?
mysql_connect("localhost", "username", "password");
mysql_select_db("nume_baza_date");
?>
pentru introducerea în pagina sitului a Shout box-ului vom folosi:
[editează] shout.php
<iframe marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=0 src="shoutbox/coment.php" width="100%" height="200"> Shout box-ul nu este găsit... Ne pare rău!!!</iframe>
Observaţi că face trimitere către coment.php.
[editează] coment.php
<?
include("conect.php");
$sqlc="select * from chat order by data desc limit 0,8";
$res=mysql_query($sqlc);
?>
<head><Style type="text/css">
body,p,a {font-family:verdana,arial,sans-serif; font-size:10px; text-align:justify;}
input {background:background-color; background-color:#ececec; font-family:verdana,arial,sans-serif; font-size:10px; }
b {font-family:verdana,arial,sans-serif; font-size:11px;}
a {font-family:Times new roman, times, sans-serif;font-size:12px; color:#336699;}
body {margin:0 0 0 0}
</style></head><body bgcolor="#88b6e7">
<center><hr><h2>Shout Box</h1>
{| cellpadding="0" cellspacing="0"
|-----
|
<?
while ($rowc=mysql_fetch_array($res)) {
print '<b><img src="led.gif">';
if ($rowc['email']!='')
{
print '<a href="http://'.$rowc['email'].'">';
}
print $rowc['nume'].'</a> : </b><p>'.$rowc['mesaj'].'</p>';
$ip=$_SERVER['REMOTE_ADDR'];
$ipuser=$rowc['ip'];
if ($ip==$ipuser)
{
print '<h6 align="right"><a href="erase.php?msg='.$rowc['data'].'">Şterge msg-</a></h6>';
}
print '<hr width="80%">';
}
?>
|-----
| align="center" bgcolor="#cecece" |
<form method="POST" name="chat" action="rw.php">
<input value="Nume:" onFocus="document.chat.nume.value=''" size=40 maxlength=40 name="nume"><br><input size=40 value="URL:" onFocus="document.chat.mail.value=''" maxlength=40 name="mail"><br><input value="Mesaj:" onFocus="document.chat.mesaj.value=''" size=40 maxlength=150 name="mesaj"><br><input type="submit" value=">>"><input type="reset" value="Resetează"><br><center><a href="archiv.php" target="_blank">::Arhiva</a> - <a href="smile.php">Smiles::</a></center>
</form>
|}</center>
</body>
Observăm trimiterea formularului de inserare mesaj către un fişier numit rw.php.
[editează] rw.php
<?
include("conect.php");
$nume=strip_tags($_POST['nume']);
$mail=strip_tags($_POST['mail']);
$mesaj=strip_tags($_POST['mesaj']);
$mail=str_replace("E-mail:","",$mail);
$mesaj=str_replace(":)",'<img src="smiles/happy.gif">',$mesaj);
$mesaj=str_replace(":D",'<img src="smiles/haha.gif">',$mesaj);
$mesaj=str_replace(":d",'<img src="smiles/haha.gif">',$mesaj);
$mesaj=str_replace(":(",'<img src="smiles/sad.gif">',$mesaj);
$mesaj=str_replace(";)",'<img src="smiles/eye.gif">',$mesaj);
$mesaj=str_replace(":[",'<img src="smiles/mad.gif">',$mesaj);
$mesaj=str_replace(":o",'<img src="smiles/o.gif">',$mesaj);
$mesaj=str_replace(":O",'<img src="smiles/o.gif">',$mesaj);
$mesaj=str_replace(":0",'<img src="smiles/o.gif">',$mesaj);
$mesaj=str_replace(":]",'<img src="smiles/ok.gif">',$mesaj);
$mesaj=str_replace(":p",'<img src="smiles/toung.gif">',$mesaj);
$mesaj=str_replace(":P",'<img src="smiles/toung.gif">',$mesaj);
$mesaj=str_replace(":thanx:",'<img src="smiles/thank.gif">',$mesaj);
$mesaj=str_replace("thank",'<img src="smiles/thank.gif">',$mesaj);
$mesaj=str_replace("putem_face_si_cenzura",'***********',$mesaj);
if ($mail=="URL:")
{
$mail="";
}
if ($mail=="url:")
{
$mail="";
}
$ip=$_SERVER['REMOTE_ADDR'];
$sql="insert into chat(email,nume,mesaj,ip) values('".$mail."','".$nume."','".$mesaj."','".$ip."')";
mysql_query($sql);
header("location: coment.php");
?>
Comanda header("location: coment.php"); ne face redirecţionarea către coment.php după ce au fost introduse datele în baza de date. Pentru comanda de ştergere a unui mesaj avem nevoie de:
[editează] erase.php
<?
include("conect.php");
$data=$_GET['msg'];
$sqlcc="delete from chat where data='".$data."'";
mysql_query($sqlcc);
header("location: coment.php");
?>
Deoarece în fereastra principală sunt afişate doar ultimele 8 mesaje primite, avem nevoie şi de o arhivă:
[editează] archiv.php
<?
include("conect.php");
$sqlc="select * from chat";
$res=mysql_query($sqlc);
?>
<head><Style type="text/css">
body,p,input {font-family:verdana,arial,sans-serif; font-size:10px;}
b {font-family:verdana,arial,sans-serif; font-size:11px;}
a {font-family:Times new roman, times, sans-serif;font-size:12px; color:#336699;}
</style><title>Shoutbox :: Arhiva</title></head><body>
<center><h1><img src="led.gif">ShoutBox<img src="led.gif"></h1></center><hr width="95%"><hr width="97%"><hr>
<?
while ($rowc=mysql_fetch_array($res)) {
print '<b><a href="mailto:'.$rowc['email'].'">'.$rowc['nume'].'</a> : </b><p>'.$rowc['mesaj'].'</p><h6 align="right">'.$rowc['data'].'</h6><hr>';
}
?>
În final putem face şi o pagină care să arate combinaţiile de caractere care afişează smile-urile:
[editează] smile.php
<head><Style type="text/css">
body,p,a,input {font-family:verdana,arial,sans-serif; font-size:10px;}
b {font-family:verdana,arial,sans-serif; font-size:11px;}
a {font-family:Times new roman, times, sans-serif;font-size:12px; color:#336699;}
body {margin:0 0 0 0}
</style></head><body>
{| width="100%" bgcolor="#c0c0c0" border="0" cellpadding="0" cellspacing="0"
|-----
|
{| width="100%" bgcolor="#cecece" border="1" frame="void" cellpadding="0" cellspacing="0"
|-----
|
:)
| align="center" | <img src="smiles/happy.gif">
|-----
|
;)
| align="center" | <img src="smiles/eye.gif">
|-----
|
:D
| align="center" | <img src="smiles/haha.gif">
|-----
|
:(
| align="center" | <img src="smiles/sad.gif">
|-----
|
:p
| align="center" | <img src="smiles/toung.gif">
|-----
|
:[
| align="center" | <img src="smiles/mad.gif">
|-----
|
:o
| align="center" | <img src="smiles/o.gif">
|-----
|
:]
| align="center" | <img src="smiles/ok.gif">
|-----
|
:thanx:
| align="center" | <img src="smiles/thank.gif">
|}
|-----
| border="1" | <br>
<center><a href="coment.php">::Back::</a></center><br>
|}</body>
De tot ce mai aveţi nevoie este o bază de date MySQL:
[editează] chat.sql
-- -- Table structure for table `chat` -- CREATE TABLE `chat` ( `email` text NOT NULL, `nume` text NOT NULL, `mesaj` text NOT NULL, `ip` varchar(15) NOT NULL default '', `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
[editează] Folosire
Acum nu aveţi decât să introduceţi liniainclude("shout.php"); în situl dumneavoastră şi să configuraţi conect.php după datele dumneavoastră.
[editează] Schimb valutar
<html>
<head>
<title>Schimb valutar</title>
</head>
<body>
{| border="0" cellpadding="6"
|-----
| <img src="dolar.JPG"> ||
<font size="6" color="808000">
Convertor valutar<br>
RON, EUR, USD
</font>
|}
<form action="conv.php" method="post">
<h3>
Curs valutar
</h3>
<h5>
Valoare EUR <input type="text" name="eur"> RON<br>
Valoare USD <input type="text" name="usd"> RON<br>
</h5>
<h3>
Schimb
</h3>
<h5>
Schimb
<input type="text" name="valoare">
<select name="valuta">
<option value="RON">RON</option>
<option value="EUR">EUR</option>
<option value="USD">USD</option>
</select>
in
<select name="valuta1">
<option value="RON">RON</option>
<option value="EUR">EUR</option>
<option value="USD">USD</option>
</select>
<input type="submit" value="Schimba">
</h5>
<form>
</body>
</html>
<?php echo "<h1>Bine ati venit la casa virtuala de schimb valutar.</h1>"; $eur = $HTTP_POST_VARS['eur']; $usd = $HTTP_POST_VARS['usd']; $valoare = $HTTP_POST_VARS['valoare']; $valuta = $HTTP_POST_VARS['valuta']; $valuta1 = $HTTP_POST_VARS['valuta1']; echo "<h2>Schimbati $valoare $valuta in $valuta1 </h2>"; if(($valuta == "RON")&&($valuta1 == "RON")) echo "<h1>Primiti $valoare $valuta1</h1>"; $schimb = $valoare / $eur; if(($valuta == "RON")&&($valuta1 == "EUR")) echo "<h1>Primiti $schimb $valuta1</h1>"; $schimb = $valoare / $usd; if(($valuta == "RON")&&($valuta1 == "USD")) echo "<h1>Primiti $schimb $valuta1</h1>"; if(($valuta == "EUR")&&($valuta1 == "EUR")) echo "<h1>Primiti $valoare $valuta1</h1>"; $schimb = $valoare * $eur; if(($valuta == "EUR")&&($valuta1 == "RON")) echo "<h1>Primiti $schimb $valuta1</h1>"; $schimb = $valoare * $eur / $usd; if(($valuta == "EUR")&&($valuta1 == "USD")) echo "<h1>Primiti $schimb $valuta1</h1>"; if(($valuta == "USD")&&($valuta1 == "USD")) echo "<h1>Primiti $valoare $valuta1</h1>"; $schimb = $valoare * $usd; if(($valuta == "USD")&&($valuta1 == "RON")) echo "<h1>Primiti $schimb $valuta1</h1>"; $schimb = $valoare * $usd / $eur; if(($valuta == "USD")&&($valuta1 == "EUR")) echo "<h1>Primiti $schimb $valuta1</h1>"; ?>
[editează] Forum de discuţii libere
<?php
$conexiune = mysql_connect('localhost', 'root', '');
$db = mysql_select_db('forum');
$query = "select * from mesaje";
$result = mysql_query($query);
$sir = 0;
if($result) $sir = mysql_num_rows($result);
$d = date('D - M - Y');
$o = date('H:i:s');
?>
<html>
<head>
<title></title>
</head>
<body link="aa0000" alink="aa0000" vlink="aa0000">
{| border="0" align="center"
|-----
| valign="top" |
{|
|-----
| <img src="ps.jpg"> || valign="top" |
<font color="bb55aa" face="Arial" size="7">
FORUM
<br><font color="bb55aa" face="Arial" size="3">
<h4>LICEUL DE ARTA "SABIN DRAGOI"<br> ARAD</h4>
<h5><?php echo"$d<br>$o"?></h5>
</font>
</font>
|}
|
<form action="trimite.php" method="post">
{| bgcolor="bb55aa" align="right"
|-----
<td><font face="Arial" size="3" color="eeeeee">Nume</font>
| <input type="text" size="30" name="nume">
|-----
| <font face="Arial" size="3" color="eeeeee">Subiect</font>
| <input type="text" size="30" name="subiect">
|-----
| <font face="Arial" size="3" color="eeeeee">Mesaj</font>
| <textarea rows="5" cols="30" name="mesaj"></textarea>
</font>
|-----
| colspan="2" align="center" |
<input type="submit" value="Trimite">
<input type="reset" value="Sterge">
|}
</form>
|}
</td>
<br>
<center>
{| cellpadding="5" bgcolor="eeeeee" border="0" cellspacing="5"
! bgcolor="bb55aa" width="100" | Subiect
! bgcolor="bb55aa" width="100" | Autor
! bgcolor="bb55aa" width="220" | Mesaj
! bgcolor="bb55aa" width="100" | Data
! bgcolor="bb55aa" width="50" | Ora
<?php
for($i = 0; $i < $sir; $i++)
{
$subiect = mysql_result($result, $i, 'subiect');
$autor = mysql_result($result, $i, 'autor');
$data = mysql_result($result, $i, 'data');
$id_mesaj = mysql_result($result, $i, 'id_mesaj');
$mesaj = mysql_result($result, $i, 'mesaj');
$ora = mysql_result($result, $i, 'ora');
echo "
|-----
| bgcolor="'eeeeff'" | $subiect || bgcolor="'eeeeff'" | $autor
| bgcolor="'eeeeff'" | $mesaj
| bgcolor="'eeeeff'" align="'center'" | $data
| bgcolor="'eeeeff'" align="'center'" | $ora
";
}
?>
|}
</center>
</body>
</html>
[editează] trimite.php
<?php
$conexiune = mysql_connect('localhost', 'root', '');
$db = mysql_select_db('forum');
$nume = $HTTP_POST_VARS['nume'];
$subiect = $HTTP_POST_VARS['subiect'];
$mesaj = $HTTP_POST_VARS['mesaj'];
$data = date('Y-m-d');
$ora = date('H:i:s');
$query = "insert into mesaje (subiect, autor, mesaj, data, ora) values ('$subiect', '$nume', '$mesaj', '$data', '$ora')";
mysql_query($query);
require('forum.php');
?>
