natty

Archive for the ‘PHP’ Category

[PHP] การเพิ่ม Performance ให้กับ PHP+MySQL ด้วย xDebug,APC,memcache

In PHP on June 10, 2009 at 1:07 am

เขียนโปรแกรมเล็กๆ ไม่ค่อยมีปัญหาอะไร แต่เมื่อไหร่ก็ตาม ที่งานของเรา ต้องทำงานกับข้อมูลเยอะๆ และ Application ขนาดใหญ่ มีหลาย module โดยเฉพาะ หากใช้ object-oriented ด้วยแล้ว แม้จะมีประโยชน์ในด้านของการออกแบบก็จริง แต่ด้านของ performance ก็มีผลกระทบในแง่ร้ายเช่นกัน ดังนั้น จึงควรที่จะเรียนรู้เกี่ยวกับการ config ค่าต่าง ๆ ทั้งในส่วนของ PHP และ MySQL ค่ะ

blog นี้จะไม่กล่าวถึงการ install ในขั้นต้นนะคะ โดยเป็น Apache Server บน linux ค่ะ

Read the rest of this entry »

[PHP] สิ่งหนึ่งที่ทำให้เกิด Call to a member function on a non-object

In PHP on November 19, 2008 at 4:45 pm

วันนี้ แก้ error โง่ๆ ไปพักหนึ่ง ด้วยความมึน ตอน run PHP แล้วเกิด คือ พยายามจะ new object แต่ว่าไม่สามารถจะ new ได้ และหลังจาก new ก็ไปใช้ method ของมัน ทำให้มันบอกว่า ใช้ function จากตัวที่ไม่เป็น object ไม่ได้ อย่างเช่น


$test = new AR(new Ds());

$test->getDS();

มันจะเรียก getDS(); ไม่ได้ เพราะ $test ยังเป็น null

มาเล่น PhotoHunt กัน ให้ดูว่า class ของ Ds ทำอะไร


var $dsStrategy;
public function _construct (iDSStrategy $dsStrategy){
$this->dsStrategy = $dsStrategy;
}
public  function getValForCreditFromCore(){
$this->dsStrategy->getValForCreditFromCore();
} 

นี่แหละ ทำให้เกิด Call to a member function on a non-object งงเลยใช่ไหมว่าทำไม

เหตุผลสำหรับ code นี้ เพราะที่ใส่ underscore หน้า constructor ไปอันเดียว – -”

ที่ถูกต้องเป็น

public function __construct (iDSStrategy $dsStrategy)

[PHP] Simple Test

In PHP on October 22, 2008 at 5:41 pm

เนื่องจากมีคนเรียกร้องอยากใช้งาน SimpleTest ใน PHP ขึ้นมาอย่างกระทันหัน ไม่ได้ตั้งตัว ก็เลยเอามาวางให้ที่นี่นะคะ

ก่อนอื่น ไป ดาวน์โหลดมาก่อนนะคะ

เมื่อได้มาแล้ว ก็แตกไฟล์ แล้วเอา folder ชื่อ simpletest ก็เอาไปวางใน apache ของตัวเอง สำหรับเก๋ เก๋จะวางไว้นอกสุด ก็คือใน htdocs เลย ใครจะมาเรียกใช้เมื่อไหร่ก็ได้

เก๋จะให้ตัวอย่างสำหรับการทำ SimpleTest ของ blog ตอนหนึ่ง คือ [PHP] Class สำหรับ convert DBF to MySQL

โดยเก๋จะสร้าง folder ชื่อ unittest และมีไฟล์ชื่อ TestDBFMySQL.php อยู่ การทำหน้า test เราต้องใส่ require_once(‘../../simpletest/autorun.php’); เพื่อ include ไปยัง lib ของ simpletest และก็ include ไฟล์ที่เราจะ test ด้วย ปกติจะ new เป็น test case และ test suite ใน class อื่นได้ แต่อันนี้ไม่ได้ new ไว้ไฟล์อื่น แบบว่าเรียกไฟล์นี้โดยตรงเลย

การ test ก็จะ assert ในหลายกรณี อันนี้ก็แล้วแต่เราว่าจะทำยังงัย อ่านได้ที่นี่

Read the rest of this entry »

[Resin] PHP in Java: Natty & Juacompe discussion

In configuration, java, PHP on September 24, 2008 at 8:25 pm

เนื่องมาจาก natty ที่พอจะมีความรู้เรื่อง resin เท่าหางอึ่ง + PHP อยู่บ้าง บวกกับ juacompe ที่อัดแน่นไปด้วยความรู้เกี่ยวกับ server ที่ใช้ run java ทำให้วันนี้ก็เกิดความเข้าใจมากขึ้นกับ PHP in Java ใน resin

หากเราต้องการทำให้ java ของเราถูกเรียกโดย PHP ได้ ต้องทำให้ class นั้น extends AbstractQuercusModule และมี method ที่รับ parameter env ซึ่งเป็น quercus environment resources หรือไม่ก็ต้องสร้าง class ไว้แล้วให้มาสร้าง instant อยู่ใน class นี้

Read the rest of this entry »

[PHP] Class สำหรับ convert DBF to MySQL

In Foxpro, PHP on September 22, 2008 at 7:05 pm

เนื่องจากมีโปรเจคหนึ่งที่ต้องทำส่วนหนึ่ง คือส่วนของการ convert DBF to MySQL เลยเอามาฝากกัน ที่ทำเพราะว่า ระบบนี้จะเป็นต้องอ่าน DBF file ใหม่ๆ ทุกวันเพื่อนำมาใช้ในระบบ แต่ developer อยากใช้กับ MySQL database ดังนั้นเก๋จึงทำ class ที่อ่าน dbf file มาลง mysql ให้เค้า โดยทำเป็นตารางที่หน้าตาเหมือนกันใน MySQL ให้

ระบบนี้มี table ชื่อเดิม แต่ต้องอัพเดทข้อมูลตาม dbf file ทุกวัน ดังนั้นเก๋จึงไม่ได้ทำ function ที่ให้สร้าง MySQL table หน้าตาเหมือนๆ กัน ทำแค่ให้ insert ข้อมูลลงไปใน MySQL ได้ นั่นหมายความว่า หากต้องการนำ class นี้ไปใช้ ต้องสร้าง table ที่หน้าตาเหมือนกับ dbf file ไว้ก่อน แล้วค่อยเอา class นี้ไปช่วยในการ insert ข้อมูลให้

Read the rest of this entry »

[PHP] Enable DBase function

In PHP on September 22, 2008 at 11:54 am

พอดีกำลังจะทำ class สำหรับ DBF MySQL ประมาณว่า convert กันไปกันมา เลยจะอ่าน DBase file แต่พอดีตะกี้ใช้แล้ว มัน error แบบนี้

Fatal error: Call to undefined function dbase_open() in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\DBFMySQL\DBFMySQL.php on line 27

พอไป search หาวิธีแก้ ตามลิงค์นี้ เค้าก็บอกว่า ต้องไปแก้ใน php.ini ให้มัน enable dbase dll ก่อน

extension=php_dbase.dll

เท่านี้แหละที่อยากบอก 😉

PHP+Foxpro: การ query date

In Foxpro, PHP on September 17, 2008 at 1:08 pm

จากตอนที่แล้ว เรื่องของ Apache + PHP + GD lib + Foxpro + JPGraph ก็มาดูกันต่อในเรื่องการ query date ของ foxpro

จะยกตัวอย่างฟิลด์ date ที่เก็บเป็น yyyy/mm/dd

สมมติว่าเรา query date ขึ้นมา


$sql = "SELECT data_date FROM tablename;
$rs=odbc_exec($conn,$sql);
if (!$rs)
{exit("Error in SQL");}
while (odbc_fetch_row($rs))
{
$data_date = odbc_result($rs,"data_date");
}

Read the rest of this entry »

Apache + PHP + GD lib + Foxpro + JPGraph

In PHP on September 12, 2008 at 5:37 pm

เริ่ม blog แรกด้วยเรื่องง่ายๆ ที่เกือบจะลืมไปแล้ว แอบทำช้านิดนึงด้วยเพราะว่าลืม และไม่เคยจะจดไว้เลย จดไว้นี่ก่อนแล้วกัน

วันนี้ลง Apache + PHP + GD Lib + Foxpro บน Windows เพราะว่าจะทำกราฟที่ดึงจาก Foxpro โดยใช้ PHP ซึ่งต้องทำงานผ่าน ODBC เลยต้องลงบน Windows

การติดตั้ง Apache + PHP
1. download and install Apache
2. download PHP และแตกไฟล์ลงใน path ที่ต้องการ ตัวนี้เป็น package เพราะเราต้องการตัว php_gd2.dll ด้วย
3. set system path to PHP (ถ้าไม่ set มันจะขึ้นหน้า page เวลาเข้า PHP ว่า You don’t have permission to access /php/php-cgi.exe)
3. เปิดไฟล์ httpd.conf เพื่อตั้งค่าให้ Apache สามารถ compile PHP ได้ โดยเพิ่มบรรทัดต่อไปนี้ลงไป

# ตำแหน่งที่เก็บ PHP Interpreter

ScriptAlias /php/ "c:/Program Files/PHP/"
AddType application/x-httpd-php .php 

#สำหรับ PHP version 5 ใช้ บรรทัดล่างนี้

Action application/x-httpd-php "/php/php-cgi.exe" 

4. ลองสร้างไฟล์ php ขึ้นมา แล้วปรินท์ phpinfo(); restart apache แล้วลองเข้า http://localhost/ชื่อไฟล์.php ถ้ามันแสดง phpinfo ให้ก็แสดงว่าเรา config สำเร็จแล้ว

5. เนื่องจากเราต้องใช้งาน php_gd2.dll ด้วย หากเราดูใน PHP/ext เราจะเห็น php_gd2.dll ซึ่งเราจะสามารถใช้งานได้โดยต้องเข้าไปที่ php.ini (ซึ่งอยู่ใน PHP package แต่เป็นชื่อ php-dist.ini เราต้องเปลี่ยนชื่อให้เป็น php.ini) แล้วเอา ; ออกที่บรรทัดชื่อว่า ;extension=php_gd2.dll

และอย่าลืมแก้ในไฟล์ php.ini ตรง extension_dir ให้ชี้ไปที่ ext เช่น extension_dir = “C:\Program Files\PHP\ext”

แล้วทำการ restart apache ใหม่

ใช้ code ต่อไปนี้เพื่อ test gd สิ่งทีจะได้คือ ข้อความสีชมพูเขียนว่า A simple Text String


$im = @ ImageCreate ( 150, 100)
or die ( “Cannot create a new GD image.”);
$background_color = ImageColorAllocate ($im, 255, 255, 255);
$text_color = ImageColorAllocate ($im, 233, 14, 91);
ImageString ($im, 1, 5, 5, “A Simple Text String”, $text_color );
header (“Content-type: image/png”);
ImagePng ($im); 

และ code ต่อไปนี้เพื่อ test gd2 สิ่งที่จะได้คือ กรอบสีเหลี่ยมสีดำกับขาว

$im =  imagecreatetruecolor ( 300, 200);
$black = imagecolorallocate ($im, 0, 0, 0 );
$white = imagecolorallocate ($im, 255, 255, 255 );

imagefilledrectangle ($im,0, 0,399,99 ,$white);
imagerectangle ($im,20, 20,250,190 ,$black);

header (“Content-type: image/png” );
imagepng ($im);

หากรันไม่ได้ มี error เหมือนกับว่ายังไม่มี jpgraph ให้เข้าไปดูที่ คำสั่ง extension_dir ใน php.ini ว่าชี้ไปยัง path ที่เป็น PHP/ext แล้วหรือยัง

การติดตั้ง jpgraph

jpgraph เป็น graph library ที่ใช้ได้กับ PHP โดยสามารถดาวน์โหลดได้จาก ที่นี่ โดยหากใช้กับ PHP5 ควรดาวน์โหลด version 2.xx แตกไฟล์ลง htdoc

การใช้งาน PHP ร่วมกับ Foxpro

1. set system ODBC (ย้ำ system นะ) โดยเลือก driver เป็น Microsoft Visual Foxpro Driver แล้วใส่ชื่อ datasource name (dsn) ที่ต้องการ เลือก database type เป็น free table และ browse ไปยัง path ที่ DBF ของเราวางอยู่

2. ลอง test ว่า php ของเราสามารถติดต่อกับ dbf ได้หรือยัง โดยใช้ code ต่อไปนี้ ซึ่งจะทำให้แสดงข้อมูลพร้อมหัวคอลัมน์ออกมา

<?php
$id = odbc_connect( “yourdsnname”,”",”");
if ( $id != 0 )   {
echo “DSN qc2004 connected
”;
echo “ID = “, $id, “
”;
$sql = “SELECT * from yourtable”;
$rs = odbc_exec( $id, $sql );
$odbc_result_all($rs);
} else  {
echo “Error connecting to qc2004 webdata”;
}
odbc_close_all();
?>