php « แลกเปลี่ยนเรียนรู้:km tool

archive page

คำสำคัญ ‘php’

สร้างบริการตรวจข้อมูลบน ldap

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Thursday, September 29th, 2011
ldap checking

ldap checking

29 ก.ย.54 มีโอกาสต้องสืบค้นข้อมูลบน ldap server เดิมทีจะใช้ ldap client ติดต่อเข้าไป ซึ่งเป็นซอฟท์แวร์ที่ต้องมีการติดตั้ง หากต้องการตรวจสอบผ่านเว็บเพจก็ต้องเขียน script ขึ้น เพื่อให้สามารถใช้บริการจากเครื่องใดก็ได้ในระบบ LAN ที่มีไอพีขึ้นต้นด้วย 172 (ตาม script)
มีตัวอย่าง php script ดังนี้
<?
// config
$host = "ldap://xxx.xxx.xxx";
$domain = "xxxxx";
$pass = "xxx";
// form
if (!isset($_POST["act"]) && substr($_SERVER["REMOTE_ADDR"],0,3) == "172"){
?>
<form action="" method="post">uid <input name=uid><br>
<select name=ou size=8>
<option value="ou=MANAGER,ou=SALE">Manager</option>
<option value="ou=STAFF,ou=SALE">Staff</option>
</select>
<br>form password <input name=fpass type=password>
<br><input type=submit name=act value=check>
</form>
<? exit; }
if ($_POST["fpass"] != "xxxx") { echo "invalid"; exit; }
//
$baseDn2 = 'uid='.$_POST["uid"].','.$_POST["ou"].',dc='.$domain.',dc=com';
$baseDn1 = 'cn=Manager,dc='.$domain.',dc=com';
//
$ldap = ldap_connect($host);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$b = ldap_bind($ldap,$baseDn1,$pass) or die("bind died");
if($b) echo "<pre>{$_POST["uid"]} \n";
$result = ldap_search($ldap, $baseDn2,"(cn=*)");
$rec = ldap_get_entries($ldap,$result);
if (!isset($rec[0]["data"][0]))
echo "not found"; else echo $rec[0]["data"][0];
ldap_unbind($ldap);
?>

php code สำหรับติดต่อ ldap server

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Thursday, September 22nd, 2011

22 ก.ย.54 มีโอกาสเรียนรู้การเขียนโปรแกรมด้วยภาษา PHP ติดต่อกับ LDAP Server โดยมี engineer ติดตั้ง server ตัวนี้ไว้ แล้วผมมีหน้าที่เข้าไปใช้งาน ก็คิดว่าจะใช้ php (ใช้ phpinfo ตรวจแล้วพบว่า php สามารถใช้ ldap ได้) เข้าไปอ่านข้อมูลผู้ใช้ เพื่อทำ authentication ตรวจผู้ใช้งานระบบ และ code ชุดนี้เป็นตัวอย่างที่ผมใช้ติดต่อกับ ldap server การติดต่อนั้นอาจใช้ browser

พิมพ์ ldap://www.domain.com:389
/uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com

ก็จะเปิดด้วยโปรแกรม Windows Contact ขึ้นมาอัตโนมัติ

<?
$host = “ldap://www.domain.com“;
$baseDn1 = ‘cn=Manager,dc=domain,dc=com‘;
$baseDn2 = ‘uid=BURIN_R,ou=CLERK,ou=OFFICE1,dc=domain,dc=com‘;
$password = “your password“;
$ldap = ldap_connect($host);
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$b = ldap_bind($ldap,$baseDn1,$password) or die(“bind died”);
echo “<pre>bind :”;
if($b) echo “pass”; else echo “fail”;
$result = ldap_search($ldap, $baseDn2,”(cn=*)”);
$rec = ldap_get_entries($ldap,$result);
echo ldap_count_entries($ldap,$result);
echo $rec[0]["cn"][0];
echo $rec[0]["userpassword"][0];
echo $rec[0][0][0];
print_r($rec);
ldap_unbind($ldap);
?>

การติดตั้ง php5.2.12 บน iis7 ใน win7

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Friday, September 9th, 2011
วิธีที่ 1 : เรียกใช้ .php ผ่าน localhost ได้
1. ติดตั้ง iis7 ใน win7 ผ่าน Control Panel, programs and features แล้ว Turn Windows Features on or off แล้วเลือกลงโปรแกรมให้ครบ อาทิ Internet Information Services, World Wide Web Services, Application Development Features, CGI และอื่น ๆ
2. download โปรแกรมจาก
3. คลาย php-5.2.12-Win32-VC6-x86.zip ลงใน c:\php
4. เข้าห้อง c:\php แล้วเปลี่ยนชื่อแฟ้ม php.ini-recommended เป็น php.ini
แล้วเพิ่ม cgi.force_redirect=0
แล้วเปลี่ยน extension_dir = “c:\php\ext”
5. เข้า Control Panel, Administrative Tools, Internet Information Services (IIS) Manager ในหัวข้อ IIS ให้เลือก double click บน Handler Mappings แล้วเลือก Add Module Mapping เพิ่ม Request path เป็น *.php แล้ว Executable เป็น c:\php\php5isapi.dll แล้ว Name เป็น PHP
6. กลับไปคลิ๊ก Sites, Default Web Site แล้ว double click ISAPI Filters แล้วคลิ๊ก Add ให้ Filter name = php และ Executable = c:\php\php5isapi.dll
7. ลองเขียน x.php ใน c:\inetpub\wwwroot ได้ครับ
วิธีที่ 2 แต่ก็ไม่ ok
ทดสอบกับ php-5.3.8-nts-Win32-VC9-x86.zip แล้วใช้ไม่ได้
เพราะคลาย .zip แล้วไม่พบ php5isapi.dll พบแต่ php5.dll
เมื่อลองใช้แทน php5isapi.dll ก็พบว่า iis7 ไม่ยอมรับ
หลังติดตั้ง ก็ยังไม่ run .php เห็น source code ครับ
วิธีที่ 3 แต่ก็ไม่ ok
ติดตั้งโปรแกรมของ Microsoft
หลังติดตั้ง ก็ยังไม่ run .php เห็น source code ครับ

ปรับปรุงฟอร์มตามรหัสผู้ใช้ด้วย PHP รุ่น 1

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Tuesday, June 28th, 2011

28 มิ.ย.54 มีโอกาสพัฒนาโปรแกรม เรียกว่า โปรแกรมรุ่นหนึ่งสำหรับสร้างฟอร์มปรับข้อมูลตามรหัสผู้ใช้ เขียนด้วย PHP4 บน IIS6 สำหรับระบบ TQF มี 4 โปรแกรม คือ
1. โปรแกรมรับรหัสผู้ใช้ (index.php)
2. โปรแกรมตรวจรหัส และแสดงข้อมูลในฟอร์ม (user.php)
3. โปรแกรมปรับปรุงข้อมูล (update.php)
4. โปรแกรมออกจากระบบ (logout.php)

<form action=”user.php” method=”post”>
<input name=”fuser” value=”">
<input name=”fpasswd” type=password value=”">
<input type=”submit” value=”เข้าใช้ระบบ”>
</form>

<?
session_start();
$mysql_db = “tqf”;
$mysql_user = “root”;
$mysql_password = “yourname”;
if (isset($_REQUEST['fuser']) &&
$_REQUEST['fuser'] == “myname” && $_REQUEST['fpasswd'] == “mypass”) {
$_SESSION['suser'] = $_REQUEST['fuser'];
}
if (!isset($_SESSION['suser'])) header(“Location: index.php”);
// ====
$query    = “select * from tqf1″;
echo “<form action=update.php method=post>”;
$connect = mysql_connect(“localhost”, $mysql_user , $mysql_password);
mysql_query(“set names tis620″);
$result = mysql_db_query($mysql_db,$query);
if ($result) {
while ($object = mysql_fetch_object($result)) {
echo ‘<textarea name=t101 rows=5 cols=80>’. $object->t101 . “</textarea><br />”;
echo ‘<textarea name=t102 rows=5 cols=80>’. $object->t102 . “</textarea><br />”;
echo ‘<textarea name=t103 rows=5 cols=80>’. $object->t103 . “</textarea><br />”;
echo ‘<textarea name=t104 rows=5 cols=80>’. $object->t104 . “</textarea><br />”;
echo ‘<textarea name=t105 rows=5 cols=80>’. $object->t105 . “</textarea><br />”;
}
echo “<br/><input type=submit value=’ปรับปรุง’></form>”;
}
mysql_close($connect);
?>
<a href=logout.php>logout</a>

<?
session_start();
$mysql_db = “tqf”;
$mysql_user = “root”;
$mysql_password = “yourname”;
if (isset($_SESSION['suser'])) {
$query    = “update tqf1 set
t101=’”. $_POST["t101"] .”‘ ,
t102=’”. $_POST["t102"] .”‘ ,
t103=’”. $_POST["t103"] .”‘ ,
t104=’”. $_POST["t104"] .”‘ ,
t105=’”. $_POST["t105"] .”‘
where user =’”. $_SESSION['suser'] . “‘”;
$connect = mysql_connect(“localhost”, $mysql_user , $mysql_password);
mysql_query(“set names tis620″);
$result = mysql_db_query($mysql_db,$query);
echo $query;
mysql_close($connect);
header(“Location: user.php”);
}
header(“Location: index.php”);
?>

<?
session_start();
session_destroy();
header(“Location: user.php”);
?>


ภาพปกนิตยสารด้วยการซ้อนภาพ ภาษา PHP

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Sunday, June 19th, 2011
merge image by php

merge image by php

19 มิ.ย.54 อ.พจน์ เล่าให้ฟังว่า ท่านใช้บริการ magmypic.com ทำให้ได้ภาพปก magazine สวย ๆ เป็นแรงกระตุ้นสำคัญให้ผมสนใจเรื่องนี้

แล้วผมก็สนใจ เข้าไปทดสอบ และค้นข้อมูลเพิ่มเติม ผลการทดลองใช้อยู่ใน thaiall.com/actress/joom.htm จากนั้นก็ต่อยอดมาทดสอบเขียนโปรแกรมด้วยภาษา PHP ทำการ Merge ภาพ 2 ภาพ คือ กรอบรูป และภาพผู้หญิง ก็พบว่า ได้ผลเป็นไปในแทนเดียวกับ magmypic.com ส่วนการประยุกต์ต่อไปคือ การทำเป็น fb application ให้เพื่อน ๆ ได้ใช้บริการส่งรูปที่อยู่ใน fb เข้ามาในระบบ ซึ่งเคยเห็นบริการแบบนี้อยู่มากมาย ถ้าลองทำในแบบไทยไทย ก็น่าสนใจอยู่ไม่น้อย .. แต่คงต้องพักไว้ก่อน เพื่อน ๆ สนใจโค้ด php จะลองเอาไปทำก็ได้ครับ ปัญหาคือ ต้องทำภาพ mag01.gif ให้เป็นภาพโปร่งใส ของผมใช้โปรแกรม iview ช่วยจัดการส่วนนี้ .. มิเช่นนั้นผลการซ้อนภาพจะมีปัญหาครับ

<?
$user = ‘user.jpg’;
$frame = ‘mag01.gif’;
$dest = imagecreatefromgif($frame);
$src = imagecreatefromjpeg($user);
$src_new = imagecreatetruecolor(280, 350);
list($width, $height) = getimagesize($user);
imagecopyresized($src_new, $src, 0, 0, 0, 0 , 280, 350, $width,$height);
imagecopymerge( $src_new, $dest, 0, 0, 0, 0, 280, 350, 100);
header(‘Content-Type: image/jpeg’);
imagegif($src_new);
imagedestroy($dest);
imagedestroy($src);
imagedestroy($src_new);
?>

http://www.thaiall.com/mag/merge.php
http://www.facebook.com/media/set/?set=a.213477228691078.52727.100000864060918


อัพโหลดหลายไฟล์ผ่าน click เดียว

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Saturday, January 22nd, 2011
swf file upload

swf file upload

22 ม.ค.54 การ upload แฟ้มเข้าเครื่องบริการทีละแฟ้มนั้น ใช้คำสั่งไม่เกิน 5 บรรทัดก็สามารถทำได้ แต่ถ้าต้องการ upload หลายแฟ้มด้วยการ click ครั้งเดียว ต้องเขียนหลายบรรทัด .. การศึกษาเรื่องนี้เกิดจาก คุณแบงค์ (เพื่อนร่วมงาน) ถามว่า ทำอย่างไร upload หลายแฟ้มเข้าเครื่องบริการผ่าน web browser .. ผมเองก็เคยเห็นใน hi5.com หรือ facebook.com เมื่อหลายปีก่อน เมื่อสืบค้นดูก็พบว่า swfupload.org มี code จึงนำมาดัดแปลง และเปิดให้ทดสอบ
ที่ http://www.thaiall.com/php/multiupload

การแก้ไข script มีหลายจุด คือ ยกเลิก preload alert ที่แสดงว่ามีปัญหาออกไป เปลี่ยนห้องรับแฟ้มให้เป็นห้องเดียวกับ script เลือกใช้ตัวอย่างจาก multiinstanceupload

+ http://demo.swfupload.org/v250beta3/
+ http://www.thaiall.com/download/multiupload_swfupload.zip


พบปัญหาการตัดนามสกุลใน e-document script

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Tuesday, December 21st, 2010
edit managefile

edit managefile

พบปัญหาการตัดอักษรจากชื่อแฟ้มผิดพลาดในระบบ e-document รุ่นที่ใช้กับมหาวิทยาลัย จากที่เคยทดสอบจะไม่ใช้ . ในชื่อแฟ้ม เพราะ . นิยมใช้กั้นระหว่างชื่อแฟ้มกับนามสกุลแฟ้ม แต่มีผู้ใช้บางท่านใช้ . เป็นบางส่วนของชื่อแฟ้ม ทำให้การแสดงรายชื่อแฟ้มไม่ครบตามที่ผู้ใช้คาดหวัง จึงเพิ่มบรรทัดที่ 142 สำหรับรวบรวมชื่อแฟ้มใหม่ให้ถูกต้อง และเปลี่ยนการแสดงชื่อแฟ้มจากอาร์เรย์ตัวที่ 0 มาเป็น $newcut ในบรรทัด 145 ตามตัวอย่าง (script ตัวนี้ไม่เผยแพร่ เพราะ upgrade สำหรับงานเฉพาะของมหาวิทยาลัย ที่ทำงานร่วมกับระบบภาระงาน และเอกสารประกันคุณภาพแล้ว) แต่รุ่นที่เผยแพร่คือ http://www.thaiall.com/perlphpasp/source.pl?9102


สร้าง quiz ด้วย fbml

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Tuesday, November 30th, 2010

quiz by fbml

quiz by fbml

30 พ.ย.53 ระบบข้อสอบที่เป็น application ตามที่ผู้พัฒนาใน fb เสนอไว้หลายรายนั้น ผมว่าเราคุมไม่ได้ เพราะผู้พัฒนาจะติดป้ายโฆษณา และกำหนดการตอบสนองที่อาจไม่เป็นไปตามที่เรากำหนด เมื่อได้ลองเขียน fbml พบว่าเราสามารถดึงข้อมูลออกไป แล้วสร้างฐานข้อมูลของเรา เมื่อทดสอบโค้ดแล้วได้เขียนวิธีการพัฒนาอย่างง่าย เผยแพร่ใน thaiall.com/facebook และตอนนี้รอข้อสอบที่จะส่งเข้าระบบ และควบคุมเนื้อหาแวดล้อมเท่านั้น แล้วจึงเผยแพร่ quiz ของมหาวิทยาลัยได้อย่างเป็นรูปธรรมต่อไป


ทดสอบโปรแกรมจับความเร็วของ while กับ for

โดย บุรินทร์ รุจจนพันธุ์ เมื่อ Friday, April 2nd, 2010

2 เม.ย.53 ปรับโปรแกรมจับเวลาการทำงานของโปรเซสด้วยภาษา PHP โดยใช้ Function เพราะต้องการวัดว่าใช้เวลาเท่าใดใน process ที่ต้องการทดสอบ มีการเก็บข้อมูลและเปรียบเทียบในสภาวะที่เชื่อถือได้ ซึ่ง code ชุดนี้สามารถนำไปปรับใช้ได้หลายกรณี แต่ครั้งนี้ทดสอบเพียงแค่การใช้ while และ for สำหรับทำซ้ำ 1000 รอบ พบว่า while ทำงานเร็วกว่า ในระดับ 1ต่อหมื่นวินาที ส่วนการทดสอบกับ mysql ผมยังไม่ได้เตรียมสภาวะแวดล้อมให้พร้อม จึงไม่นำเสนอผลที่นี่ .. ถ้าควบคุมและทดสอบจนได้ผลอย่างไร จะกลับมาเล่าใหม่

<?
$gap=0;
xtime("start");
for($i=1;$i<=1000;$i++) { }
echo number_format(xtime("stop"),9) ." วินาที<br>";
$j=0;
xtime("start");
while($j < 1000) { $j++; }
echo number_format(xtime("stop"),9) ." วินาที<br>";
function xtime ($action) {
  global $gap;
  list($u,$s) = split(" ",microtime()); 
  if ($action == "start") $gap = $s + $u; 
      else $gap = $s + $u - $gap;
  return $gap;
}
?>

+ http://www.thaiall.com/php


ทดสอบโปรแกรม thaiabc.com รุ่น 6.5 กับการประมวลผลบน DVD

โดย ขวัญชนก รุจจนพันธุ์ เมื่อ Thursday, April 1st, 2010

1 เม.ย.53 โปรแกรมแก้วสารพัดนึก คือ โปรแกรมที่ช่วย ติดตั้งเครื่องบริการเว็บ เครื่องบริการฐานข้อมูล โอเพนซอร์ส และรวมบทความมากมาย สำหรับนำไปเรียนรู้ได้ด้วยตนเอง หลังติดตั้งเสร็จจะได้โปรแกรม Apache + PHP + MySQL + Perl + Script เช่น e-Commerce, e-Learning, CMS, Article และ Source Code
     วันนี้เขียน software หลายร้อยโปรแกรมลง DVD หลายแผ่นไว้แจกนักศึกษาในชั้นเรียน ในนั้นมีโปรแกรม thaiabc.com แบบ no install ให้ประมวลผล apache + php + mysql ที่ใครเรียกว่าโปรแกรมประเภท WAMP จากการแก้ไขให้ run mysql แบบไม่ใช้ innodb พบว่า wordpress สามารถ run ผ่าน CD-ROM ได้ทันทีใช้ admin เข้าระบบก็ได้ เพราะการอ่าน blog ที่วางไว้สองร้อยกว่าเรื่องไม่มีการเก็บ log ของการอ่านไว้ในฐานข้อมูล  ส่วน learnsquare v2 ก็ไม่พบปัญหาแม้จะ login ด้วย admin ก็ใช้งานผ่าน DVD ได้ปกติ ส่วน phpmyadmin พบว่าสามารถเข้าดูข้อมูลใน mysql ได้ วันนี้คุณสามารถ download ชุดติดตั้งโปรแกรมแก้วสารพัดนึกจาก thaiabc.com ได้แล้ว 1) เมื่อติดตั้งแล้วก็ใช้งานใน Drive C 2)เลือกที่จะคัดลอกไปวางใน DVD หรือ CD ซึ่งเก็บข้อมูลได้มากและราคาถูก 3)เลือกที่จะคัดลอกไปวางไว้ใน Thumb Drive เพื่อใช้งานได้ในทุกที่
     แต่ moodle พบ error message เพราะมีการเขียน session ส่วน mambo มีการ insert เข้าฐานข้อมูลพบ error ส่วน oscommerce มีการ insert เข้าตาราง session พบ error ส่วน gallery ก็ใช้งานไม่ได้พบ error ส่วน phpbb3 ก็ใช้งานไม่ได้พบ error .. สรุปว่าผลการทดสอบกับ DVD ซึ่งเป็นสื่อเก็บข้อมูลแบบอ่านอย่างเดียว ถือเป็นปัญหาที่ไม่ใหญ่นัก เนื่องจากคาดไว้แล้ว แต่การใช้งานจริงก็จะใช้ผ่าน USB Drive หรือ Flash Drive เพราะเป็นอุปกรณ์ที่อ่านเขียนได้ ราคาถูกลงมาก และทำงานได้เร็วกว่า DVD แน่นอน .. ดังนั้นทุกบริการจึงทำงานได้ทั้งหมด