PHP
PHP
macOS 12.0 Monterey: Apache Setup: Multiple PHP Versions
เดี๋ยวค่อยมาเขียนรายละเอียด
Install Apache
Location of Apache config file is /opt/homebrew/etc/httpd/httpd.conf Change www home folder
mv /opt/homebrew/var/www /opt/homebrew/var/www.bak ln -s /Users/httpdocs /opt/homebrew/var/www
brew tap shivammathur/php
เลือกมาสักเวอร์ชั่น
brew install shivammathur/php/php@5.6 brew install shivammathur/php/php@7.0 brew install shivammathur/php/php@7.1 brew install shivammathur/php/php@7.2 brew install shivammathur/php/php@7.3 brew install shivammathur/php/php@7.4 brew install shivammathur/php/php@8.0
Mac M1 : Config file อยู่ที่
/opt/homebrew/etc/php/7.0/php.ini /opt/homebrew/etc/php/7.1/php.ini /opt/homebrew/etc/php/7.2/php.ini /opt/homebrew/etc/php/7.3/php.ini /opt/homebrew/etc/php/7.4/php.ini /opt/homebrew/etc/php/8.0/php.ini
Mac Intel : Config file อยู่ที่
/usr/local/etc/php/5.6/php.ini /usr/local/etc/php/7.0/php.ini /usr/local/etc/php/7.1/php.ini /usr/local/etc/php/7.2/php.ini /usr/local/etc/php/7.3/php.ini /usr/local/etc/php/7.4/php.ini /usr/local/etc/php/8.0/php.ini
ผลลัพท์ตอนติดตั้ง [code] To enable PHP in Apache add the following to httpd.conf and restart Apache: LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so <FilesMatch .php$> SetHandler application/x-httpd-php </FilesMatch> Finally, check DirectoryIndex includes index.php DirectoryIndex index.php index.html The php.ini and php-fpm.ini file can be found in: /usr/local/etc/php/7.4/ php@7.4 is keg-only, which means it was not symlinked into /usr/local, because this is an alternate version of another formula. If you need to have php@7.4 first in your PATH, run: echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc For compilers to find php@7.4 you may need to set: export LDFLAGS="-L/usr/local/opt/php@7.4/lib" export CPPFLAGS="-I/usr/local/opt/php@7.4/include"<br /> <br /> <br /> To start shivammathur/php/php@7.4: brew services start shivammathur/php/php@7.4 Or, if you don't want/need a background service you can just run: /usr/local/opt/php@7.4/sbin/php-fpm --nodaemonize
เปลี่ยนลิงก์
brew unlink php && brew link --overwrite --force php@7.4
Apache
แก้ไขไฟล์ /etc/apache2/httpd.conf หรือ /usr/local/etc/httpd/httpd.conf file scroll to the bottom of the LoadModule entries.
LoadModule php5_module /usr/local/opt/php@5.6/lib/httpd/modules/libphp5.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.0/lib/httpd/modules/libphp7.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.1/lib/httpd/modules/libphp7.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.2/lib/httpd/modules/libphp7.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.3/lib/httpd/modules/libphp7.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so <a class="hashtag" href="/tags/LoadModule">#LoadModule</a> php_module /usr/local/opt/php@8.0/lib/httpd/modules/libphp.so
Install mariadb
brew install mariadb
Restart MariaDB
Auto start
brew services start mariadb
Manual start
mysql.server restart
Location of database is /opt/homebrew/var/mysql, If you want to change use symbolic link to new location
brew services stop mariadb cp -R /opt/homebrew/var/mysql /Users/mysql mv /opt/homebrew/var/mysql /opt/homebrew/var/mysql.bak mkdir /opt/homebrew/var/mysql ln -s /Users/mysql /opt/homebrew/var/mysql brew services start mariadb
ที่มา
Bug : isset($body['location']) ดันเป็นจริงเมื่อ $body ไม่ใช่ array
งมหาเรื่องแปลกอยู่หลายอาทิตย์ วันนี้เลยตามหาว่าเกิดอะไรขึ้นกับโปรแกรม PHP ที่เขียนบน Linux และไม่เคยทดสอบบน Windows เมื่อเอามาติดตั้งก็เลยเกิด error แปลก
ปรากฏว่า คำสั่ง isset($body['location']) ดันเป็นจริงเมื่อ $body ไม่ใช่ array ทำให้เช็คเงื่อนไขผิดพลาด
แก้ไข : ตรวจสอบด้วยว่าเป็น array หรือไม่
if ( is_array($body) && isset($body['location']) ) then ;Do something
MVC - แนวคิดเกี่ยวกับ MVC

กำลังศึกษาเรื่อง Model View Control (MVC) หลังจากที่เคยอ่านเรื่องนี้มานานเป็นปี ๆ แล้ว และได้นำมาประยุกต์ใช้นิดหน่อย แต่ยังไม่เข้าใจอย่างลึกซึ้ง เลยขอมานั่งทำความเข้าใจอย่างละเอียดอีกสักรอบ หลังจากนี้ก็จะพยายามรวบรวมเรื่องราวของ Model View Control มาเก็บไว้เรื่อย ๆ
เริ่มกันที่แนวคิดของ MVC ก่อนนะครับ
ในยุคนี้คงไม่มีทางที่เราจะหนีคำนี้ได้พ้นเพราะในการพัฒนาระบบในปัจจุบันขนาดของโครงการจะใหญ่ขึ้นเรื่อยๆ เนื่องจากความต้องการมีสูงขึ้นเรื่อยๆ ดังนั้นการจะพัฒนา software ด้วยตัวคนเดียวเป็นเรื่องยาก จึงมีการประยุกต์ใช้งาน Enterpirse Architecture Pattern อย่าง MVC กันมากขึ้นในทุกๆ platform ด้วยเหตุนี้การจะใช้งาน MVC Framework ตัวใดก็แล้วแต่ไม่ว่าจะเป็น PHP , .NET หรือ Java ล้วนแล้วแต่ต้องอาศัยแนวความคิดที่ถูกต้องจึงจะเป็นประโยชน์อย่างแท้จริงไม่เช่นนั้นนอกจากจะไม่มีประโยชน์ใดๆ ในการใช้ Framework แล้ว ยังเป็นดภาระในการแก้ไขซึ่งจะทำให้แก้ไขได้ยากกว่าปกติ ดังนั้นจึงเริ่มจากการแนะนำแนวคิดในการแบ่งแยกส่วนของ code ออกเป็น 3 ส่วนด้วยกันคือ
MVC Archtecture Pattern
Model (M) เป็นส่วนของ Business Logic และ ส่วนของ Entity ซึ่งส่วนนี้จะแตกต่างจากแนวคิดแบบ 3-tier ซึ่งจะแยกส่วนล่างสุดเป็น Data Access Layer (DAL) ซึ่งจะทำหน้าที่ติดต่อกับ Database เท่านั้น แต่ Model จะไม่ได้เป็นเพียงแครการติดต่อกับ Database เท่านั้น แต่ยังรวมเรื่องของ Business Logic ต่างด้วย เช่น การคำนวน VAT 7% หรือการคำนวนค่าต่างให้อยู่ในชั้นนี้ และถ้าจะให้ดีชั้นนี้ควรจะทำการสร้าง Service Layer ขึ้นมา ตรงนี้จะลงรายละเอียดในบทความถัดไป
View (V) เป็นส่วนของการแสดงผลอันนี้ตรงตัวไม่ต้องคิดมาก เป็นส่วนของ HTML ,CSS และ JavaScript ในการทำ Web Application แต่ถ้าเป็น Windows Application ก็จะเป็นพวก forms ต่างๆ ในการใช้งาน PHP Framework บางตัวจะพ่วงเอา Template Engine มาให้ใช้งานด้วย เช่น Symfony จะมี Twig เป็น Template Engine ซึ่งข้อดีของการใช้งาน Template Engine ก็คือจะทำการแยกส่วนของการแสดงผลกับ logic ได้ชัดเจนมากขึ้นคนที่ทำ HTML CSS และ JavaScript ไม่จำเป็นต้องเขียน PHP ได้
Controller (C) ส่วนนี้เป็นส่วนสมองของระบบจะทำหน้าที่คอยควบคุมว่าจะดึงข้อมูลจากไหน (Model ตัวไหน) แล้วก็ไปแสดงผลยังไง (View ตัวไหน) ส่วนนี้จะเป็นส่วนที่่ผิดกันเป็นประจำสำหรับผู้ที่เริ่มใช้งาน MVC Framework เพราะเป็นส่วนที่เราไม่เคยแยกส่วนนี้มาก่อน ส่วนของ Controller จะเป็น work flow หรือขั้นตอนการทำงานต่างๆ (มีเฉพาะ flow ของการทำงานเท่านั้น) จะไม่มี logic ใดๆในนี้ไม่มีการเขียน HTML ไม่มีการคำนวนค่าต่างๆ หน่าที่ของ Controller มีเพียงแค่รับค่ามาทำการ Validate แล้วส่งเข้าไปที่ Model เท่านั้น
ประโยชน์ของการใช้ MVC ก็คือการเพิ่ม maintainability หรือทำให้ระบบแก้ไขได้ง่ายขึ้นเพราะมันแยกส่วนออกจากกันอย่างชัดเจน อีกข้อนึงที่สำคัญไม่แพ้กันก็คือเราจะสามารถแยกคนทำงานตามสิ่งที่เค้าถนัด เช่น คนทำ View ไม่ต้องรู้ว่า database มีโครงสร้างยังไง คนที่ทำผั่ง model ก็ไม่ต้องมากังวลเรื่องของการแสดงผล แต่ขอให้ตกลงเรื่องของ data ที่ส่งหากันให้ดีก็พอ
สุดท้ายอาจไม่จำเป็นจะต้อง strict อยู่ในรูปแบบนี้ 100% เพราะนี่เป็นเพียงทฤษฏี แต่ยังไงก็ตามถ้าจะเขียนผิดไปจากนี้ (anti pattern) ก็สามารถทำได้แต่ต้องแน่ใจว่าการทำแบบนั้นมีเหตุผลมากพอที่จะทำ และไม่กระทบกับการแก้ไขในอนาคต
ที่มา : www.irobust.co.th
FTP chmod
เหตุเกิดจากว่า server ที่วางอยู่ใน ม.อ. ไม่อนุญาตให้ FTP จากภายนอกมหาวิทยาลัยได้ ต้องเข้าไปนั่งในมหาวิทยาลัยเท่านั้นจึงจะใช้งาน FTP ได้
แต่เว็บที่ดูแลอยู่มีปัญหาแค่ว่า folder สำหรับ upload ไฟล์นั้นได้ถูกกำหนด permission ไว้ที่ 755 ทำให้ไม่สามารถบันทึกภาพไว้ได้
นั่งคิดอยู่หลายตลบว่าจะทำยังไงดี ไม่อยากบึ่งรถไป ม.อ. ก็มาคิดได้ว่า CMS ที่เขียนไว้นั้น สามารถ run PHP ได้ และ PHP ก็มี function ftp และ ftp_chmod
ทางแก้จึงออกมาประมาณนี้
<?php $ftp_server = "my.ftp.com"; $ftp_user_name = "myftpusername"; $ftp_user_pass = "myfppassword"; $conn_id = ftp_connect($ftp_server); $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); $folder="folder/to/chmod"; if (ftp_chmod($conn_id, 0777, $folder) !== false) { echo "$folder chmoded successfully to 777\n"; } else { echo "could not chmod $folder\n"; } ftp_close($conn_id); ?>
Hash & Salt
มีโครงการที่จะปรับปรุงการเข้ารหัสผ่าน อ่านดูแล้ว นี่ Understanding Hash Functions and Keeping Passwords Safe ก็เป็นวิธีหนึ่ง ที่น่าจะโอเค
ไว้จะลองดูอีกที
ได้ข้อมูลมาจาก PHP: ระบบสมาชิก - สมัครสมาชิก
Regular Expression - ยังไง ยังไง ก็ใช้ไม่ถูกสักที
การใช้ Regular Expression ใน PHP - คำว่า Regular expressions ดูเหมือนจะเป็นคำที่น่ากลัวเอามาก ๆ สำหรับนักโปรแกรมมือใหม่ หลายคนไม่อยากรู้จักมันเลยเสียด้วยซ้ำ แต่ขอบอกว่า จริง ๆ แล้วมันไม่ยากแล้วก็มีประโยชน์มากด้วย ไม่ว่าจะเป็น JavaScript หรือ Perl ต่างก็ใช้กันทั้งนั้น จึงไม่เสียหาย ถ้าจะทำความรู้จักกับมันไว้บ้าง
Regular expression เป็นการกำหนดรูปแบบเพื่อการค้นหาข้อความหรือตัวอักษรว่า มีอยู่ในข้อความที่กำหนดหรือไม่ เช่น เราอยากรู้ว่า ข้อความที่มีคนกรอกแบบฟอร์มเข้ามาบนเว็บของเรา มีคำหยาบหรือไม่ เราก็จะใช้ Regular expression นี่แหละ เป็นตัวตรวจสอบ นอกจากจะใช้ตรวจสอบแล้ว ยังสั่งแก้ได้อีกด้วย เช่น จะแก้คำว่า ประสิทธิ์ เป็นคำว่า ประสาท ก็ทำได้ โดยไม่ต้องไปค้นหาเอง แต่สั่งให้โปรแกรมค้นหา โดยใช้ Regular expression นี่แหละ แล้วแทนที่คำคำนั้น ด้วยคำที่เราต้องการ
เห็นไหมล่ะว่า Regular expression มีประโยชน์อย่างไร
Regular expression คืออะไร?
ดูรายละเอียดจาก www.goragod.com
ขออนุญาต Penthai นำมาเผยแพร่นะครับ
PHP : How to show Adsense on web
วิธีเอาข้อมูลจาก Google Adsense มาแสดงบนหน้าเว็บของเรา
PHP : Send SMS by smsgateway.com
<?php function smsnotify($mobile_no,$msg,$sender) { $user_id = "gatewayusername"; $passwd = "gatewaypassword"; $host = "api.smsgateway.com";<br /> $port = "80";<br /> $path = "/api_sms.jsp"; $data="user_id=$user_id&passwd=$passwd&sender=$sender&mobile_no=$mobile_no&msg=$msg"; $fp=@fsockopen($host,80); if ( $fp) { fputs($fp,"POST $path HTTP/1.1\r\n"); fputs($fp,"Host: $host\r\n"); fputs($fp,"Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp,"Content-length: ".strlen($data)."\r\n"); fputs($fp,"Connection: close\r\n\r\n"); fputs($fp,$data); while(!feof($fp)) { $buffer=fgets($fp,128); } fclose($fp); } } $phonno='00000000'; $msg='This is a SMS message'; smsnotify($phonno,$msg,"SenderName"); ?>
ปล. ยังไม่ได้ทดสอบนะจ๊ะ
ที่มา www.thaihosttalk.com
Directadmin PHP path
ไม่มีอะไรมาก แค่อยากบันทึกว่า เวลาเขียน script ภาษา php แล้วต้องการ run ด้วย crontab ซึ่งจะต้องระบุ path ของ php ให้ถูกต้อง ไม่อย่างนั้นมันก็จะ run ไม่ได้
ซึ่ง path ของ php ของ Directadmin ก็คือ /usr/local/bin/php และก็แค่นั้นเอง
Application Programming Interface (API)
ในที่สุดก็จะต้องเขียน API แน่นอน แต่วันไหนกันนะ
ได้อ่านตัวอย่างจาก Application Programming Interface (API) เป็นโปรแกรมที่ THSMS ได้เตรียมช่องทางการส่งข้อความผ่าน API ไว้หลายช่องทางโดย Support format ต่างๆอาทิเช่น POST, GET, REST, SOAP, XMLRPC พร้อมทั้งได้เตรียมโค๊ดตัวอย่างให้คณสามารถ Download ไปใช้งานได้ทันที
เลยขอตัวอย่างมาเก็บไว้เพื่อศึกษาในภายหลัง ขออนุญาตเจ้าของบทความไว้ที่นี้แล้วกันนะครับ