Idi na sadržaj

PHP

S Wikipedije, slobodne enciklopedije
Datum izmjene: 26 februar 2015 u 07:47; autor: EdinBot (razgovor | doprinosi) (Uklanjanje Link FA/FL/GA)

PHP ili Personal Home Page (ili PHP: Hypertext Preprocessor) je jedno od server-side open source rješenja. PHP je reflektivni programski jezik prvobitno dizajniran za pravljenje dinamičkih web stranica. [1] PHP se uglavnom koristi za izvršavanje skripti na serverskoj strani (server-side scripting), ali se može koristiti sa komandnog linijskog interfejsa ili preko samostalne grafičke aplikacije.

Server side scripting predstavlja vid izvršavanja web skripti na webu, a samo mu ime kaže da se izvršava na serveru (suprotno od JavaScript-a koji se izvršava na klijentskoj strani - browseru). PHP je alternativa komercijalnim programskim jezicima (Microsoft ASP/VBScript/JScript, Macromedia ColdFusion, Sun Microsystems JSP/JAVA) i nekomercijalnom CGI-u/PERL-u.

Historija

PHP je napisan kao skup CGI binarnih fajlova u C programskom jeziku od strane danskog/grenlandskog programera Rasmusa Lerdorfa 1994. godine, kako bi zamijenio mali skup Perl skripti koje je koristio za održavanje lične stranice. [2]

Lerdorf je inicijalno napravio PHP kako bi prikazao svoj rezime i kako bi prikupio određene podatke, poput onih o broju posjeta na svojoj stranici. Personal Home Page Tools se pojavio u javnosti 8. juna 1995. godine nakon što ga je Lerdorf kombinovao sa vlastitim Form Interpreter-om kako bi napravio PHP/FI (ovo izdanje se smatra drugom verzijom PHP-a).

Zeev Suraski i Andi Gutmans, dva izraelska razvijača sa Technion IIT-a, su nanovo napisali parser 1997. godine i stvorili bazu za PHP 3, promjenivši ime jezika u rekurzivni inicijalizam PHP: Hypertext Preprocessor. Razvojni tim je zvanično izdao PHP/FI 2 u novembru 1997. godine nakon mjeseci beta testiranja. Javno testiranje PHP 3 je otpočelo, a zvanično puštanje u upotrebu se desilo juna 1998. godine. Suraski i Gutmans su tada započeli novo prerađivanje PHP jezgre, proizvodeći Zend Engine 1999. godine.[3] Također su osnovali Zend Technologies u Ramat Gani (Izrael) koja se bavi upravljanjem razvoja PHP-a.

Maja 2000. godine je izdat PHP 4 sa Zend Engine 1.0. Najskoriji update isporučen od The PHP Group je za stariju seriju PHP 4 koja je do maja 2007. uključivala verzije do 4.4.7. PHP 4 će imati osigurano snabdijevanje sigurnosnim updateima do 31. decembra 2007.[4]

13. jula 2004, izdat je PHP 5 sa novom Zend Engine II. PHP 5 je uključio nove karakteristike poput:[5]

  • Unapređena podrška za objektno-orjentisano programiranje
  • PHP Data Objects nastavak, koji definiše lightweight konzistentni interfejs za pristup bazama podataka
  • Poboljšane performanse
  • Bolja podrška za MySQL
  • Ugrađena podrška za SQLite
  • Integrisana SOAP podrška
  • Podatkovni iteratori
  • Rad s greškama preko izuzetaka

Posljednja stabilna verzija PHP-a je 5.2.3. koja je izdata 1. juna 2007. godine.

Upotreba

PHP se općenito izvršava na web serveru, uzimajući PHP kod kao ulaz, kreirajući web stranice kao izlaz; međutim može se također koristiti za pravljenje skripti sa komandne linije i aplikacije za korisnički interfejs na klijentskoj strani. PHP se može koristiti na većini web servera i na gotovo svakom operativnom sistemu i platformi bez ikakve novčane nadoknade. PHP Group također obezbjeđuje kompletan izvorni kod za korisnike koji grade, podešavaju ili nadograđuju kod za vlastitu upotrebu.

Izvršavanje skripti na serverskoj strani

Originalno dizajniran za kreiranje dinamičkih web stranica, PHP se načelno fokusira na server-side scripting odnosno izvršavanje skripti na serverskoj strani. Izvršavanjem PHP parsera sa web serverom i web browserom, PHP model se može uporediti sa drugim server-side scripting jezicima kao što su Microsoftov ASP.NET sistem, JavaServer Pages (Sun Microsystems) i Ruby on Rails framework, pošto svi oni obezbjeđuju dinamički sadržaj klijentu sa web servera.

Kako bi se direktnije takmičio sa framework pristupom, Zend radi na Zend Frameworku - skupu PHP gradivnih blokova i najboljih praksi u nastajanju (počevši od juna 2006); drugi PHP frameworkci sa istim osnovama uključuju CakePHP, PRADO i Symfony.

LAMP arhitektura je postala popularna u web industriji kao način za plasiranje jeftinih, pouzdanih, skalabilnih i sigurnih web aplikacija. PHP se obično koristi kao P dio u ovoj kompoziciji zajedno sa Linuxom, Apache serverom i MySQL-om, iako se P može odnositi i na Python programski jezik ili Perl.

PHP se može koristiti sa velikim brojem relacionih sistema za upravljanje bazama podataka (RDBMS), izvršava se na svim najpopularnijim web serverima i dostupan je za mnoge različite operativne sisteme. Prilagodljivost znači da PHP ima široku instalacionu osnovu na Internetu; preko 19 miliona internetskih domena su udomljene na serverima sa instaliranim PHP-om. [6]

Primjeri, popularnih server-side PHP aplikacija uključuju: phpBB, WordPress i MediaWiki.

Izvršavanje skripti na komandnoj liniji

PHP također obezbjeđuje komandni linijski interfejs SAPI za razvoj shell i desktop aplikacija, demona, log parsiranja i drugih sistemskih administrativnih zadataka. PHP se sve više koristi na komandnoj liniji za zadatke koji su tradicionalno pripadali Perlu, Pythonu, awk-u ili shell scriptingu.

Aplikacije grafičkog interfejsa na klijentskoj strani

PHP obezbjeđuje povezivanje sa GUI bibliotekama poput GTK+ (sa PHP-GTK), Qt (sa PHP-Qt) i bibliotekama za tekstualni način rada poput ncurses radi olakšanja razvoja šireg opsega aplikacija grafičkog interfejsa za cross platforme.

Sintaksa

PHP se primarno ponaša kao softverski filter. PHP program uzima informacije iz datoteke ili toka (stream) koji sadrže tekst i specijalne PHP instrukcije i izbacuje drugi tok podataka za prikazivanje. Od PHP 4, parser kompajlira ulaz za proizvodnju bytecode-a kojeg obrađuje Zend Engine, dajući poboljšanu performansu od interpreterskog prethodnika. Zend Engine II je u srcu PHP 5.

Školski primjer programa Hello World za PHP izgleda na sljedeći način:

<?php
echo 'Hello, World!';
?>

PHP samo parsira kod unutar svojih delimitera, kao što su <?php i ?>. Sve izvan toga se direktno šalje na izlaz i ne parsira se od strane PHP-a. Gornji primjer je ekvivalentan sljedećem tekstu na izlazu:

Hello, World!

Primarno korištenje ovoga je radi omogućavanja PHP iskazima da budu uklopljeni u HTML dokumente, naprimjer:

<?php
// PHP iskazi ovdje
?>
Regularni HTML ovdje 
<?php
// Više PHP iskaza
?>

Ispred varijabli se dodaje simbol dolara ($), a primitivni tip se ne treba specificirati unaprijed. Za razliku od imena funkcija i klasa, imena varijabli su osjetljiva na veliko i malo slovo (eng.: case sensitive).

Pomoću dvostrukih navodnika (""), kao i heredoc stringova je moguće uklopiti vrijednost varijable u string.

PHP nove linije koda tretira kao whitespace. Iskazi se završavaju tačkom-zarezom (;) osim u nekoliko specijalnih slučajeva.

PHP ima tri tipa sintakse za komentare: /* */ za blok komentare, i // kao i # za inline komentare.

Primjer jednostavne funkcije u PHP-u:

<?php
function imeStranice()
{
echo "Wikipedia - Slobodna Enciklopedija";
}
echo "Ovo je ";
imeStranice();
?>

Rezultat:

Ovo je Wikipedia - Slobodna Enciklopedija

Tipovi podataka

PHP pohranjuje cijele brojeve u rangu koji zavisi od platforme. Ovaj rang je tipično za 32-bitne predznačene cijele brojeve (eng. integer).

Integer varijablama se mogu dodijeliti vrijednosti pomoću decimalne (pozitivne i negatine), oktalne i heksadecimalne notacije. Realni brojevi se pohranjuju u rang specifičan za platformu. Mogu biti specificirani korištenjem floating point notacije ili pomoću dvije forme naučne notacije.

PHP ima urođeni boolean tip, koji je tako i imenovan, slično boolean tipovima u Javi i C++. Korištenjem pravila za konverziju boolean tipova, vrijednosti različite od nule se mogu interpretirati kao true, a nula kao false, kao u Perlu.

Null tip podataka predstavlja varijablu koja nema vijednost. Jedina vrijednost u null tipu podataka je NULL.

Varijable "resursnog" tipa predstavljaju reference na resurse iz vanjskih izvora. Tipično ih kreiraju funkcije iz specifične ekstenzije, a mogu biti obrađivane samo od strane funkcija iz iste ekstenzije. Primjeri uključuju datoteku, sliku i resurse baze podataka.

Nizovi podržavaju i numeričke i string indekse, i heterogeni su. Nizovi mogu sadržavati elemente bilo kojeg PHP tipa, uključujući resurse, objekte, čak i druge nizove. Poredak se čuva u listama vrijednosti i u hash tabelama sa ključevima i vrijednostima, koji se mogu miješati.

Objekti

Osnovne funkcionalnosti objektno orijentisanog programiranja su dodate u PHP3. Upravljanje objektima je upotpunosti prerađeno za PHP 5, što se odrazilo na bolju performansu i više karakteristika. U prethodnim verzijama PHP-a, upravljanje objektima se obavljalo na isti načina kao i sa primitivnim tipovima. Mana ove metode je bila u tome što bi se cijeli objekt prekopirao kada bi se varijabla napunila ili bi se proslijedio metodi kao parametar.

In the new approach, objects are referenced by handle, and not by value. PHP 5 introduced private and protected member variables and methods, along with abstract classes and abstract methods. It also introduced a standard way of declaring constructors and destructors similar to that of other object-oriented languages, such as C++, and an exception handling model similar to that of other programming languages.

The static method and class variable features in Zend Engine 2 do not work the way some expect. There is no virtual table feature in the engine, so the static variables are bound with a name at compile time instead of with a reference.

If the developer asks to create a copy of an object by using the reserved word clone, the Zend engine will check if a __clone() method has been defined or not. If not, it will call a default __clone() which will copy all of the object's properties. If a __clone() method is defined, then it will be responsible to set the necessary properties in the created object. For convenience, the engine will supply a function that imports all of the properties from the source object, so that they can start with a by-value replica of the source object, and only override properties that need to be changed.

Resursi

Biblioteke

PHP includes a large number of free and open source libraries with the core build. PHP is a fundamentally Internet-aware system with modules built in for accessing FTP servers, many database servers, embedded SQL libraries such as embedded MySQL and SQLite, LDAP servers, and others. Many functions familiar to C programmers such as those in the stdio family are available in the standard PHP build.

Ekstenzije

PHP allows developers to write extensions in C to add functionality to the PHP language. These can then be compiled into PHP or loaded dynamically at runtime. Extensions have been written to add support for the Windows API, process management on Unix-like operating systems, multibyte strings (Unicode), cURL, and several popular compression formats. Some more unusual features include integration with Internet relay chat, dynamic generation of images and Adobe Flash content, and even speech synthesis. The PHP Extension Community Library (PECL) project is a repository for extensions to the PHP language.

Source code encoders, optimizers and accelerators

As with many scripting languages, PHP scripts are normally kept as human-readable source code, even on production webservers. While this allows flexibility, it can raise issues with security and performance.

Encoders offer some source code security and enable proprietary software by hindering source code reverse engineering. Encoders fall broadly into two types; those that hide source code and those that compile code into optcode. The downside of this latter approach is that a special extension has to be installed on the server in order to run encoded scripts, however the approach of encoding compiled code and use of an extension offers typically the best performance, security and opportunity for additional features that may be useful for developers. Compiled code solutions may exploit the potential for increased security through the use of their own execution engine, although some simpler solutions rely on the regular PHP engine to execute the compiled code. The most commonly used packages for source code protection are from Zend Technologies and ionCube Ltd.

Code optimizers improve the quality of the compiled code by reducing its size and making changes that can reduce the execution time and improve performance. The nature of the PHP compiler is such that there are often many opportunities for code optimization.

Accelerators offer performance gains by caching the compiled form of a PHP script in shared memory to avoid the overhead of parsing and compiling the code every time the script runs. They may also perform code optimization to provide increased execution performance. Both commercial (e.g. Zend Platform) and open source accelerators (e.g. xcache, eAccelerator, APC) are available.

Debuggers and profilers

Debuggers and profilers allow developers to analyze running PHP code for potential and noted software bugs and bottlenecks. Examples of such software for PHP include APD and Xdebug.

Templating engines

Templating engines provide macros that allow PHP applications to uniformly identify common variables. One popular templating engine is Smarty. PHP itself makes a good templating engine.

PEAR

The PHP Extension and Application Repository (PEAR) project aims to provide reusable libraries and components for PHP development. PEAR projects are usually written in PHP code using the Object-oriented programming paradigm.

Support

PHP has a formal development manual that is maintained by the free software community. In addition, answers to many questions can often be found by doing a simple internet search. PHP users assist each other through various media such as chat, forums, newsgroups and PHP developer web sites. In turn, the PHP development team actively participates in such communities, garnering assistance from them in their own development effort (PHP itself) and providing assistance to them as well. There are many help resources[7] available for the novice PHP programmer.

Criticism

Criticisms of PHP include those general criticisms ascribed to other scripting languages and dynamically typed languages. This list includes criticisms that have been rectified in recent versions.

  • PHP originally inserted data received over the network directly into the language namespace ("register_globals"), leading to confusion between trusted and untrusted data, and unnecessary potential for security holes in PHP applications. This behavior was turned off by default from version 4.2.0 released in April 2002.[8] However, this feature is still being used by some legacy applications[9].
  • PHP has traditionally used features such as "magic_quotes_gpc" and "magic_quotes_runtime" which attempt to escape apostrophes (') and quotes (") in strings in the assumption that they will be used in databases, to prevent SQL injection attacks. This leads to confusion over which data is escaped and which is not, and to problems when data is not in fact used as input to a database. [10]
  • PHP does not have complete native support for Unicode or multibyte strings. [11]
  • PHP does not enforce the declaration of variables prior to their use, and variables which have not been initialized can have operations (such as concatenation) performed on them; an operation on an uninitialized variable raises an E_NOTICE level error, but this is hidden by default.
  • PHP has no namespace support, which leads to a very large amount of globally available functions that can easily number into the thousands.
  • PHP's dynamic type conversion could potentially cause problems. Variable types in PHP, although they exist, are transparent to the programmer. Some may consider this a feature, as a variable can change from a number to a string and back again without extra lines of code. However, variable type errors are not detected at compile-time, and the dynamic-typing behavior lacks full predictability.
  • The standard function library lacks internal consistency. Many functions perform relatively similar actions and have different name standards and argument orders. For example:
    • Argument consistency: strpos($haystack, $needle) vs. in_array($needle, $haystack)
    • Naming convention: both of these work case-insensitively strcasecmp() vs. stristr() but the former indicates this with "case" while the later does with "i"
    • Function name consistency: strpos() vs. str_replace()
  • Functions are not first-class objects. This requires referencing functions by strings and object methods as a two-element array of the object and method name as a string. Consequently, anonymous functions are also referenced by string.
  • Lack of late static binding [12]
  • Some portability issues with 32-bit and 64-bit integers, and sometimes unsigned integers get converted to signed values.[13]

Važni datumi izdavanja

Verzija Datum izdavanja Najvažnije promjene
PHP 1.0 8. juni 1995. Zvanično nazvan "Personal Home Page Tools (PHP Tools)". Prva upotreba imena "PHP".
PHP Version 2 (PHP/FI) 16. april 1996. Od strane svog tvorca smatran za "najbrži i najjednostavniji alat" za kreiranje dinamičkih web stranica.
PHP 3.0 6. juni 1998. Razvoj umjesto jednog uključuje više razvijača. Zeev Suraski i Andi Gutmans nanovo pišu osnovu za ovu verziju.
PHP 4.0 22. maj 2000. Dodan napredniji dvofazni parsiraj/izvrši tag-parsing sistem nazvan Zend engine.
PHP 4.1 10. decembar 2001. Uvedeni superglobali ($_GET, $_SESSION, itd.)
PHP 4.2 22. april 2002. Onemogućavanje register_globals se podrazumijeva
PHP 4.3 27. decembar 2002. Uveden CLI, kao dodatak za CGI
PHP 4.4 11. juli 2005.
PHP 5.0 13. juli 2004. Zend Engine II s novim objektnim modelom.
PHP 5.1 25. novembar 2005.
PHP 5.2 2. novembar 2006. Omogućavanje filterskih ekstenzija se podrazumijeva

Dalji razvoj

PHP 6, u razvoju od jula 2007., ima za cilj neke od PHP 5 nedostataka.[14]

  • Namespace support will be added
  • podrška za izvorni Unicode će biti dodata
  • opcija magic_quotes će biti uklonjena
  • HTTP_*_VARS globalne varijable će biti uklonjene
  • opcija register_globals će biti uklonjena
  • opcija safe_mode će biti uklonjena

Reference

  1. ^ "Introduction". PHP Manual. Pristupljeno 2006-11-15. CS1 održavanje: nepreporučeni parametar (link)
  2. ^ Lerdorf, Rasmus. "Re: There ARE other scripting languages besides PHP". Slashdot.org. CS1 održavanje: nepreporučeni parametar (link)
  3. ^ "Zend Engine version 2.0: Feature Overview and Design". Zend Technologies Ltd. Pristupljeno 2006-09-17. CS1 održavanje: nepreporučeni parametar (link)
  4. ^ php.net 2007 news archive
  5. ^ http://www.onlamp.com/pub/a/php/2004/07/15/UpgradePHP5.html
  6. ^ http://php.net/usage.php
  7. ^ http://php.net/support
  8. ^ PHP Manual: Chapter 29. Using Register Globals
  9. ^ http://www.oscommerce.info/kb/osCommerce/Installation_and_Upgrades/46
  10. ^ Rasmus Lerdorf's thoughts about PHP6
  11. ^ Overview of PHP function which are currently Unicode compatible (in CVS)
  12. ^ http://www.digitalsandwich.com/archives/53-Late-Static-Binding-in-PHP.html retrieved March 28, 2007
  13. ^ "Integers in PHP, running with scissors, and portability". MySQL Performance Blog. 27 March 2007. Pristupljeno 2007-03-28. Provjerite vrijednost datuma u parametru: |date= (pomoć)CS1 održavanje: nepreporučeni parametar (link)
  14. ^ http://www.php.net/~derick/meeting-notes.html

Preporučena literatura

Također pogledajte

Vanjski linkovi