LIITE A Vastaukset kysymyksiin Liite A Vastaukset kysymyksiin 449 Tämä liite antaa vastaukset lukujen lopussa olleisiin kysymyksiin.
450 Liite A Vastaukset kysymyksiin TUNTI 1 1. Mistä kirjaimet PHP tulevat? PHP tulee sanoista personal home page. Se muodostaa joukon makroja, joita kutsutaan nimellä Personal Home Page Tools. 2. Kuka loi alkuperäisen PHP-version? Rasmus Lerdorf kirjoitti alkuperäisen skriptikoneen. 3. Mikä on PHP:n uuden skriptimoottorin nimi? Uuden PHP4-koneen nimi on Zend. 4. Nimeä jokin uusi piirre, joka tuli PHP4-version mukana. PHP4 sisältää muun muassa uudet taulukkofunktiot, uuden foreach-silmukan, boolean-tietotyypin, laajennetun oliotuen, istuntofunktiot, uudet sisäiset muuttujat sekä Java- ja XML-tuen.
Liite A Vastaukset kysymyksiin 451 TUNTI 2 1. Mistä löydän PHP:n online-manuaalin? PHP4:n manuaali on saatavilla osoitteesta http://www.php.net. 2. Kuinka saan apua asetusvaihtoehdoista Unixissa (asetuksista, joita laitetaan configure-skriptin parametreiksi PHP-ohjelmassa)? Kokoonpanoasetuksiin saa apua kutsumalla configure-skriptiä, joka on PHP:n jakelukansiossa, ja viemällä sille help-argumentin./configure --help. 3. Minkä niminen on Apachen asetustiedosto tyypillisesti? Apachen kokoonpanotiedosto on yleensä httpd.conf. 4. Mikä rivi tulee lisätä Apachen asetustiedostoon, jotta taattaisiin, että.php-tunniste tunnistettaisiin? Seuraava rivi AddType application/x-httpd-php.php takaa, että Apache käsittelee.php-loppuisia tiedostoja PHP4-skripteinä. 5. Minkä niminen on PHP:n asetustiedosto? PHP:n kokoonpanotiedosto on nimeltään php.ini.
452 Liite A Vastaukset kysymyksiin TUNTI 3 1. Voiko käyttäjä lukea PHP-skriptisi lähdekoodia? Ei, käyttäjä ei näe muuta kuin skriptisi tulostuksen. 2. Millainen on standardi PHP-erotintagi? <?php // oma koodi tänne?> 3. Miltä ASP-tyylinen erotintagi näyttää? <% // oma koodi tänne %> 4. Miltä skriptityylinen erotintagi näyttää? <script language="php"> // oma koodi tänne </script> 5. Millä funktiolla voidaan tulostaa merkkijono selaimella? Print()
Liite A Vastaukset kysymyksiin 453 TUNTI 4 1. Mitkä seuraavista muuttujanimistä ei ole sopivia? $a_value_submitted_by_a_user $666666xyz $xyz666666 $ counter $the first $file-name Nimi $666666xyz ei ole kelvollinen, koska se ei ala kirjaimella eikä alaviivalla. Muuttujanimi $the first ei ole kelvollinen, koska se sisältää välilyönnin. Nimi $file-name on myöskin kelvoton, koska se sisältää muun kuin aakkosnumeerisen merkin. 2. Kuinka voisit käyttää merkkijonomuuttujaa, joka on luotu sijoituslauseessa $my_var = "dynamic"; luodaksesi muuttuja -muuttujan (dynaamisen muuttujan), johon sijoitetaan sitten arvo 4. Kuinka voit sitten käsitellä tuon uuden muuttujan sisältöä? Voit asettaa 'muuttuja'-muuttujan käyttämällä taalamerkkiä, jota seuraa merkkijonomuuttuja. Voit päästä käsiksi 'muuttuja'-muuttujaan suoraan tai käyttämällä merkkijonomuuttujaa $my_var = ``dynamic''; $$my_var = 4; print $dynamic; print ``${$my_var}''; 3. Mitä seuraava lause tulostaa? print gettype("4"); Tulostaa "string". 4. Mitä seuraava koodi tulostaa?
454 Liite A Vastaukset kysymyksiin $test_val = 5.4566; settype( $test_val, "integer" ); print $test_val; Koodi tulostaa arvon 5. Kun double muunnetaan kokonaisluvuksi, desimaalipisteen perässä oleva osa heitetään pois. 5. Mikä seuraavista ohjelmalauseista sisältää lausekkeen? 4; gettype(44); 5/12; Kaikki ovat lausekkeita, koska ne tuottavat arvoja. 6. Mitkä kysymyksen 5 lauseet sisältävät operaattorin? Lause 5/12 sisältää jakolaskuoperaattorin 7. Minkä arvon seuraava lauseke palauttaa? 5 < 2 Mitä tietotyyppiä palautettu arvo on? Lausekkeen tulos on false (epätosi) ja se on boolean-arvo.
Liite A Vastaukset kysymyksiin 455 TUNTI 5 1. Kuinka käyttäisit if-lausetta tulostaaksesi merkkijonon Youth message selaimelle, jos $age-muuttujan arvo on väliltä 18-35) Jos muuttujan arvo on jotain muuta, tulisi ohjelman tulostaa viesti Generic message. $age = 22; if ( $age >= 18 && $age <= 35 ) print ``Youth message<br>\n''; else print ``Generic message<br>\n''; 2. Kuinka laajentaisit kysymyksen 1 koodiasi tulostamaan merkkijonon Child message, jos $age-muuttujan arvo on väliltä 1-17? $age = 12; if($age >= 18 && $age<=35) print ``Youth message<br>\n''; elseif ( $age >= 1 && $age <= 17 ) print ``Child message<br>\n''; else print ``Generic message<br>\n''; 3. Kuinka loisit while-lauseen, joka tulostaa parittomat luvut väliltä 1-49? $num = 1; while ( $num <= 49 ) { print ``$num<br>\n''; $num += 2; }
456 Liite A Vastaukset kysymyksiin 4. Kuinka muuntaisit kysymyksen 3 while-lauseen for-lauseeksi? for ( $num = 1; $num <= 49; $num += 2 ) print ``$num<br>\n'';
Liite A Vastaukset kysymyksiin 457 TUNTI 6 1. Onko tämä totta? Jos funktio ei ota argumenttia, voit jättää sulkumerkit pois kutsun yhteydessä. Lause on false. Funktion kutsussa tulee aina käyttää sulkumerkkejä, vietiinpä funktiolle argumentteja tai ei. 2. Kuinka funktio palauttaa arvon? Avainsanalla return. 3. Mitä seuraava koodi tulostaisi selaimelle? $number = 50; function tentimes() { $number = $number * 10; } tentimes(); print $number; Se tulostaisi 50. Listauksen tentimes()-funktiolla ei ole pääsyä $number-muuttujaan. Kun sitä kutsutaan, se manipuloi omaa paikallista $number-muuttujaansa. 4. Mitä seuraava koodi tulostais selaimelle? $number = 50; function tentimes() { global $number; $number = $number * 10; } tentimes();
458 Liite A Vastaukset kysymyksiin print $number; Se tulostaisi 500. Olemme käyttäneet global-lausetta, joka antaa tentimes()-funktiolle pääsyn $numbermuuttujaan. 5. Mitä seuraava koodi tulostaisi selaimelle? $number = 50; function tentimes( $n ) { $n = $n * 10; tentimes( $number ); print $number; Se tulostaa 50. Argumentti viedään tentimes()-funktiolle arvona. Toisin sanoen kopio sijoitetaan muuttujaan $n. Mikään $n-muuttujaan tehtävä muutos ei vaikuta $number-muuttujaan. 6. Mitä seuraava koodi tulostaisi selaimelle? $number = 50; function tentimes( &$n ) { $n = $n * 10; } tentimes( $number ); print $number; Se tulostaa 500. Lisäämällä et-merkin parametrimuuttujaan $n takaamme, että argumentti viedään viittauksena, jolloin $n ja $number viittaavat samaan arvoon, joten kaikki $n-muuttujaan tehdyt muutokset näkyvät myös $number-muuttujassa.
Liite A Vastaukset kysymyksiin 459 TUNTI 7 1. Millä funktiolla voit määritellä taulukon? Funktiolla array(). 2. Mikä seuraavan taulukon viimeisen alkion indeksi? $users = array("harry", "Bob", "Sandy"); Viimeinen alkio on $users[2]. Muista, että indeksointi alkaa nollasta. 3. Mikä olisi helpoin keino lisätä arvo Susan edellä määriteltyyn taulukkoon, jos mitään funktiota ei haluta käyttää? $users[] = "Susan"; 4. Mitä funktiota voisit käyttää lisätäksesi merkkijonon Susan $users-taulukkoon? array_push($users, "Susan"); 5. Kuinka voisit ottaa selville taulukon alkioiden määrän? Funktiolla count(). 6. Mikä on yksinkertaisin keino käydä läpi taulukko PHP4:ssä? Uudella foreach-silmukalla. 7. Millä funktiolla voisit yhdistää kaksi taulukkoa? Tauluja voidaan liittää toisiinsa array_merge()-funktiolla.
460 Liite A Vastaukset kysymyksiin 8. Kuinka voisit lajitella assosiatiivisen taulukon avainten mukaan? Assosiatiivinen taulukko voidaan lajitella avainten mukaan ksort()-funktiolla.
Liite A Vastaukset kysymyksiin 461 TUNTI 8 1. Kuinka esittelisit luokan nimeltä emptyclass(), jolla ei ole metodeja tai ominaisuuksia? Avainsanalla class: class emptyclass { } 2. Jos käytössäsi on emptyclass()-luokka, kuinka loisit tuon luokan olioita? Operaattorilla new: $obj = new emptyclass(); 3. Kuinka voisit esitellä ominaisuuden luokan sisällä? Avainsanalla var: class Point { // ominaisuudet var $x = 0; var $y = 0; } 4. Kuinka valitsisit muodostimen nimen? Konstruktorin nimeä ei voida valita. Sen nimi on luokan nimi. 5. Kuinka loisit muodostimen? Kyseessä on erikoismetodi, jonka nimi on luokan nimi. Muodostinta kutsutaan automaattisesti, kun uusi olio luodaan:
462 Liite A Vastaukset kysymyksiin class Point { // ominaisuudet var $x = 0; var $y = 0; // muodostin function Point( $x, $y ) { // asetuskoodi } } 6. Kuinka loisit tavallisen metodin luokkaan? Metodi on funktio luokan sisällä; sen nimi voi olla mikä vain. class Point { // ominaisuudet var $x =0; var $y =0; // muodostin function Point( $x, $y ) { // asetuskoodi } // metodi function moveto( $x, $y ) { } }
Liite A Vastaukset kysymyksiin 463 7. Kuinka käsittelisit luokan ominaisuuksia ja metodeja luokan sisältä käsin? Luokan sisältä käsin ominaisuutta tai metodia kutsutaan $this-muuttujan ja ->-operaattorin avulla: class Point { // ominaisuudet var $x =0; var $y =0; // muodostin function Point( $x, $y ) { // metodin kutsuminen $this->moveto( $x, $y ); } // metodi function moveto( $x, $y ) { // ominaisuuksien asettaminen $this->x = $x; $this->y = $y; } }
464 Liite A Vastaukset kysymyksiin 8. Kuinka käsittelisit luokan ominaisuuksia ja metodeja luokan ulkopuolelta käsin? Voit kutsua olion metodia ja käsitellä sen ominaisuuksia käyttämällä viittausta olioon yhdessä nuolioperaattorin (->) kanssa: // luodaan olio $p = new Point( 40, 60 ); // kutsutaan metodia $p->moveto( 20, 200 ); // käsitellään ominaisuutta print $p->x; 9. Mitä lisäisit luokan määrittelyyn, jos haluaisit laittaa sen perimään toiminnallisuuden toiselta luokalta? Luokka voidaan johtaa toisesta luokasta extends-avainsanalla, jonka jälkeen tulee kantaluokan nimi: class funkypoint extends Points { }
Liite A Vastaukset kysymyksiin 465 TUNTI 9 1. Mitä ympäristömuuttujaa voisit käyttää määrittääksesi käyttäjän IP-osoitteen? Muuttuja $REMOTE_ADDR tallentaa IP-osoitteen. 2. Mitä ympäristömuuttujaa voisit käyttää saadaksesi selville selaimen, joka kutsui skriptiäsi? Selaimen tyyppi ja versio sekä käyttäjän käyttöjärjestelmä saadaan selville muuttujan HTTP_USER_AGENT avulla. 3. Kuinka sinun tulisi nimetä lomakekenttäsi päästäksesi käsiksi lähetettyihin tietoihin $form_array-nimisen taulukon avulla? Luomalla useita kenttiä nimellä form_array[], jolloin syntyy täytetty taulukko nimeltä $form_array, kun lomake lähetetään. 4. Mikä sisäinen taulukko sisältää kaikki GET-tavalla lähetetyn lomakkeen tiedot? Sisäinen $HTTP_GET_VARS sisältää kaikki arvot, jotka lähetetään osana GET-pyyntöä. 5. Mikä sisäinen taulukko sisältää kaikki POST-tavalla lähetetyn lomakkeen tiedot? Sisäinen $HTTP_POST_VARS sisältää kaikki arvot, jotka lähetetään osana POST-pyyntöä. 6. Mitä funktiota käyttäisit ohjataksesi selaimen uudelle sivulle? Minkä merkkijonon veisit sille? Voit ohjata käyttäjää kutsumalla header()-funktiota. Sinun tulisi viedä sille Location-otsikko: Header(``Location: anotherpage.html'');
466 Liite A Vastaukset kysymyksiin 7. Kuinka rajoittaisit sen tiedoston koon, jonka käyttäjä voisi lähettää lomakkeen kautta? Kun luot tiedostojen lataamislomakkeita PHP4:llä, sinun tulisi laittaa mukaan piilotettu kenttä nimeltä MAX_FILE_SIZE : <INPUT TYPE="hidden'' NAME="MAX_FILE_SIZE'' VALUE="51200"> 8. Kuinka voisit asettaa kokorajoituksen kaikilta lomakkeilta ja kaikista skripteistä ladattaville tiedostoille? Tiedoston php-ini asetus upload_max_filesize määrittää ladattavan tiedoston maksimikoon, jonka skriptit hyväksyvät. Oletuskokona on 2 megatavua.
Liite A Vastaukset kysymyksiin 467 TUNTI 10 1. Mitä funktioita voisit käyttää lisätäksesi kirjastokoodin skriptiisi? Voit käyttää require()- tai include()-funktioita liittääksesi PHP-tiedostoja nykyiseen asiakirjaan. 2. Millä funktiolla voisit selvittää, onko tietty tiedosto olemassa järjestelmässäsi? Voit testata tiedoston olemassaoloa funktiolla file_exists(). 3. Kuinka voisit määrittää tiedoston koon? Funktio filesize() palauttaa tiedoston koon tavuina. 4. Mitä funktiota voisit käyttää tiedoston avaamiseen lukemista tai kirjoittamista varten? Funktio fopen() avaa tiedoston. Se ottaa argumenteikseen tiedoston ja merkin, joka edustaa moodia. Se palauttaa tiedosto-osoittimen. 5. Millä funktiolla voit lukea rivillisen tietoa tiedostosta? Funktio fgets() lukee tietoa puskurin koon mukaan, rivin loppuun saakka tai asiakirjan loppuun saakka sen mukaan, mikä rajoite tulee ensimmäisenä vastaan. 6. Kuinka voit kertoa, onko tiedoston loppu saavutettu? Funktio feof() palauttaa arvon true, kun tiedosto-osoitin on saavuttanut tiedoston lopun. 7. Millä funktiolla voisit kirjoittaa rivin tietoa tiedostoon? Voit kirjoittaa tietoa tiedostoon funktiolla fputs().
468 Liite A Vastaukset kysymyksiin 8. Kuinka voisit avata hakemiston lukemista varten? Hakemisto voidaan avata lukemista varten funktiolla opendir()s. 9. Millä funktiolla voisit lukea hakemiston sisällä olevan kohteen nimen, kun hakemisto on ensin avattu lukemista varten? Funktio readdir() palauttaa hakemistonkohteen nimen avatusta hakemistosta.
Liite A Vastaukset kysymyksiin 469 TUNTI 11 1. Millä funktiolla voisit avata DBM-tietokannan? Voit avata DBM-tietokannan funktiolla dbmopen(). 2. Millä funktiolla voisit lisätä tietueen DBM-tietokantaan? Funktio dbminsert() lisää tietueen DBM-tietokantaan. 3. Millä funktiolla voisit korvata tietueen DBM-tietokannassa? Funktio dbmreplace() korvaa tietueen DBM-tietokannassa. 4. Kuinka voisit päästä käsiksi tietueeseen nimen perusteella? Funktio dbmfetch() palauttaa elementin, kun DBM-osoitin ja elementin nimi on annettu. 5. Kuinka voisit saada esille ensimmäisen alkion nimen (arvon sijaan)? Funktio dbmfirstkey() palauttaa DBM-tietokannan ensimmäisen elementin nimen. 6. Kuinka saisit esille peräkkäisten elementtien nimet? Funktion dbmfirstkey() kutsumisen jälkeen voit siepata seuraavien elementtien nimiä kutsumalla funktiota dbmnextkey(). 7. Kuinka tuhoaisit nimetyn alkion DBM-tietokannasta? Elementti voidaan tuhota funktiolla dbmdelete().
470 Liite A Vastaukset kysymyksiin TUNTI 12 1. Kuinka avaisit yhteyden MySQL-tietokantapalvelimelle? MySQL-demoniin kytkeydytään mysql_connect()-funktiolla. 2. Mitä funktiota käyttäisit tietokannan valitsemiseen? Funktio mysql_select_db() valitsee tietokannan. 3. Mitä funktiota käyttäisit lähettämään SQL-kysely tietokantaan? Voit lähettää SQL-kyselyn tietokantapalvelimelle funktiolla mysql_query(). 4. Mitä mysql_insert_id()-funktio tekee? Funktio mysql_insert_id() palauttaa automaattisesti kasvatettavan kentän arvon, kun uusi rivi on lisätty taulukkoon. 5. Olettaen, että olet tehnyt onnistuneen SELECT-kyselyn, nimeä kolme funktiota, jotka voisivat käyttää kyselyn palauttamia rivejä? Voit käyttää funktioita mysql_fetch_row(), mysql_fetch_array() tai mysql_fetch_object() päästäksesi käsiksi löydetyn joukon jokaiseen riviin. 6. Olettaen, että olet tehnyt onnistuneen UPDATE-kyselyn, millä funktiolla voisit määrittää, kuinka monta riviä päivitettiin? Voit saada selville SQL-lauseen muuttamien rivien määrän funktiolla mysql_affected_rows().
Liite A Vastaukset kysymyksiin 471 7. Millä funktiolla saisit esille luettelon kaikista MySQL-palvelimen tietokannoista? Funktio mysql_list_dbs() palauttaa tulososoittimen, jota voidaan käyttää listaamaan kaikki saatavilla olevat tietokannat. 8. Mitä funktiota käyttäisit luettelemaan tietokannan kaikki taulukot? Funktio mysql_list_tables() palauttaa tulososoittimen, jolla voidaan listata tietokannan kaikki taulut.
472 Liite A Vastaukset kysymyksiin TUNTI 13 1. Mikä ympäristömuuttuja antaisi viittaavan sivun URL:n? Viittaavan sivun URL löytyy usein muuttujasta $HTTP_REFERRER. 2. Miksi et voi luottaa $REMOTE_ADDR-muuttujaan jäljittääksesi yksittäisen käyttäjän monien skriptisi käyttäjien joukosta? Monet palveluntarjoajat varaavat eri IP-osoitteen käyttäjille jokaisella kytkeytymiskerralla, joten et voi olettaa, että käyttäjä palauttaisi saman osoitteen. 3. Mitä HTTP tarkoittaa? HTTP = HyperText Transfer Protocol. 4. Mikä asiakkaan otsikkorivi kertoo palvelimelle selaimen, joka tekee pyynnön? Asiakas saattaa lähettää User-agent-otsikon, joka kertoo palvelimelle asiakkaan version ja ajettavan käyttöjärjestelmän. 5. Mitä palvelimen vastauskoodi 404 tarkoittaa? Palvelimen vastaus 404 tarkoittaa sitä, että pyydettyä sivua tai resurssia ei löydy palvelimelta. 6. Mitä funktiota voisit käyttää ottaaksesi esille Web-sivun etäpalvelimelta tekemättä omaa verkkoyhteyttä? Funktiota fopen() voidaan käyttää etäkoneilla oleville Web-sivuille sekä myös omassa tiedostojärjestelmässä.
Liite A Vastaukset kysymyksiin 473 7. Jos käytössäsi on IP-osoite, mikä funktio antaisi palvelimen nimen? Funktio gethostbyaddr() ottaa argumentikseen IP-osoitteen ja palauttaa vastaavan palvelinnimen. 8. Mikä funktio luo verkkoyhteyden? Funktio fsockopen() toteuttaa yhteyden etäpalvelimelle. 9. Millä PHP-funktiolla voisit lähettää emailia? Voit lähettää emailia funktiolla mail().
474 Liite A Vastaukset kysymyksiin TUNTI 14 1. Mikä otsikko pitäisi lähettää selaimelle ennen GIF-kuvan kehittämistäja tulostamista? GIF-kuvan kohdalla tulee header()-funktiolla lähettää rivi "Content-type: image/gif" selaimelle. 2. Mitä funktiota pitäisi käyttää kuvatunnisteen saamiseen muita kuvafunktioita varten? Funktio imagecreate() luo kuvatunnisteen. 3. Mitä funktiota pitäisi käyttää GIF-kuvan tulostamiseen sen muodostamisen jälkeen? GIF voidaan tulostaa funktiolla imagegif(). 4. Mitä funktiota pitäisi käyttää väritunnisteen saamiseen? Väritunniste saadaan esille funktiolla imagecolorallocate(). 5. Mitä funktiota voidaan käyttää viivan piirtämiseen dynaamiseen kuvaan? Funktio imageline() piirtää viivan. 6. Mitä funktiota pitäisi käyttää dynaamisessa kuvassa olevan alueen täyttämiseen? Funktio imagefill() täyttää alueen värillä. 7. Mitä funktiota voidaan käyttää kaaren piirtämiseen? Voit piirtää kaaren funktiolla imagearc().
Liite A Vastaukset kysymyksiin 475 8. Kuinka piirtäisit suorakaiteen? Voit piirtää suorakaiteen funktiolla imagerectangle(). Jos haluat piirtää täytetyn suorakaiteen, voit käyttää funktiota imagefilledrectangle(). 9. Kuinka piirtäisit monikulmion? Voit piirtää monikulmion joko funktiolla imagepolygon() tai imagefilledpolygon(). 10. Mitä funktiota käyttäisit kirjoittamaan merkkijonon dynaamiseen kuvaan (hyödyntämällä FreeTypekirjastoa)? Voit kirjoittaa merkkijonon dynaamiseen kuvaan funktiolla imagettftext().
476 Liite A Vastaukset kysymyksiin TUNTI 15 1. Kuinka saisit esille UNIX:in aikaleiman, joka edustaa nykyistä päivämäärää ja aikaa? Funktio time() palauttaa nykyisen ajan aikaleimamuodossa. 2. Mikä funktio hyväksyy aikaleiman ja palauttaa assosiatiivisen taulukon, joka edustaa annettua päivämäärää? Funktio getdate() palauttaa assosiatiivisen taulukon, jonka elementit sisältävät annetun päivämäärän tiedot. 3. Millä funktiolla voisit muotoillaa aikatietoa? Päivämäärää voidaan muotoilla funktiolla date(). 4. Kuinka saisit otettua minkä tahansa ajankohdan aikaleiman? Kun funktiolle mktime() annetaan argumentit tunnit, minuutit, sekunnit, kuukaudet, kuukauden päivä ja vuosi, funktio palauttaa UNIX-aikaleiman. 5. Millä funktiolla voisit tarkistaa, onko päivämäärä kelvollinen? Voit tarkistaa päivämäärän funktiolla checkdate().
Liite A Vastaukset kysymyksiin 477 TUNTI 16 1. Millä yksittäisellä funktiolla voisit muuntaa minkä tahansa tietotyypin toiseksi tietotyypiksi? Funktiolla settype(). 2. Voisitko tehdä sen myös ilman funktiota? Kyllä, ulkoisen muunnoksen avulla: toinen tietotyyppi on suluissa muunnettavan arvon edessä. 3. Mitä seuraava koodi tulostaa? print "four" * 200; Merkkijonot, jotka eivät ala numeroilla, ovat arvoltaan nollia (0) lausekkeissa, joten edellä tulostuu 0. 4. Kuinka saisit selville, onko muuttujassa taulukko? Se, onko muuttujassa taulukko, voidaan testata is_array()-funktiolla. Vaihtoehtoisesti voit testata palautustyyppiä funktiolla gettype(). 5. Mikä funktio on tarkoitettu muuntamaan argumenttinsa kokonaisluvuksi? Funktio intval() palauttaa sille viedyn argumentin kokonaislukuarvon. 6. Kuinka testaisit, onko muuttuja asetettu? Funktio isset() kertoo, onko muuttuja asetettu. 7. Kuinka testaisit, sisältääkö muuttuja tyhjän arvon, esimerkiksi nollan tai tyhjän merkkijonon? Funktio empty() palauttaa arvon true, jos sille vietyä muuttujaa ei ole asetettu tai siinä on tyhjä arvo.
478 Liite A Vastaukset kysymyksiin 8. Millä funktiolla tuhoaisit taulukon alkion? Voit tuhota taulukon elementin funktiolla unset(). 9. Millä funktiolla voisit lajitella numeerisesti indeksoidun taulukon? Voit lajitella taulukkoa halutulla tavalla funktiolla usort().
Liite A Vastaukset kysymyksiin 479 TUNTI 17 1. Mitä muunnosmäärittäjää käyttäisit printf()-funktion yhteydessä muotoillaksesi kokonaisluvun desimaaliluvuksi? Kirjoita koko syntaksi, kun kokonaislukuna on 33. Muunnosmäärittäjää f käytetään muotoilemaan kokonaisluku double-tyypiksi printf(``%f'', 33 ); 2. Kuinka siirtäisit edellisen kysymyksen muunnoksen siten, että tulostuksen eteen tulee tarvittava määrä nollia, jotta desimaaliosa olisi neljä merkkiä? Voit siirtää tulostusta printf()-funktion yhteydessä siirtomäärittäjällä. Se toteutetaan välilyönnillä tai nollalla, jota seuraa numeroarvo, joka määrittää siirrossa käytettävien merkkien määrän. printf(``%04f'', 33 ); 3. Kuinka määrittäisi kahden desimaalin tarkkuuden edellisten kysymysten liukuluvulle? Tarkkuuden määrittäjä koostuu pisteestä (.), jota seuraa numeroarvo, joka edustaa haluttua tarkkuutta. Se tulee sijoittaa ennen muunnosmäärittäjää. printf(``%04.2f'', 33 ); 4. Millä funktiolla määrittäisit merkkijonon pituuden? Funktio strlen() palauttaa merkkijonon pituuden. 5. Millä funktiolla saisit esille jonkin osamerkkijonon esiintymän aloituskohdan? Funktio strstr() palauttaa osamerkkijonon alkuindeksin. 6. Millä funktiolla saisit esille jonkin osamerkkijonon merkkijonosta? Funktio substr() erottaa ja palauttaa osamerkkijonon.
480 Liite A Vastaukset kysymyksiin 7. Kuinka voisit poistaa tyhjät merkit merkkijonon alusta? Funktio ltrim() poistaa tyhjät merkit merkkijonon alusta. 8. Kuinka muuttaisit merkkijonon kirjaimet isoiksi kirjaimiksi? Funktio strtoupper() muuntaa merkkijonon kirjaimet isoiksi kirjaimiksi. 9. Kuinka jakaisit merkkijonon osiin, jotka sijoitetaan sitten taulukkoon? Funktio explode() pilkkoo merkkijonon taulukkoon.
Liite A Vastaukset kysymyksiin 481 TUNTI 18 1. Mitä POSIX- funktiota käyttäisit vastaamaan kuviota merkkijonossa? Funktiolla ereg() voidaan hakea kuviota merkkijonosta. 2. Millä säännöllisellä lausekkeella voisit hakea merkkijonosta kirjainta "b", kun kirjain voi esiintyä 1-6 kertaa? Tällöin voidaan käyttää aaltosulkuja, joiden sisällä ovat vastaavat minimi- ja maksimiarvot: b{1,6} 3. Kuinka määrittäisit merkkialueen, joka on väliltä "d" ja "f"? Voit määrittää merkkialueen käyttämällä hakasulkuja: [d-f] 4. Kuinka tekisit kysymyksen 3 merkkialueesta käänteisen? Voit kääntää merkkialueen hattumerkillä (^): [^d-f] 5. Millä syntaksilla voisit vastata joko mitä tahansa numeroa tai sanaa "tree"? Voit hakea vaihtoehtoisia haaroja putkimerkkiä ( ) käyttämällä: [0-9] tree 6. Mitä POSIX-lauseketta käyttäisit korvaamaan vastanneen kuvion? Funktiota ereg_replace() käyttämällä voidaan vastannut kuvio korvata annetulla vaihtoehdolla.
482 Liite A Vastaukset kysymyksiin 7. Säännöllinen lauseke.*bc vastaa pikemminkin merkkijonoa "abc000000bc" kuin merkkijonoa "abc". Kuinka muuttaisit lauseketta niin, että se vastaisi vain ensimmäistä löydettyä esiintymää? Lisäämällä kysymysmerkin määrän ilmaisimeen voit pakottaa vasteen olemaan muuta kuin osittainen: /.*?bc/ 8. Millaisella Perl-yhteensopivalla lausekkeella voisit vastata 'white space'.-merkkiä? Merkintä \w vastaa tyhjää aluetta Perl-lausekkeissa. 9. Millaisella Perl-yhteensopivalla funktiolla voisit vastata kuvion jokaista esiintymää? Funktio preg_match_all() vastaa merkkijonon jokaista kuvioesiintymää. 10. Mitä muunninta käyttäisit Perl-yhteensopivassa funktiossa voidaksesi ohittaa haussa isojen ja pienten kirjainten erottelun? Muuntimella /i ohitetaan isojen ja pienten kirjainten erottelu.
Liite A Vastaukset kysymyksiin 483 TUNTI 19 1. Millä funktiolla voit asettaa evästeen vierailijan selaimelle? Funktiolla setcookie() voit asettaa evästeen (vaikka voisitkin tuottaa Set-Cookie-otsikon käyttämällä header()-funktiota). 2. Kuinka voisit tuhota evästeen? Voit tuhota evästeen kutsumalla setcookie()-funktiota ja viemällä sille päivämäärän, joka on jo mennyt. 3. Millä funktiolla voisit kiertää merkkijonon kyselymerkkijonossa? Funktio urlencode() muuntaa merkkijonon niin, että se voidaan sisällyttää kyselymerkkijonoon. 4. Mikä sisäinen muuttuja sisältää raa'an kyselymerkkijonon? Koko kyselymerkkijono on muuttujassa $QUERY_STRING. 5. Kyselmymerkkijonon mukana viedyt nimi/arvo-parit ovat saatavilla globaaleina muuttujina. Ne voidaan myös sisällyttää sisäiseen assosiatiiviseen taulukkoon. Mikä sen nimi on? Muuttuja $HTTP_GET_VARS sisältää nimi/arvo-parit, jotka viedään osana kyselymerkkijonoa.
484 Liite A Vastaukset kysymyksiin TUNTI 20 1. Mikä funktio voisi käynnistää tai lopettaa istunnon? Istunto voidaan käynnistää funktiolla session_start(). 2. Mikä funktio sisältää nykyisen istunnon ID:n? Voit saada nykyisen istunnon ID:n funktiolla session_id(). 3. Kuinka voit yhdistää muuttujan istuntoon? Funktio session_register() liittää annetun muuttujan nykyiseen istuntoon. 4. Kuinka voit päättää istunnon ja tuhota kaikki jäljet siitä? Funktio session_destroy() poistaa kaikki istunnon jäljet. 5. Kuinka voisit tuhota istuntomuuttujat sekä nykyisestä skriptistä että istunnosta. Funktio session_unset() poistaa istuntomuuttujat sekä nykyisestä skriptistä että istunnosta. 6. Mitä SID-vakio tekee? Jos evästeet eivät ole saatavilla, SID-vakio sisältää nimi/arvo-parin, joka voidaan liittää kyselymerkkijonoon. Sillä tavoin viedään istunnon ID skriptipyynnöstä toiseen. 7. Kuinka testaisit, onko muuttujaa nimeltä $test rekisteröity istunnon mukana? Voit käyttää funktiota is_registered() tarkistamaan, että muuttuja on liitetty nykyiseen istuntoon. is_registered(``test'')
Liite A Vastaukset kysymyksiin 485 TUNTI 21 1. Millä funktiolla avaisit putken prosessiin? Funktiolla popen(). 2. Kuinka lukisit tietoa prosessista sen jälkeen, kun olet avannut yhteyden? Voit lukea tietoa prosessista, jonka olet avannut popen()-funktiolla, samalla lailla kuin tiedostosta. Toisin sanoen voit käyttää sellaisia funktioita kuin feof() ja fgets(). 3. Kuinka voit kirjoittaa tietoa prosessiin sen jälkeen, kun yhteys on luotu? Voit kirjoittaa prosessiin samalla lailla kuin tiedostoon; yleensä fputs()-funktiolla. 4. Tulostaako exec()-funktio shell-komennon tuotoksen suoraan selaimelle? Tuotos ei mene suoraan selaimelle, vaan se tallennetaan argumenttina olevaan taulukkoon. 5. Mitä system()-funktio tekee suorittamansa ulkoisen komennon tuotoksella? Funktio tulostaa tuotoksen suoraan selaimelle. 6. Mitä heittomerkkioperaattori palauttaa? Se palauttaa kutsumansa ulkoisen komennon tuotoksen, joka voidaan sitten tallentaa, jäsennellä tai tulostaa. 7. Kuinka voit suodattaa käyttäjän syötön tehdäksesi sen hieman turvallisemmaksi ennen sen viemistä shellkomennolle? Voit tehdä sen escapeshellcmd()-funktiolla. Turvallisin tapa suorittaa shell-komentoja on kuitenkin sellainen, jossa tietoja ei oteta suoraan käyttäjältä.
486 Liite A Vastaukset kysymyksiin 8. Kuinka suorittaisit ulkoisen CGI-skriptin omasta skriptistäsi käsin? Funktio nimeltä virtual() kutsuu ulkoista CGI-skriptiä.
Liite A Vastaukset kysymyksiin 487 TUNTI 22 1. Mikä funktio tulostaa hyödyllistä tietoa PHP-kokoonpanosta selaimelle? Funktio nimeltä phpinfo() tulostaa PHP-tietoa: asetustietoa sekä nykyisen skriptin saatavilla olevat ympäristömuuttujat. 2. Mitä funktiota käyttäisit sisällyttääksesi syntaksin värittämisen PHP-lähdekoodilistauksiin? Funktio nimeltä show_source() ottaa argumentikseen PHP-skriptin ja sisällyttää syntaksin värittämisen skriptissä oleviin listauksiin. 3. Mikä php.ini-tiedoston direktiivi sallii sinun kontrolloida virheilmoitusten tarkkuutta? Tiedoston php.ini error_reporting-sääntö kontrolloi sitä, kuinka PHP raportoi virheistä. 4. Mitä funktiota voidaan käyttää korvaamaan tuo sääntö? Funktio error_reporting() sallii sinun korvata php.ini-tiedoston samanniminen asetus. 5. Millä funktiolla voit kirjata virheitä? Virheitä voidaan kirjata funktiolla error_log(). 6. Mikä sisäinen muuttuja sisältää virheilmoituksen, jos php.ini-tiedostossa oleva trac_errors-asetus on päällä? Muuttuja $php_errormsg tallentaa viimeisimmän virheviestin.
488 Liite A Vastaukset kysymyksiin TUNTI 23 1. Mitä PHP-funktiota voisimme käyttää toteuttamaan yhteyden MySQL-tietokantapalvelimille? Funktio nimeltä mysql_connect() yrittää toteuttaa yhteyden MySQL-demoniin. 2. Millä PHP-funktiolla voimme aloittaa tai lopettaa istunnon? Funktio nimeltä session_start() aloittaa istunnon. 3. Millä funktiolla voidaan sisällyttää kirjastotiedostoja projektisivuillemme? Funktio nimeltä include() yhdistää kirjastotiedoston nykyiseen skriptiin. 4. Mitä PHP-funktiota voidaan käyttää lähettämään SQL-kyselyjä MySQL-tietokannalle? Funktio nimeltä mysql_query() vie SQL-kyselyn tietokannalle. 5. Mitä vakiota käytetään lisäämään istunnon ID HTML-linkkiin? Vakio nimeltä SID sisältää nimi/arvo-parin, joka voidaan lisätä kyselymerkkijonoon. Nimenä on istunnon nimi ja arvona taas istunnon ID. 6. Kuinka käyttäjä voidaan siirtää uudelle sivulle? Käyttäjä voidaan johdattaa uudelle sivulle header()-funktiolla. Tällöin on laitettava mukaan Locationotsikko. header(``location: membersmenu.php?''.sid); 7. Millä funktiolla voidaan muotoilla päivämäärätietoa? Funktio nimeltä date() ottaa argumentikseen muotoilun liput ja päivämäärän, joka on aikaleimamuodossa. Se palauttaa muotoillun päivämäärämerkkijonon.
Liite A Vastaukset kysymyksiin 489 TUNTI 24 1. Millä funktiolla voit lisätä elementin taulukon loppuun? Funktio nimeltä array_push() lisää elementin taulukkoon. 2. Onko mahdollista lisätä elementti taulukkoon käyttämättä funktiota? Voit lisätä elementin taulukkoon sijoittamalla sen taulukkomuuttujaan, jonka nimen lopussa on tyhjä hakasulkupari: $array[] = $new_element 3. Mitä funktiota käyttäisit kääntääksesi erikoismuuttujat HTML-formaattiin? Funktio nimeltä htmlspecialcharacters() kääntää erikoismerkit HTML-yksiköiksi, jotta selain osaisi esittää ne oikein. 4. Mitä funktiota käyttäisit kääntämään rivinvaihtomerkit BR-tageiksi? Funktio nimeltä nl2br() muuntaa rivinvaihdot BR-tageiksi. 5. Kuinka voisit käyttää SID-vakiota viemään istunnon ID:n toiselle sivulle HTML-linkin kautta? Kuinka saisit aikaan saman toiminnon lomakkeen avulla? Istunnon ID upotetaan HTML-lomakkeelle piilokentän avulla. Piilokenttä tulee nimetä $session_name()- funktion palauttaman merkkijonon mukaan ja sille tulee antaa arvo, jonka $session_id()-funktio palauttaa. <input type=''hidden'' name=''<?php print session_name()?>'' value=''<?php print session_id()?>''>.
490 Liite A Vastaukset kysymyksiin