PHP

ดู code กันก่อนนะ ชื่อ randomImage.php :

<?php
session_start();
// กำหนดตวอักขระที่จะใช้
$alphanum = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

// สุ่มเอามาสัก 5 ตัวดิ
$rand = substr(str_shuffle($alphanum), 0, 5);
$_SESSION['image_random_value'] = md5($rand);

//เลือกภาพพื้นหลังก่อน
$bgNum = rand(1, 4);

$image = imagecreatefromjpeg("background$bgNum.jpg");

$textColor = imagecolorallocate ($image, 0, 0, 0);

// วาดตัวหนังสือขึ้นมา
imagestring ($image, 5, 5, 8, $rand, $textColor);

// send several headers to make sure the image is not cached
// taken directly from the PHP Manual

// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");

// send the content type header so the image is displayed properly
header('Content-type: image/jpeg');

// send the image to the browser
imagejpeg($image);

// destroy the image to free up the memory
imagedestroy($image);
?>

code ตัวนี้ก็ไว้สร้างรูปนะครับไม่มีไรมาก ดู background กันดีกว่า
1:
2:
3:
4:
ลองมาสร้าง from กันดูนะครับ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
if ($errorMessage != '') {
?>
<p align="center"><strong><font color="#990000"><?php echo $errorMessage; ?></font></strong></p>
<?php
}
?>
<form action="checklog.php" method="post" name="frmLogin" id="frmLogin">
<table width="500" border="1" align="center" cellpadding="2" cellspacing="2">
<tr>
<td width="150">User Id</td>
<td><input name="txtUserId" type="text" id="txtUserId"></td>
</tr>
<tr>
<td width="150">Password</td>
<td><input name="txtPassword" type="password" id="txtPassword"></td>
</tr>
<tr>
<td width="150">Enter Number</td>
<td><input name="txtNumber" type="text" id="txtNumber" value="">
&nbsp;&nbsp;<img src="randomImage.php"></td>
</tr>

<tr>
<td width="150">&nbsp;</td>
<td><input name="btnLogin" type="submit" id="btnLogin" value="Login"></td>
</tr>
</table>
</form>
</body>
</html>

ดูตัวอย่างกัน

edit @ 2007/08/24 19:57:41

pass by value VS pass by referrence

posted on 10 Sep 2007 20:50 by pommatt  in PHP
วันนี้จะมาพูดถึงการส่งค่าใน php กัน
1. pass by value
ชื่อก็บอกแล้ว ว่าเป็นการส่งค่าไป พูดกันให้เข้าใจง่ายๆ คือการ copy
ค่าไปเท่านั้นทำให้กลายเป็นตัวแปรคนล่ะตัวไม่เกี่ยวกัน ดู code:
<?php
$color = 'blue';
$settings['color'] = $color;
?>
เป็นการ copy ค่า ของตัวแปร color ที่มีค่า blue มาให้ $settings['color']
แล้วถ้าต่อมา ตัวแปร $colorถูก set ค่าเป็น $color = 'red';
$settings['color'] ก็จะมีค่าเป็น blue เหมือนเดิม
2.pass by reference
ต่างจากตัวแรกเยอะ โดยจะมีการใช้ reference operator & (ampersand) นะครับ
เป็นเป็นการอ้างถึง ตัวแปร $color เลยหรือบอกได้ว่าเป็นตัวแปรเดียวกัน
แต่มีหลายชื่อก็ไม่น่าจะผิดครับ ดู code:
<?php
$color = 'blue';
$settings['color'] = &$color;
?>

ดูการเปรียบเทียบจาก Code กันเลยนะครับ

<?php
$color = 'blue';
$settings['color'] = $color; // Makes a copy
$color = 'red'; // $color changes
echo $settings['color']; // Displays "blue"
?>
<?php
$color = 'blue';
$settings['color'] = &$color; // Makes a reference
$color = 'red'; // $color changes
echo $settings['color']; // Displays "red"
?>
เห็นมั้ยครับว่าแบบหลัง $color เปลี่ยน $settings['color'] ก็จะเปลี่ยนด้วย เพราะคือตัวเดี่ยวกัน
PDO (PHP Data Objects) is a native data-access abstraction library
ผมมองว่าเป็น layer ที่สร้างขึ้นมาครอบการเข้าถึงฐานข้อมูลต่างๆ โดยสามารถ เข้าถึงได้
ทั้ง MySQL Oracal PostgreSQL โดยใช้หลักการเขียนของ PDO เองสบาย programmer เลยครับ
ยกตัวอย่างจาก code ครับ กรณี MySQL :
<?php
try
{
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
foreach (
$dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
}
catch (PDOException $e) { //มีการตรวจสอบข้อผิดพลาดให้แล้ว
print
"Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
ยกตัวอย่างจาก code ครับ กรณี PostgreSQL :
<?php
try
{
$dbh = new PDO('pgsql :host=localhost;dbname=test', $user, $pass);
foreach (
$dbh->query('SELECT * from FOO') as $row) {
print_r($row);
}
$dbh = null;
}
catch (PDOException $e) { //มีการตรวจสอบข้อผิดพลาดให้แล้ว
print
"Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
สังเกตนะครับ เราเปลี่ยนที่แค่ mysql กับ pgsql เทานั้นเอง ต่อไปถ้า เราเปลี่ยนเป็น oracal ก็ไม่มีปัญหาเลย จริงมั้ย รายละเอียดเพิ่มเติม ดูได้ที่
http://th.php.net/pdo

การ alias folder นอก folder root ของ apache

posted on 26 Sep 2007 16:42 by pommatt  in PHP
โดยปกติเวลาเราพัฒนาเว็บเราจะต้องนำไปวางไว้ที่ /www หรือ htdocs แต่ถ้าเราจะเอา folder งานเราไว้ที่ c:/งานเรา จะทำไงล่ะ
ปัญหานี้เราต้องไปแก้ file httpd.conf ของเจ้า apache เองดังนี้ครับ
รูปแบบ : Alias virtual_folder_name real_folder_name
ตัวอย่างครับผมมีงาน commerce อยู่ ผมเก็บไว้ที่ C:/commerce
จากนั้นเข้าไป set ที่ httpd.conf ดังนี้
<IfModule alias_module>
# ....
# Alias /webpath /full/filesystem/path
Alias /commerce/ "C:/commerce/"
Alias /commerce "C:/commerce"
# ...
</IfModule>
<Directory "C:/commerce">
Allow from all
</Directory>
เรียบร้อย เวลาเิปิด browser พิมพ์ http://localhost/commerce ก็ใช้ได้แล้วครับ


วันนี้เรามาว่ากันด้วยการใช้งาน MD5 กันครับ

MD5 เป็นการ Hashing แบบทางเดียว (One-way Encryption) โดยนิยมนำมาใช้ในการสื่อสารบนอินเตอร์เน็ทอย่างมาก เพื่อใช้ในการสื่อสารที่ต้องการความปลอดภัยสูงกว่าปกติ ซึ่งการเข้ารหัสที่ได้จะได้เป็นตัวอักษร ASCII ขนาด 32 ตัวอักษรตามมาตรฐาน RFC1321 เช่น <? echo md5("apple"); ?> จะได้เป็น 1f3870be274f6c49b3e31a0c6728957f จะเห็นว่าเป็นชุดตัวอักษรที่ไม่สามารถแปรออกมาได้

แล้วเท่านี้ยังไม่ปลอดภัยอีกหรือ? ยังไม่ปลอดภัยเพียงพอแน่นอนครับ เพราะว่าการเข้ารหัส MD5 นี้เป็นมาตรฐานซึ่งพวก Cracker ทั้งหลายเขาก็เขียนโปรแกรม MD5 Brute force ขึ้นมาตามมาตรฐานเหมือนกันจึงไม่ใช่เรื่องแปลกที่ข้อความจะถูกถอดรหัสออกมาได้

แล้วทำอย่างไรดีล่ะ มี 2 วิธีหลักๆครับ
  1. เข้ารหัสด้วย MD5 มากกว่า1ครั้ง เช่น <? echo md5(md5("apple")); ?>
  2. เข้ารหัสพร้อมด้วย public key เข่น
    <?
    $key = "modoeye.com";
    echo md5("apple".$key);
    ?>
ทั้ง 2 วิธีจะทำให้การถอดรหัสทำได้ยากมากขึ้นครับ ลองเอาไปประยุกต์ใช้ดูนะครับ
อ้างอิงจาก : http://forum.modoeye.com