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



Ubuntu 14.04 Genymotion Cannot mix incompatible Qt library [Fixed]


Error :

[Genymotion] [Fatal] Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)

Solve :

1. install package

sudo apt-get install libxi-dev libxmu-dev


2. use the system qt

mkdir QtLibs && mv *Qt*.so* QtLibs

หนังสือ Git ฉบับภาษาไทย ฟรี

บังเอิญไปเจอมาครับ จึงเอามาแบ่งปัน

http://www.slideshare.net/dekcomgang/git-book



วิธีการสร้าง Virtutal Host ให้กับ Apache บน Ubuntu 14.04

เบื่อไหมกับการรันเวปในเครื่องตัวเองแล้วต้องไปที่ http://localhost/xxxx วันนี้เราจะมาจำลอง Virtual Host กัน โดยหลักการการทำงานของมันก็คือ

- ชี้ Domain มาที่เครื่องเราเอง (localhost)

- สร้าง Virtual Host ให้กับ Apache เพื่อให้รองรับ Request สำหรับ Domain นั้น

สำหรับโจทย์ก็คือต้องการสร้าง Domain  http://kittinan.localdomain โดยให้ชี้ไปที่  path /home/null/git/kittinan เรามาเริ่มกันเลยครับ

1. แก้ไฟล์ host ให้ชี้มาที่เครื่องเราเอง ก่อนผ่าน Terminal

sudo nano /etc/hosts
เพิ่ม 127.0.0.1  kittinan.localdomain ไปดังภาพ




2. สร้างไฟล์  Virtual Host ให้กับ Apache

- ไปยัง path /etc/apache2/sites-available

cd  /etc/apache2/sites-available
- สร้างไฟล์ kittinan.localdomain.conf

sudo nano kittinan.localdomain.conf
<VirtualHost *:80>
        ServerName kittinan.localdomain
        ServerAdmin webmaster@localhost
        DocumentRoot /home/null/git/kittinan
<Directory /home/null/git/kittinan>
    Require all granted
</Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>



- enable virtual host
sudo a2ensite kittinan.localdomain.conf
- Restart Apache
sudo service apache2 restart

3. สร้าง Folder ที่เรา point virtual host ซึ่งก็คือ path  /home/null/git/kittinan

- กลับมายัง home directory ของเรา
cd ~/
- สร้าง folder /home/null/git/kittinan
mkdir -p git/kittinan
- สร้างไฟล์ index.php  /home/null/git/kittinan/index.php
nano git/kittinan/index.php
<?php
echo 'Hello Kittinan';
4. ทดลองรันด้วยการเปิด Web browser ไปที่ http://kittinan.localdomain



เป็นอันเสร็จสิ้นการสร้าง Virtual Host สำหรับในการพัฒนาครับ

วิธีการติดตั้ง 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 นะครับ ไม่ยากเลยง่ายนิดเดียว

install Nginx + MariaDB + PHP-FPM + Phpmyadmin Ubuntu 14.04


1. install mariadb server

sudo apt-get install mariadb-server

2. install nginx

sudo apt-get install nginx

3. install php5-fpm

sudo apt-get install php5-fpm  php5-mysql php5-curl php5-gd php-pear php5-imagick php5-mcrypt php5-memcache php5-sqlite

4. Config Nginx

- backup default config file /etc/nginx/sites-available/default

mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

- edit file /etc/nginx/sites-available/default for config nginx pass fastcgi like this config

- restart nginx

5. change permission /usr/share/nginx/html depend on your config

chmod 777 /usr/share/nginx/html

6. test php that work

nano /usr/share/nginx/html/info.php
<?php

phpinfo();


http://localhost/info.php




7. install phpmyadmin

- download phpmyadmin here

- unzip to the folder /usr/share/nginx/html/phpmyadmin

- open http://localhost/phpmyadmin



rsync ssh custom port



rsync -avz -e "ssh -p $PORT" user@remoteip:/path/to/files/ /local/path/