확장 설치
주의
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 CLI의 php.ini 파일 위치 확인 방법
확장을 설치할 때, php.ini 파일을 수동으로 구성하고 확장을 추가해야 할 경우가 있으므로 PHP CLI의 php.ini 파일 위치를 확인해야 합니다. php --ini 명령을 실행하여 PHP CLI의 ini 파일 위치를 찾아볼 수 있으며, 결과는 다음과 유사합니다(각 시스템의 표시 결과는 차이가 있을 수 있습니다):
~# 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 확장 설치 예)
방법 1: apt 또는 yum 명령을 사용하여 설치
PHP가 apt 또는 yum 명령을 통해 설치되었다면, 확장 또한 apt 또는 yum을 통해 설치할 수 있습니다.
debian/ubuntu 등의 시스템에서 apt를 사용하여 PHP 확장 설치 방법 (비루트 사용자는 sudo 명령을 추가해야 함)
apt-cache search를 사용하여 확장 패키지 검색~# apt-cache search memcached php php-apc - APC (Alternative PHP Cache) module for PHP 5 php5-memcached - memcached module for php5apt-get install를 사용하여 확장 패키지 설치~# apt-get install -y php5-memcached Reading package lists... Done Reading state information... Done ...
centos 등의 시스템에서 yum을 사용하여 PHP 확장 설치 방법
yum search를 사용하여 확장 패키지 검색~# yum search memcached php php-pecl-memcached - memcached module for php5yum install을 사용하여 확장 패키지 설치~# yum install -y php-pecl-memcached Reading package lists... Done Reading state information... Done ...설명:
apt 또는 yum을 사용하여 PHP 확장을 설치하면 php.ini 파일이 자동으로 구성되며, 설치 후 즉시 사용할 수 있어 매우 편리합니다. 단점은 일부 확장이 apt 또는 yum에서 해당 확장 설치 패키지가 없을 수 있습니다.
방법 2: pecl을 사용하여 설치
pecl install 명령을 사용하여 확장 설치
pecl install설치~# pecl install memcached downloading memcached-2.2.0.tgz ... Starting to download memcached-2.2.0.tgz (70,449 bytes) ....- php.ini 구성
php --ini를 실행하여 php.ini 파일 위치를 찾은 후, 파일에 extension=memcached.so를 추가합니다.
방법 3: 소스 코드 컴파일 설치 (일반적으로 PHP에 포함된 확장을 설치하는 방법, pcntl 확장 설치 예)
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- 버전 기준으로 PHP 소스 코드 다운로드
PHP 역사 버전 다운로드 페이지: https://php.net/releases/
- 소스 코드 압축 파일 해제
예를 들어 다운로드한 압축 파일 이름이 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/
...
- 소스 코드의 ext/pcntl 디렉토리로 이동
~# cd php-5.3.29/ext/pcntl/ phpize명령 실행~# phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626configure명령 실행~# ./configure checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E ...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... ...make install명령 실행~# make install Installing shared extensions: /usr/lib/php5/20090626/- ini 파일 구성
php --ini를 실행하여 php.ini 파일 위치를 찾은 후, 파일에 extension=pcntl.so를 추가합니다.
설명:
이 방법은 일반적으로 PHP에 내장된 확장(예: posix 확장 및 pcntl 확장)을 설치하기 위해 사용됩니다. phpize를 사용하여 특정 확장을 컴파일하는 것 외에도 전체 PHP를 다시 컴파일하며, 이 때 매개변수를 추가하여 확장을 추가할 수 있습니다. 예를 들어, 소스 코드 루트 디렉토리에서 실행
~# ./configure --enable-pcntl --enable-posix ...
~# make && make install
방법 4: phpize 설치
설치할 확장이 PHP 소스 코드 ext 디렉토리에 없다면, 해당 확장은 https://pecl.php.net에서 검색하여 다운로드해야 합니다.
libevent 확장 설치 예 (시스템에 libevent-dev 라이브러리가 설치되어 있다고 가정)
- 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
....
-
소스 코드 디렉토리로 이동
~# cd libevent-0.1.0/ -
phpize명령 실행~# phpize Configuring for: PHP Api Version: 20090626 Zend Module Api No: 20090626 Zend Extension Api No: 220090626 -
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 ... -
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 ... -
make install명령 실행~# make install Installing shared extensions: /usr/lib/php5/20090626/ -
ini 파일 구성
php --ini를 실행하여 php.ini 파일 위치를 확인한 후, 파일에 extension=libevent.so를 추가합니다.