Ebooks, Audobooks and Classical Music from Liber Liber
a b c d e f g h i j k l m n o p q r s t u v w x y z





Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
PHP – Wikipedia

PHP

Wikipedia

Paradigma olio, proseduraalinen
Tyypitys heikko
Yleinen suoritusmalli -
Muistinhallinta automaattinen
Julkaistu 1995
Kehittäjä The PHP Group
Viimeisin vakaa versio -
Viimeisin julkaisupäivä 13. tammikuuta 2006
Viimeisin kehitysversio -
Merkittävimmät toteutukset -
Vaikutteet C, Perl
Vaikuttanut -
Murteet -
Käyttöjärjestelmä alustariippumaton
WWW-sivut http://www.php.net
Uutisryhmä comp.lang.php

(muokkaa)

Sisällysluettelo

PHP (lyhenne sanoista PHP Hypertext Preprocessor) on Perl-sukuinen ohjelmointikieli, jota käytetään etenkin Web-palvelinympäristössä luotaessa dynaamisia sivuja. Pelkän ohjelmointikielen lisäksi PHP-ympäristöön kuuluu laaja luokkakirjasto.

PHP on komentosarjakieli. Näissä kielissä ohjelmakoodi tulkitaan vasta ohjelman suoritusvaiheessa ohjelman kääntämisen sijaan. Tämä helpottaa ohjelman testailua ja nopeuttaa sen muuttamista, koska käännösvaihe jää pois.

Ensimmäiset PHP:n versiot julkaistiin 1995, ja nykyisin PHP on vertailuissa [1] johtava dynaamisten web-palveluiden tuottamiseen tarkoitettu kieli.

[muokkaa] PHP ja alustat

PHP:tä voidaan käyttää useilla eri alustoilla ja ohjelmistoilla. Yleisimmät yhdistelmät ovat:

* Kirjainyhdistelmässä kirjain P voi tarkoittaa myös Perl- tai Python-skriptauskieltä

[muokkaa] PHP:n historia

[muokkaa] PHP/FI

Vuonna 1995 Rasmus Lerdorf julkaisi kokoelman Perl-skriptejä (tällöin vielä nimeltään Personal Home Page Tools). Pian Lerdorf alkoi tarvita laajempaa toiminnallisuutta ja kirjoitti kokoelmaan laajennuksen C-ohjelmointikielellä. Laajennukseen sisältyi muun muassa mahdollisuus kommunikoida tietokantojen kanssa, mikä mahdollisti sivujen tuottamisen tietokannoista haetun tiedon perusteella. Jo tässä vaiheessa Lerdorf päätti, että PHP/FI (Personal Home Page / Forms Interpreter) on avoimen lähdekoodin projekti, jotta kuka tahansa voisi jatkokehittää ja korjata ohjelmointivirheitä projektista.

Marraskuussa 1997, kun PHP/FI 2.0 julkaistiin, käyttäjiä oli jo useita tuhansia ympäri maailmaa. Noin 50 000 domainia (1% kaikista internetin domaineista) kertoi asentaneensa paketin ja useat ihmiset osallistuivat laajennuksen kehittämiseen (vaikka projekti oli yhä Rasmus Lerdorfin päävastuulla). Pian PHP/FI 2.0 julkaisun jälkeen ensimmäiset alfaversiot PHP 3:sta julkaistiin.

[muokkaa] PHP 3

Yhdeksän kuukautta kestäneen beetatestausvaiheen jälkeen kesäkuussa 1998 julkaistiin PHP 3. Se oli ensimmäinen versio, joka muistutti hyvin paljon nykyisin tunnettua PHP:ta. Tämän kehittivät Andi Gutmans ja Zeev Suraski uudelleenkirjoittamalla lähestulkoon koko lähdekoodin, todettuaan PHP/FI 2.0 riittämättömäksi internetkaupanteon tarpeisiin. PHP/FI 2.0 käyttäjien hyödyksi Gutmans, Lerdorf ja Suraski tekivät yhteistyötä, ja julkaisivat PHP 3:n virallisena PHP/FI 2.0:n seuraajana. Julkaisun myötä PHP/FI:n jatkokehitys lopetettiin ja siirryttiin kehittämään PHP:ta (PHP: Hypertext Preprocessor, katso myös rekursiivinen nimeäminen).

Yksi PHP 3:n suurimmista vahvuuksista oli laajennettavuus. PHP 3 laaja, loppukäyttäjille suunnattu kirjasto, houkutteli projektiin mukaan tusinoittain uusia kehittäjiä, joka oli lopuksi avain PHP:n laajaan menestykseen.

Vuoden 1998 lopussa PHP:lla oli käyttäjiä kymmeniä tuhansia, sadattuhannet websivut ilmoittivat käyttävänsä PHP:ta ja noin 10% kaikista internetin palvelimista sisälsi tuolloin tuen PHP:lle.

[muokkaa] PHP 4

Talvella 1998 Gutmans ja Suraski aloittivat PHP:n ytimen uudelleenkirjoittamisen vain vähän PHP 3:n julkaisun jälkeen. Heidän tavoitteenaan oli ydin, joka tukisi kolmansien osapuolten ohjelmointirajapintoja.

Vuonna 1999 esitelty uusi ydin, Zend Engine (Zend, yhdistetty nimistä Zeev ja Andi) onnistui tavoitteessaan erinomaisesti. Maaliskuussa 2000 julkaistu PHP 4 käytti ytimenä kehitettyä Zend Engineä, tukien muun muassa useita webpalvelinohjelmistoja, HTTP-istuntoja, tuloksen puskurointia, ja turvallisempia tapoja käsitellä käyttäjiltä tulevia syötteitä, sekä joitakin uusia kielikohtaisia muuttujia.

[muokkaa] PHP 5

PHP 5 julkaistiin heinäkuussa 2004. PHP 5:n ytimenä on Zend Engine II, joka muun muassa tukee olio-ohjelmointia täydellisesti (PHP 4 tuki olio-ohjelmointia vain rajoitetusti), sisältää sisäänrakennetun tietokantamoottorin (SQLite) sekä paljon muuta. Versio 5.1, joka julkaistiin marraskuussa 2005, sisältää mm. täysin uudelleenkirjoitetun päiväys- ja aikakirjaston.

[muokkaa] Kielen perusominaisuudet

Jokaisella ohjelmointikielellä on omat perusominaisuutensa. Tämä kappale käsittelee PHP:n perusominaisuuksia kuten perussyntaksia, muuttujatyyppejä, muuttujia ja operaattoreita. Aivan lopusta löytyy vielä muuta huomioitavaa joka käsittelee yleisiä kohtia kielen perusominaisuuksista.

[muokkaa] Perussyntaksi

Perussyntaksi eli koodin kielioppi määrittelee, miten kielelle kerrotaan tulkittavat lausekkeet, ja missä muodossa ne kerrotaan.

[muokkaa] Koodilohkon merkitseminen

  1. Suositeltu [2] tapa merkitä koodilohkon alku ja loppu on <?php ja ?> (niin kutsuttu pitkä aloitustagi). Tämä tapa on turvallisin siinä mielessä, että se ei sekoitu esimerkiksi XHTML-määrityksen <? -aloitukseen, joka aiheuttaa monille aloitteleville PHP-koodaajille päänvaivaa luomalla virheen PHP:n tulkkauksessa.
  2. On myös mahdollista käyttää lyhyttä aloitustagia <? ja ?>(short_open_tag). Tässä on kuitenkin riskinä se, että PHP:n ulkopuolella tulostettava XHTML-määritys aiheuttaa PHP-tulkille virheen. Vaikka PHP:ssa on määritelty short_open_tag-asetus on-tilaan oletuksena, ovat useat palvelimet poistaneet tämän ominaisuuden käytöstä.
  3. Tarvittaessa voidaan käyttää myös script-aloitustagia. Tässä haittapuolena on se, että PHP:n sisällä tulostettava </script> saattaa aiheuttaa virheellisesti toimivaa koodia.
  4. ASP:n aloitustagi on niin ikään hyväksyttyjen aloitustagien listalla. Tällöin ASP:n ja PHP:n yhteiskäyttö ei ole kuitenkaan mahdollista.

Esimerkkejä erilaisista koodilohkon merkintätavoista:

<!-- Pitkä aloitustagi, suositeltu tapa -->
<?php echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; ?>

<!-- Lyhyt aloitustagi, saattaa aiheuttaa ongelmia etenkin XHTML-sivujen kanssa -->
<? echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; ?>

<!-- script-aloitustagi, niin ikään ongelmainen etenkin tulostettaessa script-lohkoja PHP:n sisällä -->
<script language="php">
echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>';
</script>

<!-- ASP-tyylinen aloitustagi, estää ASP:n ja PHP:n yhteiskäytön -->
<% echo '<p>Tässä on PHP-tulkin tuottama teksti.</p>'; %>

[muokkaa] Lausekkeiden erottelu

PHP:ssa, samoin kuin C:ssa tai Perlissa, lauseet erotetaan toisistaan puolipisteen (;) avulla. Käytännössä tämä useimmiten tarkoittaa, että koodin rivit on päätettävä puolipisteeseen. Koodilohkon viimeistä riviä ei kuitenkaan välttämättä tarvitse sulkea, vaan PHP luo automaattisesti ennen lopetustagia puolipisteen.

Esimerkkejä tavoista sulkea lauseke

<?php
echo "Hei, maailma!";
?>

<?php echo "Hei, maailma!"; ?>

<?php
echo "Hei, maailma!"
?>

<?php echo "Hei, maailma!" ?>

PHP-tulkki jättää kommenttien lisäksi huomioimatta puolipisteellä suljetut tyhjät (ei mitään tai vain tulostumattomia merkkejä sisältävät) rivit.

[muokkaa] Kommentointi

PHP tukee useita erilaisia kommentointityyppejä, niin yksirivisiä kuin monirivisiäkin.

Esimerkkejä erilaisista kommentointityyleistä

<?php

// Tämä on tavanomaisin tapa kommentoida yksirivisenä kommenttina
echo "Hei "; // Myös lausekkeen lopussa

# Myös shell-tyylinen kommentointi on mahdollista
echo "maailma!"; # Myös lausekkeen lopussa

/* Tämä on
   monirivinen
   \\\/// kommentti
   joka ***
   päättyy vasta
   lopetusmerkkiin */

?>

Kommenttien käyttötarkoituksina on:

  1. Pitkien koodien avaaminen ja selkeyttäminen kertomalla mitä koodi kulloinkin "tekee"
  2. Eri osa-alueiden erottelu visuaalisesti
  3. Koodilohkojen ja yksittäisten lausekkeiden käytöstä poisto
  4. Skriptin kehittelijöiden mainitseminen skriptin alussa

Tulkattaessa PHP:tä tulkki jättää huomioimatta kommentit, eikä kommentointi juuri lainkaan hidasta suoritusta.

[muokkaa] Muuttujatyypit

Suomenkielinen nimi * Englanninkielinen nimi Tyyppimuunnos ** Esimerkki
Skaalautuvat muuttujatyypit
totuusarvo boolean bool, boolean
TRUE, FALSE
kokonaisluku integer int, integer
123, +123, -123, 0123, 0x1A, 2147483647
liukuluku float, double float, double, real
1.23, +1.23, -1.23, 1.2e3, 7E-10
merkkijono *** string string
'Hei, maailma!', "Hei, maailma!"
Yhdistelmämuuttujatyypit
taulukko array array
array ("yksi", "kaksi", "kolme", 1, 1.23)
objekti object object
-
Erikoismuuttujatyypit
resurssi resource -
-
tyhjä NULL -
-
Pseudomuuttujatyypit
- mixed -
-
numeraali number -
-
- callback -
-

* vain suomen kielessä vakiintuneet termit
** lyhenteet joita käytetään tyyppimuunnoksissa
*** katso myös heredoc-syntaksi

[muokkaa] Muuttujat

Muuttujat määritellään dollarimerkin ($) avulla ja ne ovat kirjainkokoriippuvaisia. Muuttujan tulee alkaa aloitusmerkin jälkeen kirjaimella tai alaviivalla, tämän jälkeen voidaan käyttää kirjaimia, numeroita sekä alaviivaa.

Muuttujaa voi käyttää muuttujan nimenä. Esimerkiksi "${$nimi} = 5" asettaisi muuttujan, jonka nimi on muuttujassa $nimi, arvoksi kokonaisluvun 5. Tulostettaessa muuttujien perään tekstiä, voidaan käyttää muuttujan erottelemiseksi myös kaarisulkeita.

Esimerkki muuttujista

<?php

$muuttuja = 1;             // oikein
$määrite = "yksi";         // oikein
$_kolmas4_ = 0.75;         // oikein
$3neljännes = 0.75;        // väärin, muuttuja ei saa alkaa numerolla

$heimaailma = "Hei,";
$heiMaailma = "maailma!";

echo "$heimaailma $heiMaailma"; // Tulostaisi: Hei, maailma!

?>

[muokkaa] Operaattorit

Operaattori Suomenkielinen nimi Englanninkielinen nimi Esimerkki
Matemaattiset operaattorit
+ yhteenlasku addition
$a = 5 + 3;
- vähennyslasku subtraction
$a = 5 - 3;
* kertolasku multiplication
$a = 5 * 3;
/ jakolasku division
$a = 5 / 3;
% jakojäännös modulus
$a = 5 % 3;
Sijoitusoperaattorit
= sijoita assign
$a = 5;
+= lisää ja sijoita add and assign
$a += 5; /* vastaa */ $a = $a + 5;
-= vähennä ja sijoita subtract and assign
$a -= 5; /* vastaa */ $a = $a - 5;
*= kerro ja sijoita multiple and assign
$a *= 5; /* vastaa */ $a = $a * 5;
/= jaa ja sijoita divine and assign
$a /= 5; /* vastaa */ $a = $a / 5;
%= jakojäännös sijoitettavasta modulus from assign
$a %= 5; /* vastaa */ $a = $a % 5;
Vertailuoperaattorit
== löyhä vertailu loose comparison
$a == 5
=== tiukka vertailu strict comparison
$a === 5
> suurempi kuin greater than
$a > 5
< pienempi kuin lesser than
$a < 5
>= suurempi tai yhtäsuuri kuin greater or equal than
$a >= 5 /* vastaa */ $a > 5 || $a == 5
<= pienempi tai yhtäsuuri kuin lesser or equal than
$a <= 5 /* vastaa */ $a < 5 || $a == 5
<>, != erisuuri kuin different than
$a <> 5 /* vastaa */ $a < 5 || $a > 5
!== erisuuri tai eri tyyppiä kuin different or different type than
$a !== 5
? : vertaileva sijoitus ternary
$a = $a < 5 ? 0 : 10;
Loogiset operaattorit
AND, && ja and
$a == 5 && $a != 10
OR, || tai or
$a == 5 || $a != 10
XOR poissulkeva tai xor
$a == 5 XOR $a != 10

[muokkaa] Muuta huomioitavaa

  1. PHP on heikosti tyypitetty kieli [3]. Tämä tarkoittaa sitä, että muuttujia ei tarvitse esitellä ennen käyttöä (vaikka tämä aiheuttaakin PHP:n virheenhallintajärjestelmässä huomautuksen (E_NOTICE), ja on hyvin epäsuositeltavaa), ja muuttuja voi vaihtaa tyyppiä kesken skriptin suorituksen.
  2. Muuttujatyyppiä ei tarvitse, eikä saa, erikseen määritellä. PHP valitsee itse muuttujatyypin, joka sopii muuttujaan sijoitettavaan arvoon. Tarvittaessa PHP automaattisesti muuttaa muuttujatyypin (esim. lisättäessä kokonaislukuun liukuluku). Tarvittaessa muuttujille voidaan kuitenkin suorittaa tyyppimuunnos joka tekee muuttujasta valitun tyyppisen.
  3. Kielen perusominaisuuksiin kuuluu heterogeeninen taulukko. Tällöin taulukko voi sisältää useita erityyppisiä muuttujia alkioissaan.

Esimerkkejä muista huomioista:

<?php

$luku = "Luku on: "; // muuttuja $luku on nyt merkkijono (string)
echo $luku;

$luku = 256;         // muuttuja $luku vaihtuu kokonaisluvuksi
echo $luku;

// Lopputulos olisi: "Luku on: 256"

// Heterogeeninen taulukko
$taulukko = array (
    1,                                  // Kokonaisluku
    2.22,                               // Liukuluku
    "1 ja 2.22 ovat taulukon alkioita", // Merkkijono
);

?>

[muokkaa] PHP:n käyttö

PHP rakentuu hyvin pitkälle valmiin luokkakirjaston käyttöön. Luokkakirjasto tukee useita eri alueita kuten HTTP-protokollaa, useiden eri tiedostotyyppien muokkausta, tietokannan hallintaa sekä paljon muuta. Kappaleen lopussa löytyvistä tietoturvavinkeistä saat hyödyllisiä vihjeitä turvallisten asetusten sekä koodauskäytäntöjen osalta.

[muokkaa] PHP:hen kuuluvat luokkakirjastot

Pääartikkeli: PHP:n luokkakirjastot
  • RPMReader
  • Semaphore
  • SESAM
  • Session PgSQL
  • Sessions
  • shmop
  • SimpleXML
  • Sockets
  • spl
  • statistics
  • Stringss
  • Sybase
  • Tokenizer
  • URLs
  • Variables handling
  • W32api
  • XML
  • YP/NIS

[muokkaa] Tietokannan käyttö

PHP on tukenut versiosta neljä lähtien kolmansien osapuolien ohjelmointirajapintoja. Tämä on mahdollistanut laajan tuen eri tietokannoille ja niiden tehokkaalle hyödyntämiselle.

Tietokantakohtaiset luokkakirjastot

Tietokantakohtaiset luokkakirjastot tarjoavat laajan tuen tietokannan käyttämiseksi. Tuettuina tietokantoina ovat muun muassa MySQL, PostgreSQL, SQLite ja Oracle.

ODBC

Monikäyttöinen ODBC-luokkakirjasto tarjoaa yhtenäisen rajapinnan muun muassa Adabas D, IBM DB2, iODBC, Solid, ja Sybase SQL Anywhere tietokantoihin. Kun tarvitaan joustavuutta ja mahdollisuutta siirtyä tietokannasta toiseen, on ODBC:n käyttö suositeltavaa.

[muokkaa] Olio-ohjelmointi

Ennen versiota kolme PHP ei sisältänyt mahdollisuutta olio-ohjelmointiin. PHP 3 sisälsi hyvin minimaalisen tuen olio-ohjelmoinnille, ja sama semantiikka tuli käyttöön myös PHP 4:ssa.

Kuitenkin PHP 5:sta lähtien olio-ohjelmointi on ollut lähestulkoon täydellisesti tuettuna. Ominaisuudet, jotka tulivat PHP:hen mukaan vitosversiossa, ovat seuraavat:

  • Uusi oliomalli
    • Uudessa oliomallissa PHP käsittelee oliota resursseista tutuilla viittauksilla, kun aikaisemmin käsittelytapa oli enemmänkin primitiivimuuttujan (kuten kokonaisluvun tai merkkijonon) tyylinen. Etuna tässä on se, että nykyisin koko oliota ei tarvitse kopioida lähetettäessä sitä muuttujalle tai metodille, ja olion eri osa-alueiden käsittely nopeutuu sekä helpottuu.
  • Yksityinen- ja suojattu-määritykset muuttujille ja metodeille
    • Aikaisemmin PHP ei ole tukenut kuin julkisen luokan määrityksiä.
  • Abstraktit luokat ja metodit
    • PHP 5 sisältää myös tuen abstrakteille luokille ja metodeille. Mikäli olio sisältää abstrakteja metodeja, tulee sen olla myös abstrakti luokka.
  • Käyttöliittymät
    • Luokkaan voidaan sisällyttää omavaltainen luettelo käyttöliittymistä.
  • Olion monistaminen (kloonaus)
    • Kun luodaan kopiota oliosta avainsanalla clone, suoritetaan olion __clone() mikäli sellainen löytyy.
  • Yhdenmukaistettu muodostin sekä tuhoamismenetelmä
    • Aikaisemmissa PHP:n versioissa muodostin (constructor) on toteutettu luokan nimen metodilla. Uusi, yhdenmukaistettu tapa on __construct().
    • PHP ei ole ennen versiota viisi tukenut luokan tuhoamista (destructor)-metodin avulla. PHP 5 käynnistää __destructor() -metodin mikäli viimeinen viittaus olioon tuhotaan. Luokan tuhoaminen vapauttaa muistin ja suorittaa muut metodille määritellyt tehtävät.
  • Poikkeuskäsittelijät
    • PHP 5 sisältää poikkeuskäsittelijät (exception handling) olioille.

Lisätietoja PHP 5:n olioista löytyy PHP:n manuaalin luvusta 19. Classes and Objects (PHP 5)

[muokkaa] Tietoturvavinkkejä

Tämä kappale käsittelee PHP:n tietoturvaa, ja etenkin sitä, kuinka pystyt tekemään tietoturvallisempaa koodia [4].

[muokkaa] Asetukset

PHP:n asetuksia säädetään php.ini -tiedostosta. Tämä määrittelee monia perustason asetuksia, joista osa saattaa olla haitallisia tietoturvan kannalta. Kannattaa kiinnittää huomiota ainakin seuraaviin riveihin:

  • register_globals
    • Yksi PHP:n vaarallisimmista asetuksista päällä pidettäväksi. Kun register globals on kytkettynä, voidaan globaaleista taulukoista (kuten $_POST) käyttää muuttujia suoralla nimellä (esimerkiksi lomakkeelta tuleva $_POST['nimi'] löytyy valmiiksi muuttujasta $nimi). Tämä yhdistettynä heikosti tarkastettuun syötteeseen ja tietokantaan antaa mahdollisuuden käyttää tietokantaa vastaan haavoittuvuutta pelkän osoiterivin avulla (esimerkiksi vanhemmassa PHP:ssä toiminut http:://www.foo.bar/index.php?nimi=%27%20%27;%20DROP%20DATABASE%20db eli kyselystä tuleekin "SELECT * FROM taulu WHERE nimi = ' '; DROP DATABASE db").
  • error_reporting
    • Määrittelee virheilmoitusten näyttötason (oletuksena näytetään kaikki paitsi E_NOTICE-luokan virheilmoitukset). Virheilmoitukset kertovat kehittäjälle mikä meni väärin ja missä. Myös huomautukset ovat hyödyllisiä ilmoituksia ehkäisten esimerkiksi ohjelmointivirheiden syntymistä kun muuttujaa, jota ei ole olemassa, käsitellään. Tämän asetuksena kannattaisi olla E_ALL, ja näkyvyyttä kehitysympäristön ja käyttäjille näytettävän ympäristön välillä tulisikin säätää error_reporting-asetuksen avulla.
  • safe_mode
    • Safe mode -tila estää palvelimen kannalta kriittisten funktioiden (kuten exec) ajamisen tietyin rajoittein, sekä rajoittaa PHP:n oikeutta käyttää vain omia tiedostoja ja hakemistoja. Monesti tätä ei pidetä päällä (johtuen mm. lähestulkoon mahdottomuudesta luoda hakemistoja), mutta tämän päällä pitääminen lisää tietoturvaa huomattavasti.
  • magic_quotes_gpc
    • Määrittelee asetetaanko käyttäjiltä tuleviin syötteisiin (GET, POST, COOKIE) automaattisesti karkausmerkit. Tämä on syytä pitää päällä, mutta ohjelmoija ei saisi kuitenkaan liikaa nojautua tämän tuomaan turvallisuuteen. Esimerkiksi MySQL-tietokantaa käytettäessä tämä lisäisi vain lainausmerkkien eteen karkausmerkit, mutta jättäisi huomioimatta MySQL-tietokannan kannalta monia muita kriittisiä merkkejä.
  • short_open_tag
    • Määrittelee, ovatko lyhyet aloitustagit ("<?") sallittuja. Ei sinänsä liity tietoturvaan, mutta erittäin tärkeä asetus, jos PHP-tiedostoissa aiotaan käyttää XML-pohjaista merkkausta.

[muokkaa] Koodi

  • Tarkista käyttäjältä tuleva syöte
    • Kun vastaanotat käyttäjältä syötteitä, muista tarkistaa sen sisältö (kokonaisluvut ovat kokonaislukuja, ettei teksti sisällä virheellisiä merkkejä ja niin edelleen) ennemmin kuin käyttäisit syötteitä suoraan. Hyödyllisiä funktioita syötteiden tarkistamiseen ovat esimerkiksi is_int, is_float sekä tekstisyötteiden varmistamiseen addslashes ja {tietokanta}_real_escape_string (tai {tietokanta}_escape_string mikäli real escape string ei löydy käyttämäsi tietokannan funktioista).
  • Tarkista muuttujan olemassaolo
    • Ennen muuttujan käyttämistä esimerkiksi ehtolauseessa kannattaa miettiä muuttujan olemassaolon tarkastamista. Tähän hyödyllisiä funktioita ovat isset ja tyhjän muuttujan hylkäämiseksi empty.
  • Löyhä vertailu vs. tiukka vertailu
    • Kannattaa miettiä tilanteen mukaan kumpaa käyttää. Jotkut PHP:n funktioista saattavat palauttaa FALSE tai onnistuneena tuloksena löyhän vertailun FALSEn (esimerkiksi nolla tai tyhjä merkkijono). Käyttämällä tiukkaa vertailua === vertaillaan sekä sisältö että tyyppi.
  • Näytä virheet vain itsellesi
    • Kun kehität palvelua, pidä virheilmoitukset päällä tasolla E_ALL. Kun teet virheetöntä koodia tällä asetuksella, olet askelta lähempänä tietoturvaa. Käyttäjille suunnatussa palvelussa virheilmoitukset kannattaa pitää myös päällä, mutta piilottaa ne näkyvistä error_reporting-asetuksen avulla. Tämä onnistuu esimerkiksi lisäämällä koodin alkuun ini_set("error_reporting", 0);.

[muokkaa] PHP:n kritiikki

PHP:ssä on joitain heikkoja puolia. Osa heikoista puolista on ratkaistu teknisesti, ja osaan on kehitteillä ratkaisuja. Osa taas puolestaan johtuu siitä, että monet PHP-ohjelmista ovat noviisien kirjoittamia ja kehitetty tiedostamatta kaikkia tietoturvanäkökantoja, varsinkin jos kieli ja sen dokumentaatio tekee vaarallisen lähestymistavan helpoksi.

  • Moni vanhempi ohjelmisto on kehitetty niin, että register_globals oletetaan olevan päällä. register_globalsia on pidetty erittäin vaarallisena, koska sen avulla tarkistamattoman datan havaitseminen on erittäin vaikeaa.
  • magic_quotes_gpc ja magic_quotes_runtime saattavat ratkaista SQL-injektio-ongelmia, mutta saattavat aiheuttaa sekaannusta normaalikäytössä. Lisäksi ne eivät välttämättä havaitse kaikkia tietokanta-ajurin tarvitsemia quote-tilanteita.
  • PHP ei tue monen tavun mittaisia merkkejä (esim. merkkijonoista voi tietää miten monta tavua ne vievät, mutta ei kuinka monta UTF-8-merkkiä siinä on), joten tuki Unicode-merkistöille on vielä ongelmallinen. Tuki on kuitenkin tulossa PHP 6:ssa.
  • PHP ei tue nimiavaruuksia, vaan kaikki funktiot ovat yhdessä nimiavaruudessa. Nimiavaruudet saattavat tulla PHP 6:ssa.
  • PHP:n sisäinen yhtenäisyys on hataraa. Jotkin kirjastofunktiot haluavat argumenttinsa eri järjestyksessä kuin toiset. Lisäksi on useita funktioita jotka näyttävät tekevän lähes samaa.
  • Jotkin kirjastot eivät ole säieturvallisia, joten niitä ei saa käyttää Apache 2:n MPM:n tai IIS:n ISAPIn kanssa.
  • PHP:n tietokantaraja-pinta on epäselkeä, verrattuna esim Javaan ja muihin ohjelmointikieliin.

[muokkaa] PHP:n sisarprojektit

GTK:n logo

PHP:lla on myös kolme sisarprojektia:

  • PEAR (PHP Extension and Application Repository)
  • PECL (PHP Extension Community Library)
  • PHP-GTK

[muokkaa] Tunnettuja projekteja jotka hyödyntävät PHP:tä

  • MediaWiki, suosittu wiki-järjestelmä, johon mm. Wikipedia pohjautuu
  • phpBB, suosittu keskustelusovellus
  • osCommerce, avoimen lähdekoodin webkauppasovellus

[muokkaa] Katso myös

[muokkaa] Lähteet

  1. ^  TIOBE Programming Community Index
  2. ^  Apache HTTP Server Version 2.0 dokumentaatio
  3. ^  PHP manuaali: perussyntaksi
  4. ^  PHP manuaali: tyyppimuunnos
  5. ^  PHP manuaali: tietoturva

[muokkaa] Aiheesta muuallla

[muokkaa] Kirjallisuutta

Yleisimmät ohjelmointikielet (kaikki) (muokkaa)

Tuotantokäytössä: Ada | APL | AWK | Assembly | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Java | JavaScript | Lua | Lisp | Objective-C | Pascal | Perl | PHP | PostScript | Python | Ruby | Smalltalk | TCL | Visual Basic

Akateemiset: Haskell | Logo | ML | Prolog | Scheme

Historialliset: ALGOL | BASIC | Modula-3 | MUMPS | Plankalkül | PL/I | Simula

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com