Friday, May 14, 2010

Activating Apache Mod Rewrite

Ubuntu Apache server дээрх Web Project-доо Rewrite engine ашиглах гэтэл ерөөсөө ажиллахгүй байсан тул энэ алдааг яаж засах талаар жаахан хайгуул хийж шийдлийг олов. Танд ч бас хэрэг болж мэднэ :)

Эхлээд дараах командаар холболт үүсгэнэ.

sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/


sudo gedit /etc/apache2/sites-enabled/000-default

000-default файлыг root эрхээр нээгээд

<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# Commented out for Ubuntu
#RedirectMatch ^/$ /apache2-default/
</Directory>

дээрх агуулга бүхий кодыг олоод AllowOverride хэсгийн ард байгаа None утгыг All болгож өөрчлөөд

sudo /etc/init.d/apache2 restart

командаар server-ээ restart хийхэд асуудалгүй ажиллаж байв :)

Monday, May 3, 2010

PHP: Cookie-н тухай && Remember me нэвтрэлтийн жишээ

Интернэт хэрэглэх явцад cookie гэсэн хэллэг багагүй тааралддаг (цахим хөтөчийн түүх(history)-г цэвэрлэхэд clear cookie гэх мэт хэллэг тааралддаг). Вэб урлахад суралцаж байгаа бол энэ ойлголтыг мэддэг, програмлчилж оновчтой ашиглаж сурах нь зөв юм.

Cookie гэдгийг "хэрэглэгчийн компьютер дээр хадгалагдаж, цахим хөтөчөөр дамжуулан вэб үзэх(сервэрт холбогдох) үед сервертэй 'ойлголцох' мэдээлэл" гэж энгийнээр тайлбарлаж болох юм. Вэб програмд cookie-г ашиглах жишээг дурдвал: нэвтрэх form-г бөглөх хэсэгт "Remember me" буюу "Энэ компьютерт намайг сана" гэсэн сонголт, Yahoo гэх мэт сайтад энэ боломж нь "14 хоног үйлчилнэ" гэх мэт тайлбар харагддаг. Эдгээр боломжуудыг cookie-н тусламжтай хэрэгжүүдэг

дээрхи зураг дээрээс cookie-г ашиглах зарчмыг харж болно.

PHP хэлэнд cookie-г үүсгэхдээ setcookie() функцийг ашигладаг.

<?php
setcookie ( name , value , expire , path, domain , secure );
?>

энэ фунцээр дамжуулах аргументууд нь

нэр -> Утга -> (амьдрах) Хугацаа -> Зам (сайтын) -> Domain -> Хамгаалтын төрөл

гэсэн дараалалтай байна. Гэхдээ дээрхи 6 параметрийг бүгдийг ашиглах албагүй, setcookie("username","ganaa"); гээд 2 параметрээр ч үүсгэж ашиглаж болно.


Аргумент

Тайлбар

Жишээ

Хандах нэр

Утга оноох, хандалт хийх зэрэгт ашиглана

username

Утга

Cookie хувьсагчид харгалзах утга

ganaa

Хугацаа

Cookie-н хүчинтэй хугацаа

time()+60*60*24*14 гэвэл 14 хоногийн туршид үйлчилнэ гэсэн үг. (ceкундээр хэмжигдэнэ)

path буюу зам

Вэб сайтын аль хэсэгт үйлчлэхийг заана. Анхны утга нь / байдаг(тухай сайтын бүх хуудсанд үйлчилнэ гэсэн үг).

jishee.com сайтын jishee.com/test хэсэгт хүчинтэй байлгана гэвэл /test гэж зааж өгч болно.

Domain

Аль дэд домэйн (subdomain) -д үйлчлэхийг заана.

jishee.com сайтын www.jishee.com-д л хүчинтэй байлгахыг хүсвэл www.jishee.com гэж зааж өгч болно. Бүх дэд домэйнуудад хүчинтэй байлгах бол .jishee.com гэж зааж болно.

Secure

Хамгаалалтын зэрэг. 0 1 гэсэн хоёр утгын нэгийг авна. 1 утгыг авсан бол HTTPS хамгаалагдсан холболтыг ашиглагдана.



Одоо cookie-г PHP дээр нэвтрүүлэх жишээнүүдийг туршъя.

cookie хувьсагчид хандахдаа. $_COOKIE[] массивт элемэнтын нэрээр индекс болгон хандах байдлаар ажилладаг.

<?php
setcookie("username","ganaa");
echo 'Cookie created.';
?>

гэсэн код(хуудас)-ыг дуудаж ажиллуулсаны дараа.

<?php
if (!isset($_COOKIE['username']))
{
  echo ("Opps, the cookie isn't set!");
}
else
{
  echo ("The stored username is ". $_COOKIE['username'] . ".");
}
?>

кодыг ажиллуулж үзвэл

The stored username is ganaa.

гэсэн мэдээлэл дэлгэцэнд хэвлэгдэх болно.

Cookie-г устгахдаа setcookie() функцийг мөн ашиглана.

<?php
setcookie("username","", time()-10 );
echo 'Rosebud.';
?>

username-д хоосон утга оноогоод хүчинтэй байх хугацааг өнгөрсөн хугацаанд зааж өгөхөөр хүчингүй болох юм.

Одоо cookie ашиглан Remember me сануулах жишээг үзье.

index.php

<?php
    header("Location: login.php");
?>

login.php

<?php
    //header("text/html; charset");
    session_start();
    if(isset($_COOKIE['usercookie']) && isset($_COOKIE['passcookie'])){
        $_SESSION['user']=$_COOKIE['usercookie'];
    }
    if(isset($_SESSION['user'])){
        header("Location: welcome.php");
    }
?>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<title>Нэвтрэх хэсэг</title>
</head>
<body>
<form action="check.php" method="post" name="logform">
<table>
<tr>
<td>
Хэрэглэгчийн нэр:
</td>
<td>
<input type='text' name="user" />
</td>
</tr>
<tr>
<td>
Нууц үг:
</td>
<td>
<input type='password' name="pass" />
</td>
</tr>
<tr style='text-align:right;'>
<td>
<input type='checkbox' name='remember' />Намайг сана :)
</td>
<td>
<input type='submit' value="Нэвтрэх"/>
</td>
</tr>
</table>

</form>
</body>
</html>

check.php

<?php
    session_start();
    
    $username = "ganaa";
    $password = "pass";
    
    
    $user = $_POST['user'];
    $pass = $_POST['pass'];
    
    if($user == $username && $pass == $password){
        $_SESSION['user'] = $user;
        header("Location: welcome.php");
        if(isset($_POST['remember'])){
            setcookie('usercookie', $user, time()+3600);
            setcookie('passcookie', $pass, time()+3600);
        }
    }else{
        header("Location: login.php");
    }
?>

welcome.php

<?php
    session_start();
    if(!isset($_SESSION['user'])){
        header("Location: login.php");
    }
?>
<html>
<head>
<title>Welcome <?php echo $_SESSION['user']; ?> </title>
</head>
<body>
<p>
<a href="logout.php">Log out</a>
</p>
</body>
</html>

logout.php

<?php
    session_start();
    if(isset($_SESSION['user'])){
        unset($_SESSION['user']);
        setcookie("usercookie", "", time()-3600);
        setcookie("passcookie", "", time()-3600);
    }
    session_destroy();
    header("Location: login.php");
?>

Saturday, May 1, 2010

vnstat: Интернэт хэрэглээнийхээ хэмжээг хянах нь

Интернэтийг өдөр тутмын хэрэглээгээ болгосон та бүхэн өөрийн интернэтээр хэдий хэмжээний мэдээлэл урсаж байгааг мэдэхийг хүсдэг болов уу гэж бодож байна. Миний хувьд G-mobile-н дараа төлбөрт багцыг ашигладаг болохоор өөрийн хэрэглээгээ хянахыг бүр ихээр хүсч байв :) Багагүй хайгуул, туршилт хийж энэ үүргийг гүйцэтгэх vnstat хэмээх програмыг оллоо. Ubuntu дээр CLI хувилбарыг хэрхэн суулгах, ашиглах талаар заавар бэлтгэлээ :)
Ubuntu дээр:

$ sudo apt-get install vnstat

командаар vnstat програмаа татаж суулгана.

Харин дараа нь

$ sudo chmod o+x /usr/bin/vnstat
$ sudo chmod o+wx /var/lib/vnstat/

командуудаар харгалзах хавтасны зөвшөөрлийн зэрэг(permission)-ийг тогтоож өгнө.

Сүлжээний урсгалаа хянахын тулд сүлжээнийхээ интерфэйсийг мэдэх шаардлагатай.

$ ifconfig

командаар сүлжээнүүдийхээ талаар мэдээллийг харж болно.

Жишээлбэл eth0 интерфэйс бүхий сүлжээгээр урсаж байгаа мэдээллийн хэмжээг мэдэхийг тулд

$ vnstat -u -i eth0

командаар update хийж,

$ vnstat

командаар, статистикийг харахад дараах байдалтай харагдана:


Database updated: Thu Aug 30 13:40:01 2007

        eth0

           received:          90.65 MB (11.9%)
        transmitted:         666.12 MB (88.1%)
              total:         756.77 MB

                        rx     |     tx     |  total
        -----------------------+------------+-----------
        yesterday     49.94 MB |  378.44 MB |  428.38 MB
            today     17.27 MB |  125.30 MB |  142.57 MB
        -----------------------+------------+-----------
        estimated        29 MB |     218 MB |     247 MB


Энэ програмыг ашиглах командуудын дэлгэрэнгийг

$ vnstat --help

командын тусламжтай илүү дэлгэрэнгүй уншаарай. Амжилт хүсье :)