เทคนิค การเขียน PHP

เทคนิคการเขียน PHP

ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
php 5.3.9 ได้เพิ่ม ค่าการตั้งค่า จำนวนตัวแปล หรือ จำนวน Input object ที่จะส่งค่าจาก Form ของเรามาให้ php ทำงาน
โดยที่ php.ini ใน php 5.3.9 นั้น ได้เพิ่ม max_input_vars เข้ามา โดยค่า Default ของมันจะตั้งไว้่ที่ 1000 หมายความว่า ถ้า Web hosting ไหนที่ใช้ตามค่ามาตรฐาน Form ที่เราสร้างไม่สามารถ กำหนด ตัวแปล หรือ input object ได้เกิน 1,000 ค่าเท่านั้น ไม่ว่าจะส่งแบบ POST หรือ แบบ GET รวมทั้ง COOKIES ด้วย
เรามาทำให้ PHP รับค่าจากฟอร์มใหญ่ๆ ได้มาจาก 1000 ค่ากันครับ

วิธีทำได้โดย แก้ไข
php.ini ในเครื่อง Server

เพิ่ม
max_input_vars = xxx

ลงไป เมื่อ xxx คือตัวเลขกำหนดค่าสูงสุดที่จะกำหนด input object ลงไปใน form ได้
ตัวอย่าง ผมตั้งไว้ที่ 4000 ให้กำหนดใน php.ini ดังนี้

max_input_vars = 4000
เสร็จแล้ว save และ restart apache เท่านี้ เครื่อง Server เราก็พร้อมสำหรับ ฟอร์มใหญ่ๆ แล้วครับ

ปล. สำหรับการใช้งานจริงบน Hosting ที่เค้าไม่อนุญาตให้เราแก้ไข ไฟล์ php.ini ได้เองนั้น เรากำหนดค่า max_input_vars ได้ด้วย .htaccess
ด้วยกำหนดค่าดังนี้
php_value max_input_vars 6000
เท่านี้เว็บเราก็สามารถสร้างฟอร์ม ขนาดใหญ่ๆ ได้แล้ว

ปล. ใส่ input object มากๆ อย่าลืมต้องคำนึงถึง post_max_size ด้วยนะครับ

ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน

สร้างไฟล์ xml แบบมีมาตรฐานด้วย DOMDocument  (DOM ย่อมาจาก Document Object Model)
การสร้างไฟล์ XML เพื่อใช้สำหรับแปลกเปลี่ยนข้อมูล กันนั้น สามารถทำได้หลายแบบ เช่น การเตรียมข้อมูลเป็น tag xml เก็บไว้เป็น string ชุดหนึ่ง แล้ว เขียนข้อมูลลงไฟล์ ด้วยฟังก์ชั่น จัดการการต่างๆ เช่น fwrite(), file_put_contents() ซึ่งผลที่ได้คือ เราจะมีไฟล์ ที่มีรูปแบบเป็น xml ตามที่เรากำหนดขึ้นมาเองซึ่งทำแบบนี้ก็ใช้งานได้ แต่ก็ยังมีข้อจำกัดหลายอย่าง และมันไม่ยืดหยุ่นและมีมาตรฐานเท่ากับการใช้ Class ที่ php เตรียมไว้ให้โดยเฉพาะ เช่น DOMDocument
ข้อดีของ การใช้ 
DOMDocument ในการสร้างไฟล์ คือ

ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน

แปลง Output Encoding แก้ปัญหาภาษาไทยอ่านไม่ออก ด้วย ob_iconv_handler

 

     การแก้ปัญหา ภาษาไทย อ่านไม่ออกในหน้าเว็บ เนื่องจากปัญหา Encoding (เอนโค้ดดิ้ง) ไม่กันของข้อมูลที่ php ส่ง Output ออกไปให้ Browser กับที่ที่กำหนด charset ของ html ไม่ตรงกับ php นอกจาก เราสามารถใช้ ฟังก์ชั่น icov แปลง UTF-8 เป็น TIS-620 หรือ Convert charset TIS-620 to UTF-8 แล้ว ยังสามารถแปลงข้อความเป็นช่วงๆ หรือ block ๆ ได้ด้วย ob_iconv_handler()
ฟังก์ชั่น ob_iconv_handler ใช้คู่กับ ob_start() และ iconv_set_encoding()

ตัวอย่าง โค้ด เป็นการ นำไฟล์ SSI.php ของ SMF เข้ามาในหน้าเว็บเพจ ที่สร้างขึ้นเอง
ปัญหา คือ SMF เวอร์ชั่น 1.x Encoding ที่กำหนดไว้ เป็น TIS-620 แต่ถ้าเราทำหน้าเว็บเพจเป็น UTF-8 ก็จะเกิดปัญหา ข้อความที่มาจาก ฟังก์ชั่น SSI ของ SMF อ่านไม่ออก
ตัวอย่างโค้ด เดิม HTML5 ผสม php
 <?php
require_once('../SSI.php');
?>
<!doctype html>
<html>
<head>
<meta charset="UFT-8">
<title>ทดสอบแปลงข้อความ ด้วย ob_iconv_handler</title>
</head>
<body>
<table width="80%" border="1">
  <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><?php ssi_menubar(); ?></td>
  </tr>
</table>
</body>
</html>
ผลที่ได้


??????? ????????? ??????????? ???????????

เราต้องใช้ ob_iconv_handler เข้ามาช่วย โดยแทน ที่

ssi_menubar();

ด้วย
    iconv_set_encoding("internal_encoding", "TIS-620");
    iconv_set_encoding("output_encoding", "UTF-8");
    ob_start("ob_iconv_handler");
    ssi_menubar();
    ob_end_flush();
ผล

หน้าแรก ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก


จากโค้ดตัวอย่าง ใช้ ob_start เรียกให้ ob_iconv_handler ทำงานแล้ว แปลง encoding ด้วย iconv_set_encoding ต้นทางเป็น TIS-620 ปลายทางเป็น UTF-8
เท่านี้เว็บเราก็สามารถแสดงผลภาษาไทยแบบ UTF-8 ได้แล้ว ครับ
สามารถนำไปใช้กับการแปลง encoding ได้ทุกๆ ภาษาครับ

ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
สรุปแนวทางในการเขียนโปรแกรม เพื่อส่งเมล การส่งเมล ออกจากโปแกรมเป็นเรื่องจำเป็นและมีการใช้งานกันมา สำหรับ Web application ระบบที่มีการส่งเมล ออกจากโปรแกรม เช่น ระบบสมัครสมาชิก ,ระบบแจ้งเมื่อลืมรหัสผ่าน, โปรแกรม ส่งข่าวสารให้สมาชิก หรือ การแจ้งเตือนต่างๆ เป็นสิ่งจำเป็นที่ต้องใช้เมลเซิฟเวอร์ แต่ปัญหาของ Programmer คือในขั้นตอนการพัฒนา เป็นเรื่องลำบากที่จะ test ส่งเมลเราต้องติดตั้ง Mail Server ก่อน หรือ อาจใช้ SMTP ของ ข้างนอก เช่น SMTP ของเว็บเอง หรือ SMTP ของ Gmail แต่นั่นไม่ใช่ทางแก้ปัญหา เพราะเราไม่ควรเอาเมลที่มีการใช้งานจริงๆ มา Test โปรแกรมที่เราสร้างขึ้นมา
มาดูทางออกกัน ถ้าเราจำลองเครื่องด้วย XAMPP จะมี Mail Server มาให้ แล้วคือ Mercury Mail Server ดูวิธีตั้งค่าได้ตามลิงค์ ทำให้เราเพิ่ม ทางเลือกในการทดสอบการส่งเมลได้

ให้เรตสมาชิก: 1 / 5

ดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
ใช้งาน Webservice ด้วย php SoapClient
ตัวอย่างสร้าง Webservice Server ด้วย

require_once('nusoap.php');
$server = new soap_server;
$server->configureWSDL('doSetsimetingwsdl', $url_path);
$server->register("doSetsimeting", array(    'var' => 'xsd:string', ) );
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

function doSetsimeting($var)
{
  return 'mindphp.com-->' . $var;
}

การเรียกใช้งาน โดยใช้ SoapClient
ก่อนใช้งานต้องสำรวจก่อนว่า Webserver ของเรา เปิดใช้งาน โดยดู phpinfo() ถ้าเจอ

soap

Soap Client enabled
Soap Server enabled

ก็แสดงว่า Webserver เราพร้อมสำหรับ ใช้งาน SoapClient แล้ว
ตัวอย่างโค้ดเรียกใช้ doSetsimeting ของ Webservice server ด้วย SoapClient
$ws_client = @new SoapClient($ws_server.'?wsdl', array('soap_version' => SOAP_1_2));
$result = $ws_client->doSetsimeting('ข้อความทดสอบ');
echo $result;
ผลที่ได้ mindphp.com--> ข้อความทดสอบ

นอกจากนี้ SoapClient ยังสนับสนุน basic http authentication  โดยระบุ parameter
'login'          => "some_name",
'password'       => "some_password"

จะเห็นว่าแค่นี้ก็ใช้งาน Webservice ได้แล้ว


SOAP

ให้เรตสมาชิก: 1 / 5

ดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
เช็คพื้นที่ว่าง และ OS ของ server โดยใช้ Function ของ php ไม่ต้องรันคำสั่งระบบ เพื่อความปลอยภัยของ Server
<?php
$dir = @getcwd();
echo " ";
$OS = @PHP_OS;
 echo "OSTYPE:$OS ";
$free = disk_free_space($dir);

if ($free === FALSE) {
   $free = 0;
}

if ($free < 0) {
  $free = 0;
}
 echo "Free:".view_size($free)." ";

function view_size($size)
{
if (!is_numeric($size)) {
   return FALSE;
} else {
if ($size >= 1073741824) {
   $size = round($size/1073741824*100)/100 ." GB";
} elseif ($size >= 1048576) {
   $size = round($size/1048576*100)/100 ." MB";
} elseif ($size >= 1024) {
   $size = round($size/1024*100)/100 ." KB";
} else {
   $size = $size . " B";
}

return $size;
}
}
?>
// ผลที่ได้ ขึ้นอยู่กับเครื่องของท่าน

ไม่อธิบายโค้ด บรรทัดต่อบรรทัด นะครับลองนำไปใช้กันได้ มันจะบอกได้ว่า server มีพื้นที่ว่าให้เราใช้ อีกเท่าไร

ให้เรตสมาชิก: 2 / 5

ดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
เขียนโค้ด php ลงใน bat ไฟล์ เพื่อเรียกให้ php ทำงานโดยไม่ต้อง พึ่ง browser หรือ ไม่ต้องเรียกผ่าน command ชี้ path ไปหา php.exe เพื่อเรียกรันไฟล์กัน

สิ่งที่ต้องเตรียมคือ
1. เครื่องเราต้อง ลง php ไว้ก่อน นะครับ
2. เครื่องมือเขียนโค้ด โปรแกรมอะไรก็ได้ เช่น EditPlus
3. ลงมือเขียน ตัวอย่างอย่างง่าย
เขียน .bat เพื่อเรียกให้ php ทำงานแสดงผล คำว่า Mindphp
โค้ดใน
@PHP -r print(mindphp);
4. save เป็นชื่อ mindphp.bat
เท่านี้เราก็จะได้ .bat เมื่อ double click php ก็จะทำงานประมวลผล ส่งคำว่า mindphp เป็น output ออกมาครับ

หรือ ถ้าเราต้องการส่ง parameter ให้ php รับไปใช้ก็ ได้เช่น
ต้องการ ให้ ตัวเลขที่เราใส่ เข้าไป คูณด้วย 12 แสดงผล ออกมา โค้ดใน .bat ตามนี้
@PHP -r print(12*%1);เรียกใช้โดย
> mindphp.bat 5
ผลที่ได้คือ 60
หรือ เข้ารหัา md5
@PHP -r print(md5(%1));
> mindphp.bat 5
ผลที่ได้
e4da3b7fbbce2345d7772b0674a318d5

ให้เรตสมาชิก: 3 / 5

ดาวใช้งานดาวใช้งานดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
เมื่อฐานข้อมูลมีการเปลี่ยนแปลง php มีการเปลี่ยนแปลงก็ต้องมีตัวแปลงเข้ามาเกี่ยวข้อง
Mysql ตั้งแต่เวอร์ชั่น 4.1 เป็นต้นไปเริ่มมีการเก็บข้อมูลจำพวก text, varchar เป็น utf กัน แต่ถ้าหน้าเว็บเราใช้เป็น tis-620 ปัญหามันถึงเกิด และเกิดมีบทความนี้ขึ้นมา มาดูการ แปลง UTF-8 เป็น TIS-620 หรือ Convert charset? TIS-620 to UTF-8 กัน

เริ่มแรกเช็ค php ของเราก่อนว่ามีความสามารถหรือเปล่า โดยดูที่

iconv

iconv support enabled
iconv implementation "libiconv"
iconv library version 1.11
ถ้าได้ข้อมูลประมาณนี้ก็แสดงว่าเราสามารถใช้ Function iconv() ในการแปลงข้อความของเราแล้วครับ
รูปแบบการใช้งาน
ตัวอย่างต้องการแปลง utf-8 เป็น tis-620

echo iconv( 'TIS-620', 'UTF-8', "สวัสดีครับ Mindphp.com");

หรือจะแปลง tis-620 เป็น utf-8 ก็ใช้

echo iconv('UTF-8, 'TIS-620', "สวัสดีครับ Mindphp.com");

จะเห็นว่าไม่ยากเลยใช่ไหมครับ แต่ถ้าข้อความของเรามากๆ ก็จะทำให้ Server เราทำงานนานขึ้น ถ้าฐานข้อมูลให้ Mysql แนะนำให้ตอนที่เราติดต่อฐานข้อมูลก็ set name ตามที่ต้องการเข้าไปเลยจะดีกว่า ครับ เช่น
ต้องการใช้ utf-8
ตอน Connect ฐานข้อมูลเสร็จให้ query
SET NAMES utf8ก่อนจะสั่ง query คำสั่ง sql อื่นๆ

ให้เรตสมาชิก: 1 / 5

ดาวใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งานดาวไม่ได้ใช้งาน
การใช้ php ติดต่อกับ dbf สำหรับท่านที่ไม่ทราบว่า .DBF คืออะไร
.dbf (data base file) เป็นไฟลฐานข้อมูล ซึ่งสร้างขึ้นมาจากโปรแกรมฐานข้อมูลบางโปรแกรม เช่น Foxpro? , Dbase

สำหรับจะเริ่มเขียน php ติดต่อ กับ dbf นั้นก่อนอื่นเราก็ต้องมาเตรียม php ของเราให้รองรับการติดต่อกับ dbf ก่อน
โดย เอาเครื่องหมาย ; หน้า extension=php_dbase.dll ออก แล้ว Restart Webserver 1 ครั้ง
ลอง phpinfo() ดูถ้าเจอ

Additional Modules

Module Name
dbase
ขึ้นมาก็แสดงว่าใช้ได้แล้ว ครับ
php มีดีื function เกี่ยวกัีบ Dbase ดังนี้
  • dbase_add_record เพิ่มข้อมูลเข้าฐานข้อมูล
  • dbase_close ปิดฐานข้อมูล
  • dbase_create สร้างฐานข้อมูล
  • dbase_delete_record ลบแถวข้่อมูลออกจากฐานข้อมูล
  • dbase_get_header_info อ่านข้อมูลรายละเอียดของฐานข้อมูล
  • dbase_get_record_with_names อ่านแถวข้อมูลจากฐานข้อมูล ออกมาเป็น array เป็นชื่อคีย์
  • dbase_get_record อ่านแถวข้อมูลจากฐานข้อมูล ออกมาเป็น array เป็นชื่ออินเดก
  • dbase_numfields อ่านจำนวน field ของไฟล์ฐานข้อมูล
  • dbase_numrecords อ่านจำนวนแถวข้อมูลทั้งหมดในฐานข้อมูล
  • dbase_open เปิดฐานข้อมูล
  • dbase_pack เพคฐานข้อมูล
  • dbase_replace_record แทนที่แถวของฐานข้อมูล

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
MOD_MTB_NEWS_RECENT
เจอปัญหา cannot write to log file pg_upgrade_internal.log ตอนอัพเกรด postgresql
โดย mindphp พฤ 27 ก.ค. 2017 7:21 pm บอร์ด Linux - Web Server
1
5
พฤ 27 ก.ค. 2017 7:21 pm โดย mindphp
สถาบันเทคโนโลยีไทย-ญี่ปุ่น เปิดรับสมัครนักศึกษาใหม่ ป.โท ภาคเรียนที่ 2 ประจำปีการศึกษา 2560 วันนี้ – 4 ต.ค.60
โดย gradtni พฤ 27 ก.ค. 2017 5:06 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
14
พฤ 27 ก.ค. 2017 5:06 pm โดย gradtni
สอบถามปัญหาการเรียกใช้ css ใน phpbb ค่ะ
โดย Ik Kat พฤ 27 ก.ค. 2017 1:48 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
4
22
พฤ 27 ก.ค. 2017 1:48 pm โดย thatsawan
สอบถามเรื่อง json กับ php ครับ
โดย pookpix พฤ 27 ก.ค. 2017 8:55 am บอร์ด Programming - PHP
1
9
พฤ 27 ก.ค. 2017 8:55 am โดย mindphp
สินค้าไม่ขึ้นตามที่ต้องการ
โดย บุคคลทั่วไป พ 26 ก.ค. 2017 7:52 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
1
16
พ 26 ก.ค. 2017 7:52 pm โดย บุคคลทั่วไป
Visibility การกำหนดสิทธิ์ในการเข้าถึงตัวแปร
โดย Ik Kat พ 26 ก.ค. 2017 4:14 pm บอร์ด PHP Knowledge
0
15
พ 26 ก.ค. 2017 4:14 pm โดย Ik Kat
วิธีการสร้าง Function ใช้เอง
โดย Ik Kat พ 26 ก.ค. 2017 3:44 pm บอร์ด PHP Knowledge
0
17
พ 26 ก.ค. 2017 3:44 pm โดย Ik Kat
วิธีการเรียกใช้งาน Class และ Method
โดย Ik Kat พ 26 ก.ค. 2017 3:07 pm บอร์ด PHP Knowledge
0
7
พ 26 ก.ค. 2017 3:07 pm โดย Ik Kat
ไม่สามารถตั้งรอบระยเวลาบัญชีของโปรแกรมบัญชีสรรพากร
โดย บุคคลทั่วไป พ 26 ก.ค. 2017 2:58 pm บอร์ด ถาม - ตอบ ธุรกิจ กฏหมาย ภาษี บัญชี
0
6
พ 26 ก.ค. 2017 2:58 pm โดย บุคคลทั่วไป
วิธีการใช้งาน Array Function เบื้องต้น
โดย Ik Kat พ 26 ก.ค. 2017 2:39 pm บอร์ด PHP Knowledge
0
11
พ 26 ก.ค. 2017 2:39 pm โดย Ik Kat
วิธีการใช้งาน Date Time Function เบื้องต้น
โดย Ik Kat พ 26 ก.ค. 2017 2:11 pm บอร์ด PHP Knowledge
0
10
พ 26 ก.ค. 2017 2:11 pm โดย Ik Kat
วิธีการใช้งาน Math Function เบื้องต้น
โดย Ik Kat พ 26 ก.ค. 2017 1:33 pm บอร์ด PHP Knowledge
0
12
พ 26 ก.ค. 2017 1:33 pm โดย Ik Kat
วิธีการใช้งาน String Function เบื้องต้น
โดย Ik Kat พ 26 ก.ค. 2017 1:10 pm บอร์ด PHP Knowledge
0
9
พ 26 ก.ค. 2017 1:10 pm โดย Ik Kat
ความหมายของฟังก์ชั่น PHP ที่ควรรู้จัก
โดย Ik Kat พ 26 ก.ค. 2017 11:42 am บอร์ด PHP Knowledge
0
15
พ 26 ก.ค. 2017 11:42 am โดย Ik Kat
การ Export รายงานสรุปยอดซื้อ ในโปรแกรมบัญชี Express
โดย pleng พ 26 ก.ค. 2017 10:51 am บอร์ด Accounting software & ERP โปรแกรมบัญชี ระบบอีอาร์พี
0
10
พ 26 ก.ค. 2017 10:51 am โดย pleng
Joomla ออกเวอร์ชั่น 3.7.4 Fix Bug เรื่องความปลอดภัย 2 จุดใหญ่ และ Error ในเวอร์ชั่นก่อนหน้า
โดย mindphp พ 26 ก.ค. 2017 6:51 am บอร์ด PHP News
0
15
พ 26 ก.ค. 2017 6:51 am โดย mindphp
ผมใช้ Odoo9 ผมทำการ Restor มันนานมั้งใช้เวลาเป็นวันเลยครับ
โดย nuattawoot อ 25 ก.ค. 2017 7:58 pm บอร์ด Odoo
2
8
อ 25 ก.ค. 2017 8:23 pm โดย mindphp
ทำไมฉันเข้าเฟสบุกของฉันต้องมีคำว่าเฟสม่ต
โดย คูกูหาที่เกีดบ่อได้ ต้องทำใจรอเนื้อคู่ อ 25 ก.ค. 2017 7:40 pm บอร์ด พูดคุยเรื่องทั่วไป จับฉ่าย
0
17
อ 25 ก.ค. 2017 7:40 pm โดย คูกูหาที่เกีดบ่อได้ ต้องทำใจรอเนื้อคู่
รบกวนสอบถามปัญหา SSL กับ woocommerce theme หน่อยครับ
โดย permchai อ 25 ก.ค. 2017 6:55 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
3
16
อ 25 ก.ค. 2017 6:55 pm โดย mindphp
รบกวนสอบถามเกี่ยวกับ SSL กับ woocommerce ครับ
โดย permchai อ 25 ก.ค. 2017 6:51 pm บอร์ด ปัญหาการใช้ phpBB3, SMF, Joomla, Wordpress, CMS CRM
0
11
อ 25 ก.ค. 2017 6:51 pm โดย permchai