การติดตั้งส่วนขยาย

หมายเหตุ

ต่างจากโหมดการทำงานของ Apache+PHP หรือ Nginx+PHP, Workerman ทำงานบน PHP คำสั่ง PHP CLI โดยใช้โปรแกรม PHP ที่แตกต่างกัน, ไฟล์ php.ini ที่ใช้ก็อาจจะแตกต่างกันด้วย ดังนั้น การที่เห็นว่าได้ติดตั้งส่วนขยายบางอย่างจากการพิมพ์ phpinfo() ในหน้าเว็บนั้น ไม่ได้หมายความว่า PHP CLI ในคำสั่งก็ได้ติดตั้งส่วนขยายที่ตรงกันไว้เช่นกัน

วิธีการตรวจสอบว่าส่วนขยายใดที่ติดตั้งใน PHP CLI

การรัน php -m จะช่วยแสดงรายการส่วนขยายที่ได้ติดตั้งใน PHP CLI อยู่แล้ว ผลลัพธ์จะมีลักษณะคล้ายดังนี้:

~# php -m
[PHP Modules]
event
posix
pcntl
...

วิธีการตรวจสอบตำแหน่งของไฟล์ php.ini ของ PHP CLI

เมื่อเราติดตั้งส่วนขยาย, อาจจำเป็นต้องตั้งค่าไฟล์ php.ini ด้วยตนเองเพื่อเพิ่มส่วนขยายเข้าไป ดังนั้นจึงต้องยืนยันตำแหน่งของไฟล์ php.ini ของ PHP CLI สามารถรัน php --ini เพื่อค้นหาตำแหน่งไฟล์ ini ของ PHP CLI ผลลัพธ์จะมีลักษณะคล้ายดังนี้ (ผลลัพธ์จะแตกต่างกันในแต่ละระบบ):

~# php --ini
Configuration File (php.ini) Path: /etc/php8/cli
Loaded Configuration File:         /etc/php8/cli/php.ini
Scan for additional .ini files in: /etc/php8/cli/conf.d
Additional .ini files parsed:      /etc/php8/cli/conf.d/apc.ini,
/etc/php8/cli/conf.d/pdo.ini,
/etc/php8/cli/conf.d/pdo_mysql.ini
...

ติดตั้งส่วนขยายให้ PHP CLI (ตัวอย่างติดตั้งส่วนขยาย memcached)

วิธีที่หนึ่ง, ใช้คำสั่ง apt หรือ yum ในการติดตั้ง

หาก PHP ถูกติดตั้งผ่านคำสั่ง apt หรือ yum ส่วนขยายก็สามารถติดตั้งผ่าน apt หรือ yum ได้เช่นกัน

วิธีติดตั้งส่วนขยาย PHP บนระบบ debian/ubuntu (สำหรับผู้ใช้ที่ไม่ใช่ root ต้องเพิ่มคำสั่ง sudo)

  1. ใช้คำสั่ง apt-cache search ค้นหาชุดแพ็กเกจส่วนขยาย
    ~# apt-cache search memcached php
    php-apc - APC (Alternative PHP Cache) module for PHP 5
    php5-memcached - memcached module for php5
  2. ใช้คำสั่ง apt-get install ติดตั้งชุดแพ็กเกจส่วนขยาย
    ~# apt-get install -y php5-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

วิธีติดตั้งส่วนขยาย PHP บนระบบ centos

  1. ใช้คำสั่ง yum search ค้นหาชุดแพ็กเกจส่วนขยาย
    ~# yum search memcached php
    php-pecl-memcached - memcached module for php5
  2. ใช้คำสั่ง yum install ติดตั้งชุดแพ็กเกจส่วนขยาย
    ~# yum install -y php-pecl-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

    หมายเหตุ:

การใช้ apt หรือ yum ในการติดตั้งส่วนขยาย PHP จะทำการตั้งค่าไฟล์ php.ini อัตโนมัติ ซึ่งทำให้สามารถใช้งานได้ทันทีหลังการติดตั้ง สะดวกมาก แต่ข้อเสียคือบางส่วนขยายอาจไม่มีชุดแพ็กเกจที่ตรงกันใน apt หรือ yum

วิธีที่สอง, ใช้ pecl ในการติดตั้ง

ใช้คำสั่ง pecl install เพื่อติดตั้งส่วนขยาย

  1. ติดตั้งโดยใช้คำสั่ง pecl install
    ~# pecl install memcached
    downloading memcached-2.2.0.tgz ...
    Starting to download memcached-2.2.0.tgz (70,449 bytes)
    ....
  2. ตั้งค่าไฟล์ php.ini

โดยการรัน php --ini เพื่อค้นหาตำแหน่งไฟล์ php.ini จากนั้นเพิ่ม extension=memcached.so ในไฟล์

วิธีที่สาม, ติดตั้งจากการคอมไพล์ซอร์สโค้ด (มักใช้เมื่อต้องการติดตั้งส่วนขยายที่มาพร้อมกับ PHP โดยใช้ตัวอย่างการติดตั้งส่วนขยาย pcntl)

  1. ใช้คำสั่ง php -v เพื่อตรวจสอบเวอร์ชันของ PHP CLI ปัจจุบัน
    ~# php -v
    PHP 5.3.29-1~dotdeb.0 with Suhosin-Patch (cli) (built: Aug 14 2014 19:55:20)
    Copyright (c) 1997-2014 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
  2. ดาวน์โหลดซอร์สโค้ด PHP ตามเวอร์ชัน

หน้าเว็บดาวน์โหลดเวอร์ชันประวัติของ PHP: https://php.net/releases/

  1. แตกไฟล์ซอร์สโค้ด

เช่น ถ้าไฟล์ที่ดาวน์โหลดมีชื่อว่า php-5.3.29.tar.gz

~# tar -zxvf php-5.3.29.tar.gz
php-5.3.29/
php-5.3.29/README.WIN32-BUILD-SYSTEM
php-5.3.29/netware/
...
  1. เข้าไปที่ไดเรกทอรี ext/pcntl ในซอร์สโค้ด
    ~# cd php-5.3.29/ext/pcntl/
  2. รันคำสั่ง phpize
    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. รันคำสั่ง configure
    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    ...
  4. รันคำสั่ง make
    ~# make
    /bin/bash /tmp/php-5.3.29/ext/pcntl/libtool --mode=compile cc ...
    -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend...
    ...
  5. รันคำสั่ง make install
    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. ตั้งค่าไฟล์ ini

โดยการรัน php --ini เพื่อค้นหาตำแหน่งไฟล์ php.ini จากนั้นเพิ่ม extension=pcntl.so ในไฟล์

หมายเหตุ:
วิธีนี้มักใช้เพื่อติดตั้งส่วนขยายที่มาพร้อมกับ PHP เช่น ส่วนขยาย posix และ pcntl นอกจากการใช้ phpize คอมไพล์ส่วนขยายนี้แล้ว ยังสามารถคอมไพล์ PHP ทั้งหมดใหม่ได้ โดยใช้พารามิเตอร์ในการเพิ่มส่วนขยายเช่นนี้ ในไดเรกทอรีรากของซอร์สโค้ดรัน

~# ./configure --enable-pcntl --enable-posix ...
~# make && make install

วิธีที่สี่, ติดตั้งโดยใช้ phpize

ถ้าส่วนขยายที่ต้องการติดตั้งไม่มีในไดเรกทอรี ext ของซอร์สโค้ด PHP, ส่วนขยายนั้นจะต้องไปที่ https://pecl.php.net เพื่อค้นหาและดาวน์โหลด

ตัวอย่างการติดตั้งส่วนขยาย libevent (สมมุติว่าระบบได้ติดตั้ง libevent-dev แล้ว)

  1. ดาวน์โหลดไฟล์ที่บีบอัดส่วนขยาย libevent (สามารถดาวน์โหลดไปยังไดเรกทอรีใดก็ได้ในระบบปัจจุบัน)
    
    ~# wget https://pecl.php.net/get/libevent-0.1.0.tgz
    --2015-05-26 21:43:40--  https://pecl.php.net/get/libevent-0.1.0.tgz
    Resolving pecl.php.net... 104.236.228.160
    Connecting to pecl.php.net|104.236.228.160|:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 9806 (9.6K) [application/octet-stream]
    Saving to: “libevent-0.1.0.tgz”

100%[=======================================================>] 9,806 41.4K/s in 0.2s


2. แตกไฟล์ที่บีบอัดส่วนขยาย
```shell
~# tar -zxvf libevent-0.1.0.tgz
package.xml
libevent-0.1.0/config.m4
libevent-0.1.0/CREDITS
libevent-0.1.0/libevent.c
....
  1. เข้าไปในไดเรกทอรีซอร์สโค้ด

    ~# cd libevent-0.1.0/
  2. รันคำสั่ง phpize

    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. รันคำสั่ง configure

    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    checking for a sed that does not truncate output... /bin/sed
    checking for cc... cc
    checking whether the C compiler works... yes
    ...
  4. รันคำสั่ง make

    ~# /bin/bash /data/test/libevent-0.1.0/libtool --mode=compile cc  -I. -I/data/test/libevent-0.1.0 -DPHP_ATOM_INC -I/data/test/libevent-0.1.0/include
    ...
  5. รันคำสั่ง make install

    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. ตั้งค่าไฟล์ ini

โดยการรัน php --ini เพื่อค้นหาตำแหน่งไฟล์ php.ini จากนั้นเพิ่ม extension=libevent.so ในไฟล์