PHP 5.3 เปลี่ยนอะไรบ้าง (php version 5.3.x)

สวัสดีครับ ช่วงนี้ต้องรวบรวมข้อมูลสำหรับทำงาน เลยถือโอกาสเขียนเป็นบทความเอาไว้ให้หลายๆท่านได้อ่านกัน ที่จริงแล้วส่วนนี้มีคนเขียนไว้ค่อนข้างจะเยอะครับ ลอง search ดูก็น่าจะเจอเยอะอยู่เหมือนกันครับ และคำอธิบายก็จะไกล้ๆเคียงกัน เพราะที่มาก็มาจาก php.net เหมือนกันเกือบทั้งหมดครับ บางที่ก็ไป copy เขามาต่อๆกันไป สำหรับบทความใน siammodify นี้หากผู้ใด copy ไปช่วยติดลิ้งค์กลับด้วยนะครับ

php function บางตัวที่จะถูกตัดออกไปใน php version 5.3

  • call_user_method()
  • call_user_method_array()
  • defin_syslog_variables()
  • dl()
  • ereg()
  • ereg_replace()
  • eregi()
  • eregi_replace()
  • set_magic_quotes_runtime()
  • session_register()
  • session_unregister()
  • session_is_register()
  • set_socket_blocking()
  • split()
  • spliti()
  • sql_regcase()
  • mysql_db_query()
  • mysql_escape_string()

ตัวอย่าง
erigi() become => preg_match(‘/theregex/i’) or => preg_match(‘#theregex#i’)
ereg_replace become => preg_replace(‘/theregex/’) or => preg_replace(‘#theregex#’)

function ที่ถูกตัดออกไปผมว่าน่าจะส่งผลกระทบต่อโปรแกรมหลายๆโปรแกรมครับเนื่องด้วยบาง function ค่อนข้างเป็นที่นิยมตรงส่วนนี้ก็คงต้องไล่ๆปรับกันแหละครับ เช่นพวก ereg ต่างๆและ split รวมไปถึง mysql_db_query ที่เวลาผมแกะโปรแกรมบางตัวก็มักจะเจออยู่บ่อยๆครับ

และสำหรับเรื่องคุณสมบัติจะมีการยกเลิกบางอย่าง ซึ่งคุณสมบัติที่ถูกยกเลิก คือ
- การส่งค่าแบบ reference ( Assigning the return value of new by reference is now deprecated. )
- Call-time pass-by-reference is now deprecated.

สำหรับ function Deprecated features in PHP 5.3.x สามารถอ่านเพิ่มเติมได้ที่นี่นะครับ

http://th.php.net/manual/en/migration53.deprecated.php


นอกจากจะตัด function บางตัวออกไปแล้วสำหรับบาง function ก็มีการเพิ่ม Parameters เข้ามาดังนั้นเราอาจจะจำเป็นต้องไปใส่ Parameters ให้กับ function เหล่านั้นให้ถูกต้องตามด้วยครับ

 

รายชื่อตัวอย่าง function ที่มีการเพิ่ม Parameters เข้ามา

  • clearstatcache() – Added clear_realpath_cache and filename.
  • copy() - Added a stream context parameter, context.
  • fgetcsv() – Added escape.
  • ini_get_all() – Added details.
  • nl2br() – Added is_xhtml.
  • parse_ini_file() – Added scanner_mode.
  • round() - Added mode.
  • stream_context_create() – Added params.
  • strstr() and stristr() – Added before_needle.

function ที่มีการเพิ่ม Parameters เข้ามาหรือมีการปรับเปลี่ยนสามารถดูเพิ่มเติมได้จากลิ้งค์นี้ครับ

http://th.php.net/manual/en/migration53.parameters.php


Seagull Framework
ผมขอเอ่ยถึงตัว seagull framework สักนิดนะครับ สำหรับ seagull framework ใน version เก่าๆจะมีเรียกใช้ function พวก call_user บางตัวครับ ในส่วนนี้เท่าที่หาดูมีการแจ้งออกมา และทางทีมงาน เขาก็ได้ทำการ fix bug ไปเรียบร้อยแล้ว ปัญหาจะเจอประมาณ
SectionMgr, NavigationDAO::addSection และ NavigationDAO::updateSection

 

โดยทำการปรับเปลี่นเป็น
return call_user_func_array(array($delegate, $methodName),$parameters);
สำหรับ seagull หากมีข้อผิดพลาดประการใดก็ต้องขออภัยด้วยนะครับ


และในส่วนของ php.ini ก็จะมีการยกเลิกบางอย่างออกไปครับ ตัวใหนผมอธิบายได้จะช่วยอธิบายคร่าวๆไว้ให้นะครับ

 

  • register_globals แปลว่าการเขียนรับค่าตัวแปรจะต้องเปลี่ยนไปใช้ ( $_REQUEST, $_GET, $_POST, $_SESSION, $_SERVER ) เท่านั้นครับ
  • define_syslog_variables
  • register_long_arrays
  • safe_mode
  • magic_quotes_gpc
  • magic_quotes_runtime
  • magic_quotes_sysbase

สำหรับเรื่อง Changes to INI file handling สามารถอ่านเพิ่มเติมได้ที่นี้นะครับ

http://th.php.net/manual/en/migration53.ini.php


ขอนอกเรื่องอีกนิดนึงนะครับ
พอดีผมได้เจอหลายๆเว็บเขียนบทความเกี่ยวกับ PHP 5.3 หน้าตาเนื้อหาก็คล้ายๆกัน แต่ผมชอบจุดที่อธิบายสั้นๆแต่เข้าใจได้คือ

 

# ereg, eregi, ereg_replace, eregi_replace เปลี่ยนไปใช้ตระกูล perl compatible regular expressions (preg*)
# split เปลี่ยนไปใช้ preg_split แทน
# mysql_db_query เปลี่ยนไปใช้ mysql_select_db แล้วตามด้วย mysql_query
# mysql_escape_string เปลี่ยนไปใช้ mysql_real_escape_string
# register_globals เปลี่ยนไปใช้ Built-in global variables ($_REQUEST, $_GET, $_POST, $_SESSION, $_SERVER)
# session_register, session_is_register, session_unregister เปลี่ยนไปใช้ $_SESSION

เพียงแค่จุดนี้ก็ช่วยสรุปจุดสำคัญที่เราใช้กันบ่อยๆได้มากทีเดียวครับ


จากทั้งหมดนี้ท่านสามารถอ่านเพิ่มเติมได้ที่ลิ้งค์เหล่านี้นะครับ

What has changed in PHP 5.3.x

http://th.php.net/manual/en/migration53.changes.php

Backward Incompatible Changes in PHP 5.3.x

http://th.php.net/manual/en/migration53.incompatible.php

New features in PHP 5.3.x

http://th.php.net/manual/en/migration53.new-features.php

Changes made to Windows support in PHP 5.3.x

http://th.php.net/manual/en/migration53.windows.php

Changes in SAPI modules in PHP 5.3.x

http://th.php.net/manual/en/migration53.sapi.php

Undeprecated features in PHP 5.3.x

http://th.php.net/manual/en/migration53.undeprecated.php


New Functions in PHP 5.3.x

 

  • array_replace() – Replaces elements from passed arrays into one array.
  • array_replace_recursive() – Recursively replaces elements from passed arrays into one array.
  • class_alias() – Creates an alias for a user defined class.
  • forward_static_call() – Call a user function from a method context.
  • forward_static_call_array() – Call a user function from a method context, with the arguments contained in an array.
  • gc_collect_cycles() – Forces collection of any existing garbage cycles.
  • gc_disable() – Deactivates the circular reference collector.
  • gc_enable() – Activates the circular reference collector.
  • gc_enabled() – Returns the status of the circular reference collector.
  • get_called_class() – Return the name of the class a static method is called in.
  • gethostname() – Return the current host name for the local machine.
  • header_remove() – Removes an HTTP header previously set using the header() function.
  • lcfirst() – Make a string’s first character lowercase.
  • parse_ini_string() – Parse a configuration string.
  • quoted_printable_encode() – Convert an 8 bit string to a quoted-printable string.

New Functions in PHP 5.3.x

http://th.php.net/manual/en/migration53.functions.php


New stream wrappers in PHP 5.3.x

 

http://th.php.net/manual/en/migration53.new-stream-wrappers.php

New stream filters in PHP 5.3.x

http://th.php.net/manual/en/migration53.new-stream-filters.php

New Class Constants in PHP 5.3.x

http://th.php.net/manual/en/migration53.class-constants.php

New Methods in PHP 5.3.x

http://th.php.net/manual/en/migration53.methods.php

New Extensions in PHP 5.3.x

http://th.php.net/manual/en/migration53.new-extensions.php

Removed Extensions in PHP 5.3.x

http://th.php.net/manual/en/migration53.removed-extensions.php

Other changes to extensions in PHP 5.3.x

http://th.php.net/manual/en/migration53.extensions-other.php

New Classes in PHP 5.3.x

http://th.php.net/manual/en/migration53.classes.php

New Global Constants in PHP 5.3.x

http://th.php.net/manual/en/migration53.global-constants.php

Other changes in PHP 5.3.x

http://th.php.net/manual/en/migration53.other.php

 

Credit : siammodify.com

ลบ IP BlackList ใน DA

ลบ IP BlackList ใน DA

nano /usr/local/directadmin/data/admin/ip_blacklist

หาไอพีที่ต้องการลบ แล้ว

CTRL+K

จากนั้นก็

CTRL+X

พิมพ์ y แล้วกด Enter จบ

 

Upgrade PHP 5.2 For CentOS


Upgrade PHP 5.2 For CentOS
# wget http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
# wget http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
# rpm -Uvh remi-release-5*.rpm epel-release-5*.rpm
# yum –enablerepo=remi update php
# service httpd restart

สร้าง Storage Server ง่ายๆ ด้วย FreeNAS

เดี๋ยวนี้เดินตามร้านคอมพิวเตอร์เริ่มมีอุปกรณ์ประเภท NAS (Network Attached Storage Server) ขายเป็น box สำเร็จรูป เพื่อผู้ใช้นำไปสำรองข้อมูล แชร์ไฟล์ได้หลายเครื่อง แถมบางยี่ห้อสามารถรันโปรแกรม BitTorrent เพื่อโหลดไฟล์ได้

แทนที่จะซื้อ box ใหม่ ลองหาเครื่องเก่าๆ ที่ยังพอใช้งานได้อยู่ หากขนาดพื้นที่ดิสก์เก่าไม่พอ ก็ซื้อเฉพาะฮาร์ดดิสก์เท่านั้น แล้วติดตั้งโปรแกรม FreeNAS ภายในไม่ถึง10 นาที (ไม่รวมเวลาดาวน์โหลดไฟล์ iso ขนาด 130 กว่า MB นะ) คุณก็จะได้ Storage Server ไว้ใช้ อย่างง่ายดาย คุณสมบัติ (features) เพียบ…

คำเตือน

FreeNAS จะล้าง (Format) ข้อมูลทั้งหมดในดิสก์ของเครื่อง
การทดลองรันแบบ LiveCD ค่าคอนฟิกที่สร้างทั้งหมดจะหายไป เมื่อมีการรีบู๊ตหรือปิดเครื่อง

FreeNAS เป็นโปรแกรม Open Source พัฒนาขึ้นมาบน FreeBSD รองรับการใช้งานได้หลากหลายเช่น CIFS (Samba), FTP, NFS, TFTP, AFP, RSYNC, Unison, iSCSI (initiator and target) and UPnP. สามารถคอนฟิกดิสก์เป็นแบบ RAID (0, 1, 5), ZFS, disk encryption ได้

การใช้งานผ่าน Web Interface สามารถลองใช้แบบ LiveCD หรือติดตั้งลงบนดิสก์

ในเริ่มต้น แนะนำในลองใช้แบบ LiveCD เพื่อดูคุณสมบัติต่างๆ ของโปรแกรม

เลือกดาวน์โหลดไฟล์เวอร์ชั่นล่าสุดของ Stable Releases (ล่าสุดที่เขียนคือ 0.7.2) หากเครื่องสามารถลงแบบ 64-bit ได้ แนะนำให้เลือก FreeNAS-amd64-LiveCD-0.7.2.5543.iso ถ้าไม่ได้ ก็ใช้เวอร์ชั่น 32-bit คือ FreeNAS-i386-LiveCD-0.7.2.5543.iso

ไฟล์ที่ดาวน์โหลดจะเป็นแบบ iso คือต้องนำมา burn ลง cd ก่อนแล้วนำไปใช้บู๊ตเครื่อง

ในบทความนี้จะทดลองใน VMware Server

หน้าจอบู๊ตเครื่อง

หน้าจอ Console แสดงข้อมูลคอนฟิกเบื้องต้น พร้อมใช้งาน

เมื่อบู๊ตเครื่องมาถึงขั้นตอนนี้ คุณก็มี Storage Server พร้อมใช้แล้ว หากต้องการแก้ไขคอนฟิก ก็ใส่ตัวเลขเมนู เพื่อเข้าไปแก้ไขได้ เช่นต้องการแก้ไข IP address สามารถทำได้โดยเข้าเมนู 2) Set LAN IP address

คำแนะนำ หากต้องการนำไปใช้งานจริง ต้องเลือกเมนู 9) Install/Upgrade to hard drive/flash device, etc. เพื่อเลือกติดตั้ง FreeNAS ลงบนดิสก์เลย

ดีฟอลต์ IP address คือ 192.168.1.250

เปิด browser เพื่อเริ่มใช้งาน FreeNAS

หน้าเว็บล็อกอินของ FreeNAS ใส่ค่า Username, Password เริ่มต้นคือ admin, freenas

หน้าเว็บแสดงข้อมูล System Information

หน้าเว็บการจัดการดิสก์ (Disks Management)

ไปที่เมนู Disks -> Management เพื่อแสดงข้อมูลดิสก์ที่โปรแกรม FreeNAS รู้จัก

เริ่มต้นจะไม่มีดิสก์ใดแสดงเลย ต้องกดเครื่องหมาย + ด้านขวามือเพื่อเพิ่มดิสก์ที่มีอยู่ในเครื่อง ให้ FreeNAS รู้จัก

Add Disk

หน้าเว็บการเพิ่มดิสก์

หลังจากเพิ่มดิสก์ ต้องกดปุ่ม [Apply changes] เพื่อให้คอนฟิกที่เพิ่มเข้าไปมีผล

Format Disk

ไปที่เมนู Disks -> Format เพื่อ Format Disk

Disk: เลือกดิสก์ที่จะ format
File system: เลือก “UFS (GPT and Soft Updates”
Volume Label: ใส่ชื่อ Volume

กดปุ่ม [Format disk]

หน้าเว็บแสดงการ Format Disk

หลังจาก Format เครื่องแล้ว ต้อง mount ดิสก์ขึ้นมาใช้งานด้วย

Mount Disk

ไปที่เมนู Disks -> Mount Point กดเคื่องหมาย + เพื่อเริ่มการ mount ดิสก์

เลือก Disk และใส่ค่า Mount point name แล้วกด Add

หน้าเว็บ Disks Mount Point – Add

กดปุ่ม [Apply changes] เพื่อให้คอนฟิกที่เพิ่มมีผล หน้าเว็บแสดงการ mount point

CIFS/SMB Settings

หากต้องการแชร์ไฟล์แบบ Samba เพื่อให้เครื่อง Windows อื่นๆ มองเห็น ก็สามารถทำได้ง่ายๆ โดยไปที่เมนู Services -> CIFS/SMB

ในหน้า Settings คลิ้กเลือก [x] Enable แล้วใส่ค่าคอนฟิกต่างๆ เสร็จเรียบร้อยด้านล่างกดปุ่ม [Save and Restart]

หน้าเว็บแสดงการเปิด Services CIFS/SMB

ในหน้าเว็บเดียวกันนี้ คลิ้กแท็ป [Shares] เพื่อคอนฟิกชื่อและดิสก์ที่ใช้แชร์ไฟล์

กดเครื่องหมาย + เพื่อเพิ่มการ Share

ใส่ Name, Comment เลือก Path จาก Mount Point แล้วกดปุ่ม [Add]

หลังจากแก้ไข กดปุ่ม [Apply changes] เพื่อให้คอนฟิกใหม่มีผล

ทดลองเรียก Share Drive จากเครื่อง Windows

ข้อมูลอ้างอิง

PHP แปลงตัวหนังสือปนตัวเลขให้เป็นตัวเลข

ตัวหนังสือปนตัวเลข ก็คือแบบนี้

  1. เป็นเงิน 10 บาท
  2. เงินสด 1,000

คัดลอกไปที่คลิปบอร์ด

ในกรณีเราต้องการแปลงตัวเลขเป็นตัวหนังสือให้ได้มาเฉพาะตัวเลขอย่างเดียว เราสามารถใช้ฟังก์ชั่น intval() แปลง

  1. $string = “10 บาท”;
  2. $integer = intval( $string );
  3. // ผลลัพธ์ที่ได้คือ 10

คัดลอกไปที่คลิปบอร์ด

หรือใช้ Casttype ก็ได้

  1. $string = “10 บาท”;
  2. $integer = (int)( $string );
  3. // ผลลัพธ์ที่ได้คือ 10

คัดลอกไปที่คลิปบอร์ด

แต่ถ้าเราต้องการจะแปลงตัวหนังสือปนตัวเลขให้ได้เฉพาะตัวเลข เราใช้สองวิธีดังกล่่าวมา ไม่ได้ เพราะมันจะคืนค่ากลับมาเป็น 0 เสมอ อย่าเชื่อผม ขอให้ทดสอบด้วยตัวเอง

สาเหตุที่เป็นเช่นนั้นเพราะ สองคำสั่งนั้นมันจะมองไล่ตัวอักษรไปทีละตัว ถ้าตัวแรกไม่ใช่ตัวเลขเสียแล้ว มัีนก็คืนค่าเป็น 0 มาทันที ไม่มองตัวต่อไปแล้ว

ทีนี้ทำไง?
หลักคิด

เราจะใช้ฟังก์ชั่น PHP ไล่หาตัวอักษรไปทีละตัว ดูว่ามันเป็นตัวเลขมั้ย ถ้าไม่ใช่ แทนที่มันด้วยตัวอักษรว่าง (มันก็เหมือนลบทิ้ง) ถ้ามันเป็นตัวเลข เก็บไว้ หาตัวต่อไป จนสุดข้อความ สิ่งที่ได้ออกมาก็จะมีเฉพาะตัวอักษรที่เป็นตัวเลข จากนั้นจึงใช้ฟังก์ชั่นแปลงสิ่งที่ได้ ให้เป็นตัวเลขที่แท้จริงอีกที

ดูคำสั่ง ผมขี้เกียจเขียนยาว จะใช้ Rexgular Expression เป็นตัวดำเนินการหลักคิดของเรา

  1. $input = “เงินสด 1,000″;
  2. $output  = ereg_replace(“[^[:digit:]]”,”", $input ) ;

คัดลอกไปที่คลิปบอร์ด

อธิบาย

ให้แทนที่ตัวอักษรที่ไม่ใช่ตัวเลขด้วยค่าว่าง ตัวอักษรนะท่านไม่ใช่ข้อความ อ่านให้ดี

^ มีความหมายว่าไม่ใช่

[:digit:] ตัวอักษรที่เป็นตัวเลข ก็คือ 0-9

เมื่อรวมกัน ^[:digit:] มีความหมายตรงตัวว่า ตัวอักษรที่ไม่ใช่ตัวเลข

ereg_replace ค้นหาและแทนที่ (ใช้ Regular Expression) นะ

  1. $input = “เงินสด 1,000″;
  2. $output  = ereg_replace(“[^[:digit:]]”,”", $input ) ;

คัดลอกไปที่คลิปบอร์ด

ค้นหาและแทนที่คำว่า “เงินสด 1,000″ ตัวอักษรที่ไม่ใช่ตัวเลข ด้วยค่าว่าง

ถ้าอยากเขียนเป็นฟังก์ชั่นไว้ใช้งานสะดวกๆ เขียนเป็นฟังก์ชั่นก็ได้

  1. function string_to_num( $input )
  2. {
  3. $output = 0 ;
  4. $output  = ereg_replace(“[^[:digit:]]”,”", $input ) ;
  5. return $output + 0 ;
  6. }

คัดลอกไปที่คลิปบอร์ด