Showing posts with label php. Show all posts

ส่ง Notification ผ่าน Line Notify ด้วย PHP

วันนี้จะมาแนะนำการส่ง Notification ผ่าน Line Notify ด้วยภาษา PHP กันครับ

โดย Line Notify นั้นมีความสามารถดังนี้
- ส่ง Notification มายังตัวเราเอง
- ส่ง Notification ไปยัง Line Group ที่เราอยู่ (เราต้องเพิ่ม Line Notify เข้ามาใน Line Group นั้นด้วย)
- ส่ง ข้อความ Text, รูปภาพ และ Sticker ได้

Add Line Notify เป็นเพื่อนเราก่อน

ก่อนอื่นเราต้องแอด Line Notify มาเป็นเพื่อนเราก่อน โดยค้นหาคำว่า Line Notify แล้วแอดเป็นเพื่อนดังภาพ



สร้าง Token สำหรับการ Notify

- ให้เรา Login เข้าในเวป https://notify-bot.line.me

- เมื่อ Login เสร็จเรียบร้อย ให้เข้า https://notify-bot.line.me/my/

- เลื่อนลงมาด้านล่างคลิกที่ Generate Token

คลิก Generate token

- ให้เราตั้งชื่อ Notify  (ชื่อนี้จะไปแสดงตอนส่งข้อความ)

เลือกตัวเราเองหรือ Line Group ที่ต้องการ

1-on-1 chat with LINE Notify คือจะส่งข้อความมาหาตัวเราเอง

นอกนั้นจะเป็น List ของ Line Group ที่เราอยู่ หากต้องการให้ส่งเข้า Line Group เราต้อง Invite Line Notify เข้าไปใน Line Group นั้นด้วย

- คลิก Generate token เราก็จะได้ Token เอาไว้ในการส่ง Notify ให้เราเซฟไว้ให้ดี เพราะเราจะเห็น Token อันนี้เพียงครั้งเดียว

Token จะแสดงใน Popup นี้เพียงครั้งเดียวเท่านั้น

ส่ง Notification ด้วย PHP

ในที่นี้เราจะใช้ PHP ในการส่ง Notification กันนะครับ หากต้องการส่งด้วยภาษาอื่นสามารถดู API ได้ที่เอกสารนี้ https://notify-bot.line.me/doc/en/

โดยผมได้สร้าง PHP Library ง่ายๆ สำหรับที่ใช้ในการส่ง Line Notify ไว้ที่ https://github.com/kittinan/php-line-notify โดยมี Requirement ดังนี้

 - PHP 5.5+

เริ่มกันเลย

- โหลด Library ผ่าน composer

composer require kittinan/php-line-notify
- ทดสอบส่ง Text Message ตาม Code ด้านล่าง


- ข้อความก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา



- ทดลองส่งรูปภาพ ตาม Code ด้านล่าง


- รูปภาพก็จะถูกส่งไปยังตัวเราหรือ Line Group ที่เรา Generate Token มา


จบแล้วค้าบบ

ปล. ไว้มีเวลาจะอัพเดท Library ให้สามารถส่ง Sticker ได้นะครับ
ปล. API Line Notify มี Rate Limit อยู่นะครับ โดย Rate Limit จะอยู่ที่ 1,000 ต่อชั่วโมง

วิธี Compile PHP จาก Source ด้วย Ubuntu 14.04

วิธี Compile PHP จาก Source code (https://github.com/php/php-src) ด้วย  Ubuntu 14.04

Download code PHP


git clone https://github.com/php/php-src.git

Install dependency package ที่ใช้ในการ Compile

ติดตั้ง header file ที่ใช้ในการ Compile ด้วยคำสั่ง

apt-get build-dep php5 php5-cgi php5-cli php5-fpm php5-curl php5-gd php5-gmp php5-json php5-mysql php5-pspell php5-recode php5-mcrypt php5-memcached php5-imagick 
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h 

Compile PHP


ไปที่ folder sourcecode  ที่เราโหลดมาแล้วสั่งดังนี้


รอสักครู่เพื่อทำการ compile sourcecode  เมื่อเรา  compile และติดตั้งไปยัง  path ที่เรากำหนด (--prefix=$HOME/php/usr) เรียบร้อยแล้ว ก็มาลองรันตัว php command line กันดู

ให้ไปที่

cd ~/php/usr/bin/
./php -v

ก็จะได้ PHP ตัวล่าสุดมาแล้วครับ



เป็นอันเสร็จสิ้นการ Compile PHP เบื้องต้นครับผม

Ref:
https://wiki.php.net/phpng

ทดสอบ PHP 7 Alpha 1

PHP ได้ปล่อย PHP 7 Alpha 1 ออกมา https://github.com/php/php-src/blob/php-7.0.0alpha1/NEWS เลยลองทดสอบดูครับ

โดยผมได้ใช้ script นี้ในการทดสอบ

https://gist.github.com/kittinan/3173c58b32b8e7739b11


ผลการทดสอบดังนี้

PHP 5.5.9



PHP 7 DEV



PHP 7 Alpha 1



จะเห็นได้ว่า PHP 7 Alpha 1 แรงขึ้นกว่า PHP 7 Dev อีก

สุดท้ายก็ขอให้ PHP 7  ตัวจริงที่จะออกปลายปีแรงกว่านี้อีกนะค้าบบบบ

Happy Birthday PHP!!!


Happy Birthday to PHP celebrate for 20 years old



วิธีการเชื่อมต่อ Github กับ Scrutinizer-CI

ต่อจากบทความ วิธีการเชื่อมต่อ Github กับ Travis-CI บทความนี้ก็จะมาเล่าเกี่ยวกับวิธีการเชื่อมต่อ Github กับ Scrutinizer-CI เพื่อที่ Build & Test และจะได้มี  Badge สำหรับ Code Coverage กับ  Code Quality สวยๆมาแปะครับ

1. เข้าไปที่ Website https://scrutinizer-ci.com แล้วทำการ Login ด้วย Github

2. เมื่อ Login เรียบร้อยแล้วให้สร้าง Repository https://scrutinizer-ci.com/g/new

3. ใส่ URL Github Project ของเราที่ต้องการใช้งาน (ในที่นี่ใช้ Project นี้ https://github.com/kittinan/php-http) ดังภาพ



4. สร้างไฟล์สำหรับ Build Configuration เจ้า Scrutinizer-CI โดยใช้ชื่อว่า .scrutinizer.yml ที่ root path ของ Project และใส่ code ดังนี้ https://gist.github.com/kittinan/6baf4dd0961e18dc7812


สามารถดูรายละเอียดเพิ่มเติมสำหรับ Build Configuration ได้ที่ https://scrutinizer-ci.com/docs/configuration/build

5. แก้ไขไฟล์ .travis.yml เพื่อให้ Travis-CI อัพโหลด Code Coverage ไปที่  Scrutinizer-CI ดังนี้
https://gist.github.com/kittinan/124d539cd6fbf7c5e8d5



5. Push file .scrutinizer.yml และ .travis.yml  ขึ้น Github

6. สั่ง Run your first inspection ที่ Scrutinizer-CI แล้วรอสักพักใหญ่


7. เมื่อ  Scrutinizer-CI ประมวลผลเสร็จเรียบร้อยก็จะพบกับ Code Quality และ Code Coverage  ดังภาพ



8. เราก็สามารถนำ Badge Code Quality และ Code Coverage เท่ๆมาแปะที่  Github Project ของเราได้แล้วครับ https://github.com/kittinan/php-http


วิธีการติดตั้ง Nginx + HHVM บน Ubuntu 14.04

1. ติดตั้ง Nginx

sudo apt-get install nginx


2. ติดตั้ง HHVM สำหรับ Linux distro อื่นๆ ดูได้ที่ https://github.com/facebook/hhvm/wiki/Prebuilt%20Packages%20for%20HHVM

ในบทความนี้ใช้ Ubuntu 14.04 ครับ

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
sudo add-apt-repository 'deb http://dl.hhvm.com/ubuntu trusty main'
sudo apt-get update
sudo apt-get install hhvm

3. เมื่อติดตั้งเสร็จเรียบร้อย HHVM จะขึ้นข้อความแนะนำวิธีการติดตั้ง fastcgi เพื่อให้ Apache  หรือ Nginx เรียกใช้งานได้ ดังภาพ



4. Config ให้ HHVM เปิดใช้งานผ่านช่องทาง fastcgi โดยรัน Shell Script

/usr/share/hhvm/install_fastcgi.sh



5. restart HHVM daemon

sudo /etc/init.d/hhvm restart

6. Config Nginx  ให้เรียกใช้งาน HHVM ผ่านทาง fastcgi
โดยเริ่มจากการสร้าง Virtual host ใน Nginx ให้ point ไปยัง path ที่ต้องการ โดยในตัวอย่างจะสร้าง Virtual host ที่ชื่อว่า hhvm.localdomain ให้ไปชี้ไปยัง /home/null/code/hhvm มาเริ่มกันเลย

6.1 โดยเริ่มจากการแก้ไข้ไฟล์ /etc/hosts ให้ domain hhvm.localdomain ชี้มาที่เครื่องเราเองดังภาพ

sudo nano /etc/hosts

เพิ่ม 127.0.0.1  hhvm.localdomain เข้าไป



6.2 สร้าง Config file virtual host ให้กับ Nginx โดย save file ไว้ที่ /etc/nginx/sites-available/hhvm.localdomain

config สำหรับ virutal host ตาม link นี้ครับ https://gist.github.com/kittinan/87f410004df45b6d0573

ตรง root path ก็แก้ให้ถูกต้องตามเครื่องใครเครื่องมันนะครับ

เสร็จแล้วสร้าง Sym link เพื่อเปิดการใช้งาน virtual host ที่ชื่อ hhvm.localdomain

sudo ln -s /etc/nginx/sites-available/hhvm.localdomain /etc/nginx/sites-enabled/hhvm.localdomain

7. Restart Nginx

sudo /etc/init.d/nginx restart

8. สร้างไฟล์ index.php ไว้ที่ root path ในที่นี่จะสร้างไฟล์ไว้ที่ /home/null/code/hhvm/index.php เพื่อทดสอบการ config ว่าใช้งานได้


<?php
echo "Hello HHVM";
echo "<br />";
phpinfo();

เมื่อเสร็จแล้วลองเรียกผ่าน http://hhvm.localdomain/ ก็จะได้ output ดังภาพ




หากต้องการ phpinfo() แบบละเอียด hhvm มันไม่ได้จัดมาไว้ให้ครับต้องใช้ script ตัวนี้
https://gist.github.com/ck-on/67ca91f0310a695ceb65 เมื่อนำมารันก็จะได้ดังภาพ






PHP-FIG คืออะไร

สำหรับบทความนี้เป็นการแปลมาจากเวป http://www.php-fig.org/ แบบคร่าวๆ และมั่วๆนะครับ ผิดพลาดประการใดก็ต้องขออภัยไว้ก่อนนะครับ



PHP-FIG นั้นย่อมาจาก PHP Framework Interop Group ซึ่งถ้าแปลเป็นภาษาไทยก็หมายถึง กลุ่มของ PHP Framework ที่ทำงานร่วมกัน โดยมี PHP Framework ดังๆเข้าร่วมกันเต็ม ซึ่งแนวคิดของกลุ่มจะเป็นการนำเสนอแนวทางที่จะทำงานร่วมกัน และทางกลุ่มก็ได้กำหนด Code Standard ขึ้นมาเรียกว่า PSR (PHP Standard Recommendation) โดยมี PSR ทั้งหมดดังนี้

PSR-0 Autoloading Standard (เลิกใช้เมื่อวันที่ 2014-10-21 โดยไปใช้ PSR-4 แทน)

PSR-1 Basic Coding Standard

PSR-2 Coding Style Guide

PSR-3 Logger Interface

PSR-4 Improved Autoloading


โดยผมจะไม่พูดถึง PSR-0 แล้วนะครับ มาเริ่มกันที่ PSR-1 เลยล่ะกัน


1. PSR-1 Basic Coding Standard

1.1 ต้องใช้ tag <?php หรือ <?= เท่านั้น

1.2 ไฟล์ต้องใช้ encoding UTF-8 without BOM

1.3 ชื่อของ Class, function, constant ต้องสื่อให้ถูกต้องกับสิ่งที่ทำ และต้องไม่มี  code ที่ก่อให้เกิด side effect ได้

1.4 Namespaces และ Class ต้องปฎิบัติตาม PSR-4

1.5 Class ต้องประกาศด้วย StudlyCaps

1.6 Class constant ต้องประกาศเป็นตัวอักษรใหญ่เท่านั้น

1.7 ชื่อแต่ละ Method ต้องประกาศด้วย camelCase



2. PSR-2 Coding Style Guide

2.1 code ต้องปฎิบัติตาม PSR-1

2.2 code ต้องใช้ 4 space indent แต่ละบรรทัด ห้ามใช้ tab  เป็นอันขาด

2.3 ไม่มีการจำกัดจำนวนบรรทัด ซึ่ง code แต่ละบรรทัดควรไม่เกิน 80 ตัวอักษร

2.4 เมื่อประกาศ namespace หรือ use ต้องเว้น 1 บรรทัด

2.5 ปีกกาเปิด { สำหรับ class ต้องอยู่บรรทัดต่อไปจากที่ประกาศชื่อ class และ ปีกกาปิด } ต้องอยู่บรรทัดถัดไปกับสิ่งที่อยู่ใน class

<?php
class KittinanHandsome
{
    //body
}
?>

2.6 ปีกกาเปิด { และ ปีกกาปิด } สำหรับ method ปฏิบัติเช่นเดียวกับข้อ 2.5 คือต้องเว้นบรรทัด

<?php
class KittinanHandsome
{
    public function getHeight()
    {
         return 180;
    }
}
?>

2.7 ประกาศ visibility (public, private, protected) ทุก property และ method ส่วน abstract และ final ต้องประกาศก่อน visibility และ static ต้องประกาศหลัง visibility

2.8 Control Structure  ทั้งหลาย (if else และ loop ต่างๆ)

2.8.1 ต้องมี 1 space ตามหลัง keyword เหล่านั้น

2.8.2 ต้องไม่มี space หลังวงเล็บเปิด

2.8.3 ต้องไม่มี space ก่อนวงเล็บปิด

2.8.4 ต้องมี 1 space ระหว่าง วงเล็บปิด กับ ปีกกาเปิด

2.8.5 code ที่อยุ่ภายใน Control Structure ต้องเว้น 1 indent (4 space)

2.8.6 ปีกกาเปิด ต้องยู่บรรทัดเดียวกับ keyword Control Structure

2.8.7 ปีกกาปิด ต้องอยู่บรรทัดใหม่ถัดจาก code ที่อยู่ภายใน Control Structure



3. PSR-3 Logger Interface

Logger Interface ประกอบไปด้วย 8 method (debug, info, notice, warning, error, critical, alert, emergency) ซึ่งเป็นไปตาม RFC 5424

ไปดูต่อได้ที่เวป php-fig เลยนะครับ ค่อนข้างเยอะ เริ่มขี้เกียจแล้ว



4. PSR-4 Autoloader

4.1 class ในที่นี่หมายถึง  class, interface, trait หรือ อะไรก็ตามที่มีโครงสร้างคล้ายแบบนี้

4.2 The fully qualified class name ต้องปฏิบัติตามฟอร์มนี้

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

4.2.1 The fully qualified class name ต้องมี top level namespace หรือที่เรียกกันว่า vendor namespace

4.2.2 The fully qualified class name อาจมี sub-namespace ตั้งแต่ 1 หรือ มากกว่านั้น

4.2.3  The fully qualified class name ต้องปิดท้ายด้วย ชื่อ class

4.2.4 underscore ไม่มีความหมายพิเศษใดๆในส่วนต่างๆของ The fully qualified class name

4.2.5 ตัวอักษรใน The fully qualified class name อาจผสมระหว่างตัวเล็กและตัวใหญ่

4.2.6 ชื่อทุก class ต้องอ้างอิง case-sensitive fashion

ข้ออื่นๆของ PSR-4 Autoloader เริ่มแปลไม่ค่อยจะถูกแล้วครับ ยังไงดูตัวอย่างน่าจะเข้าใจได้มากกว่าครับ

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md


สุดท้าย ก็ขอให้ทุกคนพยายามปรับเปลี่ยน style การเขียน code ให้เข้ากับข้อกำหนดของ PSR Standard นะครับ


อ้างอิง
- http://www.php-fig.org
- https://github.com/php-fig/fig-standards



วิธีการติดตั้ง Apache + PHP + Mysql + Phpmyadmin บน Ubuntu 14.04

มาถึงปลายปี 2014 ผมเชื่อว่ายังมีนักพัฒนาเวปด้วยภาษา php หลายท่านยังใช้ Appserv, XAMPP, WAMP และ MAMP กันอยู่ ไม่ใช่มันไม่ดีนะครับ แต่เราควรที่จะเรียนรู้วิธีการติดตั้ง Software แต่ละตัวกันเองดีกว่า ผมจะยกตัวอย่างของ Appserv นะครับ Appserv รุ่นล่าสุดยังใช้งาน PHP ใน version 5.2 อยู่เลยครับ ซึ่งปัจจุบัน ณ เวลานี้ PHP ออก version 5.6 มาแล้วครับ

และอีกอย่างนึงก็อยากให้นักพัฒนาเวปด้วย php ทั้งหลายลองหันมาใช้ Linux กันครับ เพราะสภาพแวดล้อมจริงๆในการรัน  Web Server ส่วนใหญ่จะรันอยู่บน Linux ซึ่งจะทำให้ตัวนักพัฒนาเข้าใจสภาพแวดล้อมดียิ่งขึ้นครับ

เรามาเริ่มกันเลยครับ โดยผมจะใช้ Ubuntu 14.04 ในการติดตั้ง ผ่าน Terminal หรือ Command line นั้นเอง โดยบน Ubuntu 14.04 สามารถกดคีย์ลัดคือ CTRL + ALT +T

1. ติดตั้ง Apache Web Server

sudo apt-get install apache2



2. ทดสอบว่า Apache ติดตั้งสำเร็จ โดยเปิด Web Browser แล้วเข้าที่ http://localhost/

3. ทำการติดตั้ง Mysql Server (หากไม่ชอบ Mysql ผมแนะนำเป็น MariaDB แทนครับ Performance ดีกว่า Mysql มากๆ)

3.1 ติดตั้ง Mysql

sudo apt-get install mysql-server mysql-client

Enter Your Mysql Password











4. ติดตั้ง PHP และ Apache php module

sudo apt-get install php5 libapache2-mod-php5 php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-sqlite php5-json

5. ทดสอบว่า php ใช้งานได้

sudo chmod 777 /var/www/html/

5.1 สร้างไฟล์ info.php ที่ path /var/www/html/

nano /var/www/html/info.php

โดยใส่ code เข้าไปดังนี้

<?php
  phpinfo();










5.2 Restart Apache

sudo service apache2 restart

5.3 ทดสอบโดยการเปิด Web Browser ไปที่ http://localhost/info.php
















6. ติดตั้ง Phymyadmin

6.1 Download ไฟล์ phpmyadmin จากเวป http://www.phpmyadmin.net/home_page/downloads.php

6.2 แตกไฟล์ที่ Download ไว้ที่ /var/www/html/phpmyadmin

6.3 เปลี่ยนชื่อไฟล์ /var/www/html/phpmyadmin/config.sample.inc.php เป็น /var/www/html/phpmyadmin/config.inc.php

6.4 เปิดไฟล์ /var/www/html/phpmyadmin/config.inc.php และแก้ไข้บรรทัด

$cfg['blowfish_secret'] = '5555555555555555555555555555555555'; 

โดยใส่ค่ามั่วๆลงไป

6.5 ทดสอบโดยการเปิด Web Browser ไปที่ http://localhost/phpmyadmin




ก็เสร็จสิ้นไปแล้วสำหรับการติดตั้ง Apache + Mysql + PHP + Phpmyadmin นะครับ ไม่ยากเลยง่ายนิดเดียว

PHP-FPM vs HHVM

this is result i tested concurence between php-fpm (tcp) vs hhvm (tcp)

My http server is Nginx. i tested 1000 requests and 50 concurrence.


First i tested php-fpm the time taken for test is 8.272 seconds.

php-fpm result

i tested hhvm the time taken for test is  2.831 seconds

hhvm result
the code that i tested is my project based on cakephp framework.

conclusion hhvm is very very fast but hhvm is not support unix socket now. :-(

fix : PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0

This is Solution to Fix :
PHP Deprecated:  Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0
1. Open File  /etc/php5/cli/conf.d/ming.ini
sudo gedit /etc/php5/cli/conf.d/ming.ini

2. Replace The '#' on First Line with ';'
; configuration for php MING module

3. Save & Have Fun !

Install xdebug on PHP ubuntu 11.04

Nomally php var_dump()  function display like this



We will override var_dump() by xdebug for  human read with color highlight like this




1. install php5-xdebug follow command :
sudo apt-get install php5-xdebug 

2. find xdebug.so :
sudo find / -name xdebug.so

result just like this :
/usr/lib/php5/20090626+lfs/xdebug.so

3. Edit php.ini :
sudo gedit /etc/php5/apache2/php.ini

add this in the end of file :
zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"

find html_errors in php.ini and change it to on :
html_errors = on
save your php.ini

4. Restart Your Apache :
sudo /etc/init.d/apache2 restart
5. have debug fun !!!

fix netbeans 7.0.1 php not suggest class

i got poblem in netbeans 7.0.1 ,It's not suggest my php class (Joomla Framework).Before that I can use netbeans with php (Joomla Framework) very well.
After I updated some plugins Netbeans alert message like can't load some class.

Solution :
Update Your Java JDK to Version 7 Here

ubuntu 11.04 install apache php mysql phpmyadmin

1. open terminal
2. install mysql
sudo apt-get install mysql-server mysql-client
3. install apache
sudo apt-get install apache2
4. install php and apache module
sudo apt-get install php5 libapache2-mod-php5
5. install php5 basic module
sudo apt-get install php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
6. restart apache
sudo  /etc/init.d/apache2 restart
7. test your apache and php work
sudo gedit /var/www/info.php
     insert code below and save :
<?php
phpinfo();
8. open your web browser and check it at http://localhost/info.php and see result like this.


9. install phpmyadmin 
sudo apt-get install phpmyadmin
   select >  apache2

10. edit apache2.conf
sudo gedit /etc/apache2/apache2.conf 

      insert this code into the last line
Include /etc/phpmyadmin/apache.conf
11. reload or restart your apache
sudo /etc/init.d/apache2 reload
12. open your web browser and go to http://localhost/phpmyadmin/



13. have fun !!!


ps.

sudo apt-get install mysql-server mysql-client apache2 php5 libapache2-mod-php5 php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-sqlite php5-tidy phpmyadmin

mysql_fetch_assoc VS mysql_fetch_object VS mysql_fetch_array

Performance of mysql_fetch_assoc , mysql_fetch_object , mysql_fetch_array


Graph

mysql_fetch_assoc have great performance !