Cài đặt mở rộng

Lưu ý

Khác với chế độ chạy của Apache+PHP hoặc Nginx+PHP, Workerman chạy trên PHP Command Line PHP CLI, sử dụng các executable PHP khác nhau và file php.ini cũng có thể khác. Do đó, việc in ra phpinfo() trong trang web thấy rằng một mở rộng nào đó đã được cài đặt không có nghĩa là PHP CLI trong command line cũng đã cài đặt tương ứng mở rộng đó.

Làm thế nào để xác định PHP CLI đã cài đặt những mở rộng nào

Chạy php -m sẽ liệt kê các mở rộng đã được cài đặt trên command line PHP CLI, kết quả sẽ giống như sau:

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

Làm thế nào để xác định vị trí của php.ini file trong PHP CLI

Khi chúng ta cài đặt mở rộng, có thể cần phải cấu hình file php.ini bằng cách thêm mở rộng vào đó, vì vậy cần xác định vị trí của file php.ini cho PHP CLI. Có thể chạy php --ini để tìm vị trí file ini của PHP CLI, kết quả sẽ giống như sau (kết quả hiển thị có thể khác nhau trên các hệ điều hành khác nhau):

~# 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
...

Cài đặt mở rộng cho PHP CLI (lấy cài đặt mở rộng memcached làm ví dụ)

Phương pháp 1, cài đặt bằng lệnh apt hoặc yum

Nếu PHP được cài đặt qua lệnh apt hoặc yum, thì mở rộng cũng có thể được cài đặt thông qua apt hoặc yum.

Phương pháp cài đặt mở rộng PHP trên hệ thống debian/ubuntu (người dùng không phải root cần thêm lệnh sudo)

  1. Sử dụng apt-cache search để tìm kiếm gói mở rộng
    ~# apt-cache search memcached php
    php-apc - APC (Alternative PHP Cache) module for PHP 5
    php5-memcached - memcached module for php5
  2. Sử dụng apt-get install để cài đặt gói mở rộng
    ~# apt-get install -y php5-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

Phương pháp cài đặt mở rộng PHP trên hệ thống centos bằng yum

  1. Sử dụng yum search để tìm kiếm gói mở rộng
    ~# yum search memcached php
    php-pecl-memcached - memcached module for php5
  2. Sử dụng yum install để cài đặt gói mở rộng
    ~# yum install -y php-pecl-memcached
    Reading package lists... Done
    Reading state information... Done
    ...

    Chú thích:

Việc sử dụng apt hoặc yum để cài đặt mở rộng PHP sẽ tự động cấu hình file php.ini, cài đặt xong có thể sử dụng ngay, rất tiện lợi. Nhược điểm là có một số mở rộng không có gói mở rộng tương ứng trong apt hoặc yum.

Phương pháp 2, cài đặt bằng pecl

Sử dụng lệnh pecl install để cài đặt mở rộng.

  1. Cài đặt bằng pecl install
    ~# pecl install memcached
    downloading memcached-2.2.0.tgz ...
    Starting to download memcached-2.2.0.tgz (70,449 bytes)
    ....
  2. Cấu hình php.ini

Chạy php --ini để tìm vị trí file php.ini, sau đó thêm extension=memcached.so vào file.

Phương pháp 3, biên dịch cài đặt từ mã nguồn (thường là cài đặt các mở rộng đi kèm với PHP, lấy cài đặt mở rộng pcntl làm ví dụ)

  1. Dùng lệnh php -v để kiểm tra phiên bản hiện tại của 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. Tải mã nguồn PHP theo phiên bản

Trang tải mã nguồn PHP các phiên bản lịch sử: https://php.net/releases/

  1. Giải nén gói mã nguồn

Ví dụ tên gói nén đã tải về là 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. Vào thư mục ext/pcntl trong mã nguồn
    ~# cd php-5.3.29/ext/pcntl/
  2. Chạy lệnh phpize
    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Chạy lệnh configure
    ~# ./configure
    checking for grep that handles long lines and -e... /bin/grep
    checking for egrep... /bin/grep -E
    ...
  4. Chạy lệnh 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. Chạy lệnh make install
    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Cấu hình file ini

Chạy php --ini để tìm vị trí file php.ini, sau đó thêm extension=pcntl.so vào file.

Chú thích:
Phương pháp này thường được sử dụng để cài đặt các mở rộng đi kèm với PHP, chẳng hạn như mở rộng posix và pcntl. Bên cạnh việc sử dụng phpize để biên dịch một mở rộng cụ thể, cũng có thể biên dịch lại toàn bộ PHP, trong quá trình biên dịch có thể thêm mở rộng bằng các tham số, chẳng hạn như chạy lệnh

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

Phương pháp 4, cài đặt bằng phpize

Nếu muốn cài đặt mở rộng không có trong thư mục ext của mã nguồn PHP, thì cần tìm kiếm và tải xuống mở rộng đó từ https://pecl.php.net.

Lấy việc cài đặt mở rộng libevent làm ví dụ (giả sử hệ thống đã cài đặt thư viện libevent-dev)

  1. Tải về gói mở rộng 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. Giải nén gói mở rộng
```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. Vào thư mục mã nguồn

    ~# cd libevent-0.1.0/
  2. Chạy lệnh phpize

    ~# phpize
    Configuring for:
    PHP Api Version:         20090626
    Zend Module Api No:      20090626
    Zend Extension Api No:   220090626
  3. Chạy lệnh 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. Chạy lệnh 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. Chạy lệnh make install

    ~# make install
    Installing shared extensions:     /usr/lib/php5/20090626/
  6. Cấu hình file ini

Chạy php --ini để tìm vị trí file php.ini, sau đó thêm extension=libevent.so vào file.