Tunnus:

Salasana:

Uusi käyttäjä

Haku

Pikalinkit

Kesähaaste 2010

Paranna Morpion-pelin kansainvälisiä ennätyksiä!

Ohjeet | Nettipeli | Tuloslista

Putkaposti

Suunnittele tiedosto, josta tulee suuri ZIP-paketti!

Vastauksia: 32
Paras: 1158

Tehtävään...

Keskustelu

Millä tavalla aiemmissa keskusteluissa esitetyn formin sijoittaminen tuohon linkin paikalle tuottaa ongelmia? (Nettisivut ja -ohjelmointi) lisää...


Oppaat: Käytännön PHP-opas

Kirjoittaja: Antti Laaksonen

Opassarja: [ 1 2 3 4 5 6 7 8 9 ]

Edellinen opas

Tulostettava versio: tämä opas | koko opassarja

Osa 9 - Vinkkejä ja vihjeitä

Miten voin muuttaa PHP:n asetuksia?Miksi lomakemuuttujat, evästeet jne. eivät (enää) välity skriptille?Mikä on vikana, kun tulee virheilmoitus "Parse error"?Miksi heitto- ja lainausmerkkien eteen tulee kenoviivoja?Mikä ovat oikeat oikeudet ("chmod-arvo") tiedostolle?Miten PHP:llä voi näyttää viesti-ikkunan, lukea hiiren koordinaatit jne.?Miten md5-funktio oikeastaan toimii?Kumpi on nopeampi: echo vai print?Kummat ovat parempia: evästeet vai istunnot?Kumpia pitäisi käyttää: tiedostoja vai tietokantaa?Viimeiset loppusanat

Tähän oppaaseen olen kerännyt vastauksia kysymyksiin, jotka esiintyvät usein PHP-aiheisilla keskustelupalstoilla ja joihin ei löydy kunnollista vastausta opassarjan aikaisemmista osista. Joihinkin kysymyksiin liittyy myös vääriä uskomuksia, joita pyrin oikomaan. Mainittakoon vielä, että Ohjelmointiputkan PHP-FAQ-listasta löytyy vastaus mm. moniin lomakkeisiin ja evästeisiin liittyviin kysymyksiin.

Miten voin muuttaa PHP:n asetuksia?

Monissa oppaissa ja artikkeleissa kehotetaan tekemään muutoksia PHP:n asetustiedostoon, mutta harvemmin muistetaan kertoa, missä tällainen tiedosto on ja kuinka sitä pystyy muuttamaan. Joten tässä kerrottakoon. Asetustiedosto löytyy siitä hakemistosta, johon PHP on asennettu, ja sen nimi on php.ini. Joskus hakemistossa saattaa olla ainoastaan php.ini-dist-niminen tiedosto, joka sisältää PHP:n oletusasetukset. Tällöin voit vaihtaa tiedoston nimen php.ini:ksi.

Asetustiedosto on tavallinen tekstitiedosto, ja sen rivien rakenne on:

; kommentti
asetus = arvo

Miksi lomakemuuttujat, evästeet jne. eivät (enää) välity skriptille?

PHP:n versiosta 4.2.0 eteenpäin register_globals-asetus on oletuksena kytketty pois päältä. Tästä johtuen ns. superglobaalit muuttujat (mm. lomakemuuttujat ja evästeet) eivät ole samannimisissä muuttujissa vaan ne on kaivettava esiin erillisistä taulukoista. Tämä muutos, joka on aiheuttanut melko monelle PHP-ohjelmoijalle aluksi harmaita hiuksia, johtuu siitä, että vanhalla tavalla toteutettuihin skripteihin saattaa helposti jäädä salakavalia tietoturva-aukkoja.

Muuttujat on jaettu taulukoihin niiden tyypin mukaan: $_GET- ja $_POST-taulukoissa on lomakkeiden kautta tulleet muuttujat, evästeet ja istunnot löytyvät $_COOKIE- ja $_SESSION-taulukoista ja $_SERVER-taulukko sisältää palvelimen tietoja. Muita superglobaaleja taulukkoja ovat $_ENV (ympäristömuuttujat), $_FILES (lomakkeen kautta lähetetyt tiedostot) ja $_REQUEST (lomakemuuttujat ja evästeet samassa taulukossa).

Esimerkiksi post-metodilla lähetetty lomakemuuttuja, jonka nimi on otsikko, löytyy nyt taulukosta $_POST['otsikko'].

Mikä on vikana, kun tulee virheilmoitus "Parse error"?

Todennäköisesti skriptissäsi on kirjoitusvirhe. Tarkista, että:
  • jokaisen lauseen perässä on puolipiste
  • sulkujen ja aaltosulkeiden loppuja on yhtä monta kuin alkuja
  • merkkijonojen sisällä lainaus- tai heittomerkkien edessä on kenoviiva
  • muuttujanimien edessä on dollarimerkki, funktionimien edessä ei
  • lauserakenteiden syntaksi on oikea
Virheilmoituksen kertoma rivi ei välttämättä ole täysin oikea, koska tämäntyyppinen virhe saattaa vaikuttaa vasta myöhemmillä riveillä.

Miksi heitto- ja lainausmerkkien eteen tulee kenoviivoja?

Todennäköisesti kysymys on lomakkeen kautta lähetetystä tekstistä. Ratkaisu ongelmaan on yksinkertainen: funktio nimeltä stripslashes poistaa juuri oikeista paikoista ylimääräiset kenoviivat.

Mikä ovat oikeat oikeudet ("chmod-arvo") tiedostolle?

Yleisesti ottaen: mitä vähemmän oikeuksia tiedostoon, sen parempi. Esimerkiksi jos skripti pelkästään lukee palvelimelle tallennetusta tekstitiedostosta pari riviä, tiedostoon ei varmaan tarvita kirjoitusoikeuksia. 777 eli täydet oikeudet on hyvin harvoin oikeasti tarpeellinen. Jos haluat pelata varman päälle, kokeile omalla palvelimellasi, mitä oikeuksia tiedostoon täytyy myöntää, jotta PHP pystyy lukemaan tai kirjoittamaan siihen (virheilmoitus "Access denied" kertoo, että oikeudet eivät ole riittävät).

Miten PHP:llä voi näyttää viesti-ikkunan, lukea hiiren koordinaatit jne.?

Ei valitettavasti mitenkään niin kauan kuin skripti suoritetaan palvelimella. Kun sivu lähtee palvelimelta matkaan käyttäjälle päin, mahdollinen PHP-koodi on jo suoritettu, eikä sivun lähdekoodissa pysty edes näkemään merkkejä PHP:n käytöstä. Näin ollen se pystyy saamaan aikaan yhtä paljon toiminnallisuutta käyttäjän puolella kuin tavallinen HTML-sivu. Tietysti sivu voi sisältää esimerkiksi JavaScript-koodinpätkän, joka aikanaan suoritetaan käyttäjän selaimessa.

Miten md5-funktio oikeastaan toimii?

Funktion toiminta on minusta helppo ymmärtää vertaamalla sitä jakojäännökseen. Esimerkiksi kun luku 12345 jaetaan 19:llä, jakojäännös on 14. Luvun 12345 jakojäännös 19:llä on siis aina 14, mutta luvusta 14 ei ole mahdollista saada selville, että alkuperäinen luku oli 12345. md5-funktio toimii samoin: se muodostaa merkkijonosta 32 merkkiä pitkän tarkistussumman, josta käytetään englanninkielistä nimeä hash. Toisin kuin jakojäännöksessä, käytännössä jokaisen merkkijonon hash on erilainen.

Esimerkiksi merkkijonon "Näin toimii md5-funktio" md5-hash on f7a5f38eba14b31c0656b6f3c7341dc3.

Turvallinen tapa tallentaa käyttäjien salasanat on tallentaa tiedostoon tai tietokantaan salasanojen md5-hashit. Kun käyttäjä kirjautuu sisään, hänen antamansa salasanan hashia verrataan alkuperäiseen hashiin. Jos ne ovat samat, salasana on oikea. Kuitenkin on hyvä muistaa, että näinkin tallennetun salasanan voi saada helposti selville kokeilemalla kaikkia vaihtoehtoja, jos salasana on lyhyt.

Kumpi on nopeampi: echo vai print?

Älä turhaan yritä optimoida PHP-skriptiä muutaman mikrosekunnin tähden, sillä sivun siirtäminen Internetin yli ja näyttäminen selaimessa kestää joka tapauksessa paljon kauemmin. Pyri ennemmin koodin selkeyteen. Vasta silloin, kun käyttäjä pystyy havaitsemaan ylimääräistä hitautta, skriptiä on syytä optimoida. Tällöin syynä ovat useimmiten huonosti suunnitellut tietokantahaut tai silmukkarakenteet.

Kummat ovat parempia: evästeet vai istunnot?

Ensinnäkin sensuuntaiset väitteet, että "istunnot toimivat useammalla käyttäjällä kuin evästeet", kannattaa jättää omaan arvoonsa, sillä useimmiten istunnon id-numero kuitenkin tallennetaan evästeeseen (toinen vaihtoehto on kuljettaa sitä URL-osoitteen mukana). Istuntojen käytössä on kuitenkin se hyvä puoli, että kaikki käyttäjän tiedot id-numeroa lukuun ottamatta tallennetaan palvelimelle. Näin tietoihin pääsee käsiksi ainoastaan PHP-skripti; ulkopuolelle jäävät niin tutkimushaluinen käyttäjä itse kuin ilkeämielinen hakkerikin.

Kumpia pitäisi käyttää: tiedostoja vai tietokantaa?

Riippuu tilanteesta. Jos tietoa on vähän tai se on muuttumatonta, tiedosto on oikea valinta. Tiedostoissa on myös se hyvä puoli, että niiden käyttö on mahdollista kaikilla palvelimilla. Jos tietoa taas täytyy jatkuvasti lisätä, muuttaa ja poistaa, ja sitä on tarkoitus näyttää sivulla eri tavoin järjestettynä ja karsittuna, tietokanta on varmaankin tarpeen. Esimerkkien avulla ilmaisten: Lapin-matkakertomus kannattaa tallentaa tiedostoon ja jalkapallojoukkueen pelitulokset tietokantaan.

Viimeiset loppusanat

Yhdeksän osan ja seitsemän kuukauden jälkeen alkaa opassarja olla lopussa. Oppaisiin on mahtunut melko paljon asiaa, ja toisin kuin aluksi suunnittelin, mukana on paljon muutakin kuin pelkät perusteet. Toivottavasti oppaista on myös ollut hyötyä sinulle PHP-opiskelussasi! Kuitenkaan oppaiden lukeminen ei yksinään riitä, vaan paljon tärkeämpi osa on omilla harjoituksilla ja kokeiluilla.

Palautetta voit lähettää sivun alareunassa olevalla lomakkeella tai sähköpostilla. Kerro samalla, mistä PHP-ohjelmointiin liittyvistä aiheista haluaisit jatkossa lukea Ohjelmointiputkasta.

Loppu.

Antti Laaksonen, 14.9.2003

Edellinen opas


Gwaur [14.09.2003 22:43:44]LainaaMuokkaa
Nyt se loppu :(
otto-ville [15.09.2003 23:44:49]LainaaMuokkaa
"Kumpi on nopeampi: echo vai print?"
Jäin kaipailemaan oikeata vastausta :)
Tulilintu [16.09.2003 16:00:07]LainaaMuokkaa
Print ja echo on toistensa aliaksia joten luulisin että molemmat on aika tarkkaan yhtänopeita.
odys [24.09.2003 22:23:45]LainaaMuokkaa
echo on nopeampi, koska se ei palauta TRUE/FALSE kuten print. Ero on kuitenkin aika mitätön :)

echossa on myös jotain pieniä eroja kuten: echo "Moi", " Hoi", " Hei"; // Toimii

Print "Moi", " Hoi", " Hei"; // Ei toimi

Ja Tulilintu Print ja echo ovat eri asia ei toistensa aliaksia.
makeuu [13.10.2003 22:19:32]LainaaMuokkaa
olen käyttäny enemmän echoa koska olen tottunut siihen
-Teme- [27.11.2003 12:31:18]LainaaMuokkaa
olen käyttäny enemmän echoa koska olen tottunut siihen

Hmm, kerrotko lisää?
makeuu [09.12.2003 21:10:47]LainaaMuokkaa
ei kait siinä ole kertomista :)
jonsku [18.01.2004 23:21:24]LainaaMuokkaa
Antti, pystyisitköhän tehdä näistä kaikista php-oppaista sellaisen että ne voisi imuroida omalle koneelleen vaikkapa yhdessä zip- paketissa.
irwinace [16.05.2004 23:23:58]LainaaMuokkaa
print ja echo? sama se on, kumpaa on tottunu käyttää, nii sitä sit käyttää..
mozak [05.06.2004 22:10:29]LainaaMuokkaa
Kirjoittajalle paljon kiitoksia tästä loistavaakin loistavammasta opassarjasta! :)
vOmpatti [08.02.2005 06:38:59]LainaaMuokkaa
Hyvä opas kiitokset ! :)
Matso [12.09.2005 21:55:11]LainaaMuokkaa
Hieno opas kokonaisuudessan, paljon oon oppinut.
Puhveli [17.09.2005 18:58:09]LainaaMuokkaa
Eikös echo ole nopeampi, koska php:tä tulkataan? Sillä sehän on yhden merkin lyhyempi. :)
Smappa [24.10.2005 21:47:13]LainaaMuokkaa
Mulle toi nopeus on ihan sama... Aika lailla samalla tahdilla ne toimii.
tomaattigeeni [24.11.2005 18:18:54]LainaaMuokkaa
hatunnosto sille joka kirjoittaa esimerkin skriptistä josta puolimegasen verkon yli tulkattaessa on havaittavisa printin ja echon ero edes millisekunteina.
stere [05.07.2006 14:58:55]LainaaMuokkaa
sekuntti kello käteen ja mittailemaan.
Tontsa-san [18.07.2006 20:18:59]LainaaMuokkaa
Näiden oppaiden avulla sitä on harjoteltu php:tä n. 1,5v ja nyt sen taitaa kun omat taskunsa :)
harma [06.01.2007 22:22:22]LainaaMuokkaa
Hyvät oppaat. Toivottavasti tulee jatkoa
Codeprofile [14.01.2007 15:36:25]LainaaMuokkaa
<offtopic>
No nyt onkin kiva tunne ;). Ensimmäisellä vilkaisukerralla en mitään tajunnut, sitten harjoittelee oppaan läpi (2h), ja vilkaisee uudelleen....
</offtopic>
zedo [06.04.2007 10:29:58]LainaaMuokkaa
Wow...
aina se niitten loppusanojen lukeminen vaan tuntuu yhtä mahtavalta/hienolta(/surulliselta). Melkein tulee tippa linssiin, vai pitäskö sanoa ruutuun...

Tän avulla mäki opin Php:tä sen verran ku nkyään osaan...

------------------

mä veikkaan et echo ois kyl nopeempi.
-onhan se 1 merkin lyhykäisempi
-ei palauta truefalseja
Kurko [15.05.2007 17:28:04]LainaaMuokkaa
PHP:ssä echo toimii myös näin:

<?php
$nimi = "Kalle";
?>
<html>
<body>
Nimi: <?=$nimi?>
</body>
</html>

Kätevä kun tulostetaan muuttujia html koodin seassa.
(Täytyy olla short_open_tag:it päällä jotta toimii)
Nizpu [22.09.2007 10:28:07]LainaaMuokkaa
Ei tää PHP ookkaan niin vaikeeta.. :o
kiitoksia oppaista!
z3zim4 [02.04.2008 18:56:44]LainaaMuokkaa
Kiitokset erittäin hyvästä opassarjasta, nyt vaan tekemään korttipelisivua :lol:
KMS [09.06.2008 19:05:51]LainaaMuokkaa
Kiitokset myös täältä, hyvä opas!
Pollapoju [03.07.2008 14:33:08]LainaaMuokkaa
Nyt pääsen lisäämään listaan PHP.
apsu [05.07.2008 07:35:22]LainaaMuokkaa
Siisti opas!!!
viltsu [16.08.2008 00:08:38]LainaaMuokkaa
Kiitokset selkeästä oppaasta!

Sain tehtyä näillä ohjeilla sivut itselleni, yksi asia jäi kuitenkin vaivaamaan:

Mistä mahtaa johtua, että Å, Ä ja Ö näkyvät tekstissä &#65533; -merkkeinä?

"Teemu Sel&#65533;nne on j&#65533;&#65533;kiekkoilija, h&#65533;n voitti Stanley Cupin vuosi sitten."

edit: täällä nuo neliöt muuttuvatkin näköjään sitten #65533 -koodiksi.
hant [26.11.2008 15:31:24]LainaaMuokkaa
Pitäisi saada tämmäöinen kyselylomake tehdyksi, mutta on niin pitkä aika kun olen käyttänyt PHP:ta että en muista, Voisiko joku jelppiä

Kiitti jo etukäteen


KYSELYLOMAKE

1. Sukupuoli Nainen
Mies

2. ikä alle 15
15-20
21-29
30-39
40-49
50-59
60-69
70-->

3. kengän kokoni on


4. Asuinpaikka Iisalmesta alle 50 km
Iisalmesta yli 50 km

5. käyn mieluiten ostoksilla

arkisin klo 9-12
arkisin klo 12-15
arkisin klo 15-18
arkisin klo 18-21
lauantaisin klo 9-12
lauantaisin klo 12-15
lauantaisin klo 15-18

6. Valitessani kenkiä ja laukkuja minulle on tärkeintä (laita tärkeysjärjestykseen)

ulkonäkö
hinta
lestin istuvuus
myyjän suositus
materiaali
kotimaisuus
myymälän viihtyisyys

7. Kerro minkälaisia kenkiä/laukkuja haluasit ostaa? Minkälaista kenkää/laukkua olet etsinyt?
Onko mielessäsi jokin tietty merkki, väri, malli?

8. Mikäli jätät yhteystietosi, osallistut 50€:n lahjakortin arvontaan avajaispäivänä
Dexter [21.01.2009 21:33:55]LainaaMuokkaa
Hyvä opas. Tän ansiosta sain jo vieraskirjan koodattua niin et se listaa viestit alas päin =) Pitäs kesksii miten ylös :P
Mut tosi hyvä opas
ankzilla [26.03.2009 18:57:52]LainaaMuokkaa
Dexter kirjoitti:
Hyvä opas. Tän ansiosta sain jo vieraskirjan koodattua niin et se listaa viestit alas päin =) Pitäs kesksii miten ylös :P
Mut tosi hyvä opas

$include = file_get_contents($filu);
unlink($filu);
$asd = fopen($filu);
fwrite($asd, $teksti . $include);
fclose($asd);
ankzilla [26.03.2009 18:58:20]LainaaMuokkaa
Dexter kirjoitti:
Hyvä opas. Tän ansiosta sain jo vieraskirjan koodattua niin et se listaa viestit alas päin =) Pitäs kesksii miten ylös :P
Mut tosi hyvä opas

$include = file_get_contents($filu);
unlink($filu);
$asd = fopen($filu);
fwrite($asd, $teksti . $include);
fclose($asd);

Tietovirus [16.06.2009 23:37:55]LainaaMuokkaa
hant kirjoitti:
Pitäisi saada tämmäöinen kyselylomake tehdyksi, mutta on niin pitkä aika kun olen käyttänyt PHP:ta että en muista, Voisiko joku jelppiä

Kiitti jo etukäteen


KYSELYLOMAKE

1. Sukupuoli Nainen
Mies

2. ikä alle 15
15-20
21-29
30-39
40-49
50-59
60-69
70-->

3. kengän kokoni on


4. Asuinpaikka Iisalmesta alle 50 km
Iisalmesta yli 50 km

5. käyn mieluiten ostoksilla

arkisin klo 9-12
arkisin klo 12-15
arkisin klo 15-18
arkisin klo 18-21
lauantaisin klo 9-12
lauantaisin klo 12-15
lauantaisin klo 15-18

6. Valitessani kenkiä ja laukkuja minulle on tärkeintä (laita tärkeysjärjestykseen)

ulkonäkö
hinta
lestin istuvuus
myyjän suositus
materiaali
kotimaisuus
myymälän viihtyisyys

7. Kerro minkälaisia kenkiä/laukkuja haluasit ostaa? Minkälaista kenkää/laukkua olet etsinyt?
Onko mielessäsi jokin tietty merkki, väri, malli?

8. Mikäli jätät yhteystietosi, osallistut 50:n lahjakortin arvontaan avajaispäivänä

Iisalmesta oot? Hyvä mesta :D

Ja aivan mahtava opas !
Nyt pääsin paremmin jyvälle peehoopeestä. Kiitos!

ylläpito Antti Laaksonen, ulkoasu Otto Seiskari