LAMP

LAMP koostuu sanoista Linux,Apache,MySQL ja PHP ja näitä käytetään maailmanlaajuisesti. Artikkeli on tehty kahtena eri päivänä,tarkemmat ajankohdat löytyvät artikkeleiden alusta.

LAMP:n asennus

Ajankohta 6.9.2012 klo 13.30-15.00

Asensin linuxin jo aikaisemmin ja sen jälkeen Apache2. Poistin Apache2 ensin koneelta sudo apt-get purge apache2 -komennolla, jotta saisin kerrata sen asennuksen sillä onhan kertaus opintojen äiti. Purge-komento poistaa ohjelman lisäksi myös ohjelman asetukset, joten pääsin asentamaan Apache2:n ns. puhtaaltapöydältä.

$ sudo apt-get update # pakettivarastojen päivitys
$ sudo apt-get install apache2

Sitten tein

$ sudo a2enmod userdir
$ sudo service apache2 restart
$ mkdir public_html
$ cd public_html
~:public_html$ nano index.html

Kirjoitin “Hei maailma” ja tallensin tiedoston. Kokeilin selaimen kautta http://localhost/ ,ja hyvin toimi kotisivu. Seuraavaksi asensin PHP:n.

PHP:n asennus

$ sudo apt-get install libapache2-mob-php5
$ sudoedit /etc/apache2/mods-enabled/php5.conf # Kommentoi ulos ohjeen mukaisesti
 </FilesMatch>
  # Commented out 4 lines Thu,06.09.12 jokela.anttiville
    # To re-enable php in user directories comment the following lines
    # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
    # prevents .htaccess files from disabling it.
    #<IfModule mod_userdir.c>
    #    <Directory /home/*/public_html>
    #        php_admin_value engine Off
    #    </Directory>
    #</IfModule>
</IfModule>

$ sudo service apache restart # Aina kun tehdään muutoksia asetuksiin
                                niin pitää käynnistää ohjelma uudestaan.

Seuraavaksi tein nettisivun PHP:tä käyttäen. Aloitin nimeämällä index.html uudestaan .php muotoon.

$ cd public_html
~:public_html$ mv index.html index.php

Nettisivujen teko PHP:tä käyttäen

Nettisivuissa on kaksi lomaketta, nimi ja ikä. Ensimmäinen sivu kysyy kohdat ja seuraava sivu näyttää täytetyt kohdat ja tervehtii käyttäjää.

index.php

<!DOCTYPE HTML>  #Nämä ovat kommentteja,eivät vaikuta sivun toimintaan
<html><meta charset="utf-8" > #utf-8 on merkistökoodi,åäö-toimii
     <head> <title>Hei! </title></head> #Otsikko joka lukee selainpalkissa
  <body>
        <h1>Hyvää päivää! </h1> #h1= otsikko,lihavoitu ja isommalla fontilla
        <p>Täyttäisittekö ystävällisesti seuraavat kohdat: </p> # <p> </p> väliin tulee teksti
         <form action="action.php" method="post">               # ,näillä myös saadaan uusi rivi 
         <p>Nimenne: <input type="text" name="name" /></p>      # tehtyä. <form> </form> väliin lomakkeet.
         <p>Ikänne: <input type="text" name="age" /> vuotta</p> # "form action"-kohdassa on määritelty 
         <p><input type="submit" /></p>                         # sivu mikä näytetään klikkauksen jälkeen.
         </form>
  </body>
</html>

action.php

<!DOCTYPE HTML>
<html><meta charset="utf-8"> # merkistökoodaus
        <head><title>Hei! </title></head> # selainpalkin teksti
  <body>                                  #<p> </p> välissä teksti, joka näytetään.
        <p>Hyvää päivää <?php echo htmlspecialchars($_POST['name']); ?>. </p>
        <p>Olette <?php echo (int)$_POST['age']; ?> vuotta vanha. </p>
  </body>
</html>

Painoindeksilaskurin tekeminen

Ajankohta 9.9.2012 klo 16.30-17.45

Painoindeksilaskurin tekeminen olikin sitten jo haastavampi juttu. Tarkoituksenani oli tehdä sivu 1 ,jossa kysytään nimi,pituus ja paino. Ja sivu 2 joka näyttää painoindeksin ja kertoo onko ali-, normaali- vai ylipainoinen.

Ensimmäisen sivun lomakkeet saadaan tehtyä edellisen esimerkin index.php -sivun avulla, mutta toisen sivun laskukaavakkeen tuloksen näyttämiseen ja painoindeksin tulkitseminen oli vaikeampi

Ensimmäiselle sivulle lisäsin vain paino ja pituus -lomakkeet,muuten sivu on aivan samanlainen.

<!DOCTYPE HTML>
<html><meta charset="utf-8" >
     <head> <title>Hei! </title></head>
  <body>
        <h1>Hyvää päivää! </h1>
        <p>Saadaksenne tietää painoindeksinne täyttäkää seuraavat tiedot:: </p>

         <form action="action.php" method="post">
         <p>Nimenne: <input type="text" name="name" /></p>
         <p>Ikänne: <input type="text" name="age" /> vuotta</p>
        <p>Pituutenne: <input type="text" name="pituus" /> cm</p>
        <p>Painonne: <input type="text" name="paino" /> kg </p>
<p><input type="submit" /></p>
        </form>
  </body>
</html>

Toisen sivun tekemiseen käyttiin apuna Roger Douglass:n PHP BMI Calculator -koodia. Sivulla annetaan lupa käyttää ja muokata koodia: “…If anyone would like to modify it and give it fancy bells and whistles, be my guest.” Syy minkä takia jouduin etsimään apua koodin muodostamiseen oli laskukaavojen käyttö ja edellisen sivun lomakkeiden tietojen käyttö laskua laskettaessa.

<!DOCTYPE HTML>
<?php
$paino = $_POST['paino'];
$pituus = $_POST['pituus'];
$painoindeksi = $paino / (($pituus / 100) * ($pituus / 100));
?>

<html><meta charset="utf-8">
        <head><title>Hei! </title></head>
  <body>
        <h1>Hyvää päivää <?php echo htmlspecialchars($_POST['name']); ?>. </h1>
        <p>Olette <?php echo (int)$_POST['age']; ?> vuotta vanha </p>
        <p>ja teidän painoindeksinne on <?php echo round ($painoindeksi, 2); ?> </p>
<?php
// alipaino = <18.5, normaalipainoinen = 18.5-24,9 , ylipainoinen = 25> //
if ($painoindeksi <= 18.5) {
echo "Saat syödä hymyhuulilla lisää ruokaa! ";
}elseif (($painoindeksi > 18.5) && ($painoindeksi <= 24.9)){
echo "Hienoa! Jatka terveellistä elämääsi samaan malliin!" ;
}elseif (($painoindeksi > 24.9 && $painoindeksi <=29.9)){
echo "Olet lievästi ylipainoinen,yritä syödä terveellisemmin." ;
}else{
echo "Suosittelen tarkastamaan ruokavaliota,ja jos tarvetta on niin rohkeasti ulos. Sitä ei ikinä tiedät kenet lenkillä ollessa tapaa.";}?>
        <p>Hyvää päivänjatkoa ! </p>

</body>
</html>

Ja valmis sivu näytti sitten tältä. Jos laskimen julkistaisi kaikille nähtäväksi, kannattaisi vaihtaa myös fonttien tyyliä.

MySQL

Ajankohta 9.9.2012 klo 18-19.30

MySQL:n kanssa työskentely ei onnistunut niin kuin toivoin vaan päättyi aina samaan virheilmoitukseen mihin löytänyt suoraa vastausta internetistä. Mutta asennus ja sisäänkirjautuminen onnistui loistavasti.

$ sudo apt-get update 
$ sudo apt-get install mysql-server mysql-client

# Asennuksen aikana hyväksyin levytila muutoksen ja asennuksen puole-
  ssa välissä kysyttiin käytetäänkö apache2-ohjelmaa MySQL:n kanssa
  johon vastasin myös myöntävästi. Asennuksessa kysyttiin myös root-
  käyttäjälle salasanaa. Salasana ei saa olla sama kuin tietokoneen 
    pääkäyttäjän salasana.

MySQL:n käynnistäminen ja sisäänkirjautuminen root-tunnuksilla:

$ sudo mysql -u root -p    # -u ,tarkoittaa käyttäjää (user)
                           # -p ,että salasanaa kysytään,eikä kirjoi-
                             teta näkyvästi.

Ja sitten ongelma mihin törmäsin. Vaikutti aivan kuin olisi ollut jotkut asetukset väärin, mutta en muistanut mistä niitä lähtä etsimään. Error.log -tiedostossa ei ollut viitteitä ongelmista, joka häiritsi minua erittäin paljon.

You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near

Tämä tuli aivan sama mitä tein, CREATE DATABASE, CREATE TABLE,GRANT ALL. Mutta onneksi voin esittää ainakin yhden kysymyksen opettajalle.

Lähteet:

Tero Karvinen, Työasemat ja tietoverkot -kurssi – http://terokarvinen.com/2012/aikataulu-%E2%80%93-tyoasemat-ja-tietoverkot-ict1tn002-33-syksylla-2012

Tero Karvinen, Build web interface to database lamp Linux Apache MySQL PHP http://terokarvinen.com/2007/build-web-interface-to-database-lamp-linux-apache-mysql-php-4#mysql

Roger Douglass, PHP BIM Calcular – http://www.dzone.com/snippets/php-bmi-calculator

– Jokela Antti-Ville

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html

Apache – maailman suosituin palvelinohjelma

Tero Karvisen Työasemat ja tietoverkot -kurssilla oli vuorossa Apachen asennus ja tutustuminen. Apacheen en ollut aikaisemmin tutustunut, mutta oppitunnin jälkeen sen helppokäyttöisyys sai jopa pienen hymyn huulille.

Artikkelissa on käytetty samaa ASUS -kannettavaa kuin aikaisemmissakin. Asennuksen ajankohta oli maanantai 3. syyskuuta 2012 kello 21.10 – 23.00.

Artikkelissa kaikki esimerkki -sanat komentopäätteessä on oman koneenne nimen tilalla. Älkää ikinä asentako oman koneenne nimeksi esimerkkiä tai muuta yhtä mielikuvituksetonta, ja muistakaa hyvät,hankalasti arvattavat salasanat!

Apachen asennus

Asennuksen aloitin päivittämällä pakettivarastot ja sitten asentamalla paketin apache2.

$ sudo apt-get update
$ sudo apt-get install apache2

Asennuksen aikana kysyessä levytilan muutoksesta vastasin kyllä “y“.

Apachen testikäyttöä

Asennuksen jälkeen kokeilin toimivuutta. Localhost on testi sivu missä näkee toimiiko sivu. Käynnistin Firefox -selaimen ja kirjoitin osoitekenttään localhost ja onnistuneesta asennuksesta merkkinä oli “It works!This is the default web page for this server.The web server software is running but no content has been added, yet.” -viesti. Testien suorittaminen suositeltavaa jokaisen muutoksen jälkeen, ettei vahingossa käy niin että kahden tunnin työ menee hukkaa yhden virheen takia.

Jotta voin kertoa kavereilleni palvelimestani, selvitin komennon ifconfigavulla oman ip-osoitteeni. Ip-osoitteen kirjoittaessa siis pääsee samalle sivulle.

Julkisen kansion teko ja sen määrittäminen käyttöön

Kaikki tiedostot public_html –kansiossa kotihakemistossa näkyvät internettiin. Joten teemme kansion kotihakemistoon ja määritämme sen apachen käyttöön. Ensin määritetään ja sen jälkeen käynnistetään palvelin uudestaan, jotta muutokset tulevat voimaan:

$ sudo a2enmod userdir
$ sudo service apache2 restart

Varmistin seuraavaksi pwd-komennolla, että olen kotihakemistossa. Jos ei ole niin kotihakemistoon pääsee tutulla cd-komennolla. Sitten tein kansion public_html ,alaviivaa ei saa unohtaa.

$ mkdir public_html

Seuraavaksi yritin päästä kansiooni selaimen kautta kirjoittaen käyttäjätunnukseni localhostin perään näin localhost/~esimerkki/. Sivu ilmoitti että 403 Forbidden error. Tämä ilmoitus tuli sen takia, koska minulla onkin kryptattu kotihakemisto en päässyt sivuille. Joten ei muuta kuin käyttöoikeuksia muuttamaan.

Käyttöoikeuksien muuttaminen

Käyttöoikeudet tarkistetaan ls -l-komennolla, ja koska on tarkoitus vain vaihtaa public_html -kansion käyttöoikeuksia, kirjoitin näin:

Ensin mennään public_html -kansioon,katsotaan oikeudet ja muutetaan niitä.

$ cd public_html
~:public_html$ ls -l
total 12
-rw-rw-r-- 1 esimerkki esimerkki 38 Sep  3 21:39 index.html

Tulosteesta huomasin, ettei käyttöoikeudet olleet oikein,joten muutin viimeisen väliviivan tilalle ajokomennon x komennolla:

$chmod ugo+x /home/esimerkki /home/esimerkki/public_html

Tämän jälkeen kun yritin samalla sivulle kuin hetki sitten, pääsin onnistuneesti sivulle.

Etusivun luonti

Jotta localhost/~esimerkki -sivustolle mentäessä näkisin jonkinlaisen sivun, tein public_html -kansioon tekstitiedoston. Ensin siis public_html -kansioon ja sitten tekstitiedoston luominen, jonka nimeksi annoin index.html.

$ cd public_html
:~public_html$ nano index.html

Kirjoitin tiedostoon “Hei maailma!”  ja painoin ctrl+x ja tallensin tiedoston. Avasin selaimen ja sivu toimi hienosti.

Apachen lokitiedosto

Apachen lokitiedostot sijaiset /var/log/apache2/ –kansiossa. Access.log -loki kertoo nimensä mukaan onnistuneet yhdistykset ja error.log -loki puolestaan epäonnistuneet. Esimerkkinä epäonnistuneesta lokitiedosta on tässä artikkelissa mainittu virheilmoitus 403 Forbidden error. Lokitiedoissa lukee selvästi että pääsy evätty (Permission denied). Lokissa on kerrottu mistä yhteys on otettu,milloin,syy ja käytetty selain.

[Mon Sep 03 21:46:37 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /~esimerkki/ denied

Onnistuneesta lokitiedosta voidaan ottaa huomioon vaikka käyttöoikeuksien muuttamisen jälkeinen lokitieto /var/log/apache2/access.log -lokista.Lokissa on kerrottu mistä yhteys on otettu,milloin,syy ja käytetty selain.

127.0.0.1 - - [03/Sep/2012:22:01:31 +0300] "GET /~antti-ville/ HTTP/1.1" 200 394 "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0"

Telnet

Otin Telnetillä yhteyden Apachiin komennolla:

$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

Tämän jälkeen on mahdollisuus kirjotella kaikenlaista turhaa, mutta myös mahdollisuus ottaa yhteys vaikka omiin sivuihin, jotka tein tämän artikkelin aikana.

esimerkki@xubuntu:~$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /~esimerkki/index.html
Hei maailma!
Connection closed by foreign host.
esimerkki@xubuntu:~$

Eli komento näytti mitä tiedostossa luki. Näistä tuli lokitiedostoihin merkintä onnistuneesta yhdistyksestä.

127.0.0.1 - - [03/Sep/2012:22:18:43 +0300] "GET /~esimerkki/index.html" 200 13 "-" "-"

Lähteet:

Tero Karvinen, Työasemat ja tietoverkot -kurssi – http://terokarvinen.com/2012/aikataulu-%E2%80%93-tyoasemat-ja-tietoverkot-ict1tn002-33-syksylla-2012

Telnet, Wikipedia http://en.wikipedia.org/wiki/Telnet

– Jokela Antti-Ville

Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html