บล็อกนี้ก็จะเป็นบล็อกที่สรุปเรื่อง Web Performance ที่ได้ไปเรียนมากับ Skooldio โดย คุณ วรัทธน์ วงศ์มณีกิจ ซึ่งเป็น Google Developers Expert

แบ่งปันความรู้เกี่ยวกับการพัฒนาเว็บ
บล็อกนี้ก็จะเป็นบล็อกที่สรุปเรื่อง Web Performance ที่ได้ไปเรียนมากับ Skooldio โดย คุณ วรัทธน์ วงศ์มณีกิจ ซึ่งเป็น Google Developers Expert
โดยปกติแล้ว WordPress ไม่ได้สร้างมารองรับการทำงานบน IIS มันจะเปิดได้แค่หน้าแรกหน้าเดียว
ดังนั้นต้องมีการ config เพิ่มเติมเกี่ยวกับการ access ของ webserver
ถ้าเป็น Apache จะอ่านไฟล์ .htaccess แต่ ฝั่ง IIS จะเป็นไฟล์ web.config แทน
ลองแก้ไข ไฟล์ web.config ใน root directory ของเว็บ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="Wordpress" patternSyntax="Wildcard"> <match url="*"/> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/> </conditions> <action type="Rewrite" url="index.php?requesturi=/{R:1}"/> </rule> </rules> </rewrite> </system.webServer> </configuration> |
ทีนี้ก็จะสามารถใช้งาน WordPress บน IIS ได้แล้ว
VPS ของผู้ให้บริการบางรายจะมีการ config ค่า open_basedir เป็นการป้องกันการ include ย้อน directory ขึ้นไป (เหตุผลด้าน Security) โดยจะดักไว้ตรง public_html
ดังนั้น เมื่อเราต้องการใช้งาน framework บางตัว (เช่น Laravel) ที่ต้องมีการ include file ที่อยู่ ในเลเวล เดียวกับ public_html จะไม่สามารถทำได้
จะแจ้ง Fatal Error เป็น Fatal error: require(): Failed opening required
วิธีการแก้ไขคือ เข้าไปแก้ที่ไฟล์
1 |
/home/{USER}/conf/web/{DOMAIN}.httpd.conf |
แก้ไขตรงค่า
1 |
php_admin_value open_basedir /home/{USER}/web/{DOMAIN}/public_html:/home/{USER}/tmp |
แก้ไขเป็น
1 |
php_admin_value open_basedir /home/{USER}/web/{DOMAIN}:/home/{USER}/tmp |
นั่นก็คือ เอา public_html ออกนั่นเอง
ปล. {USER} เป็นชื่อ user account {DOMAIN} เป็นโดเมนของเว็บที่มีปัญหา
ปล2. VPS ตัวนี้ใช้ VestaCP
ปล3. คือ SSH เข้าไปก็จะเห็นเองแหละ
จากความเดิมตอนที่แล้ว ผมได้ทำการเปลี่ยน Default ของ OSX ที่เดิมเป็น PHP 5.6 เป็น PHP 7 (7.0.15) ของ MAMP (วิธีเปลี่ยน PHP7 เป็นค่า default ใน OSX)
พอเปลี่ยนเสร็จแล้ว มันทำงานใน Command line ช้ามาก ประมาณ 5วินาที จึงจะแสดง Version ออกมาได้
ผมเลยทำการรันคำสั่ง :
1 |
time php -v |
เพื่อจับเวลาในการรันคำสั่ง php -v
ผลลัพธ์ที่ได้ :
ใช้เวลา 5.096 วินาที คำสั่ง php -v จึงจะแสดงผล ซึ่งช้ามากๆ
ลองไปค้นหาข้อมูลใน Google ดู ก็พบคนที่มีปัญหาเหมือนกันใน StackOverflow
https://stackoverflow.com/questions/29165740/cli-mamp-php-running-slowly-compared-to-os-x-php
ลองทำตามดู
เข้าไปแก้ hosts file ซึ่งอยู่ที่ /etc/hosts โดยผมใช้ Gas Mask Host file editor
จากของเดิมที่เป็น localhost เป็น mai-local.local
mai-local.local ก็เอามาจากการรันคำสั่ง hostname ใน Terminal นะครับ
เสร็จแล้วลองรันคำสั่ง time php -v อีกครั้ง
ทีนี้ก็กลับมาเร็วปี๊ดเหมือนเดิมแล้ว
พอดีว่าได้โหลด Visual studio Code มาใช้
ทีนี้โหลดพวก Extenstion ของ PHP มา VS Code มันก็แจ้งเตือนว่าต้องการ PHP7 นะ
แต่ตอนนี้เป็น PHP 5.6 (เนื่องจากว่าลง MAMP ไว้ก่อนแล้ว)
ลองไปเปลี่ยน PHP version ใน MAMP ก็ยังไม่หาย เพราะว่า มันเปลี่ยนเฉพาะใน MAMP มันไม่ได้เปลี่ยนค่า default ของ OS
ซึ่งต้องพิมพ์คำสั่งตรวจสอบ version ใน Termimal
1 |
php -v |
หมายเลข version ที่ได้จากคำสั่งนี้จะเป็น PHP ที่เป็น default ของ OS
การแก้ไข
เข้าไปที่ Terminal พิมพ์คำสั่ง
1 |
sudo nano ~/.bash_profile |
กรอกรหัสผ่านเสร็จ จะเป็นไฟล์เปล่าๆ ให้ใส่โค้ด
1 |
export PATH="/Applications/MAMP/bin/php/php7.0.15/bin:$PATH" |
กด ctrl + o แล้วกด enter เพื่อทำการบันทึก เสร็จแล้วอย่าลืมพิมพ์คำสั่ง
1 |
source ~/.bash_profile |
ที่นี้ลองพิมพ์
1 |
php -v |
ใน Terminal ดู จะได้หน้าตาประมาณนี้
1 2 3 |
PHP 7.0.15 (cli) (built: Jan 23 2017 15:06:38) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies |
ถ้า VS Code ยังแจ้งเตือนอยู่ ให้ Logout แล้ว Login ใหม่อีกครั้ง
ปล. ของผม MAMP Version 4.1.1 (492)
รวม คำสั่ง git ที่จำเป็นต้องใช้ หรือ เวลามีปัญหา
ในการเขียนโค้ด เวลาจะดูผลลัพธ์ จะต้องเปลี่ยนจากหน้าต่าง Editor ที่ใช้เขียนโค้ด มาเป็น Browser แล้วกด Refresh อีกที ทำให้เสียเวลาอยู่นิดนึง
เนื่องด้วย PHP เวอร์ชั่น 5.6 เป็นต้นมานั้น ได้ยกเลิกคำสั่ง mysql ออกไปแล้ว ทำให้ไม่สามารถใช้คำสั่ง mysql ได้ ก็เลยต้องมาปรับโค้ดใหม่กันนิดนึง เพื่อให้รองรับ mysqli
CRUD เป็นการกระทำกับฐานข้อมูล ครบทุกรูปแบบที่การเขียนโปรแกรมจำเป็นต้องกระทำกับฐานข้อมูล ก็คือ (C)เพิ่ม (R)สืบค้น (U)ปรับปรุง (D)ลบ โดยจับคู่กับคำสั่ง SQL ได้ตามแบบนี้