PHP 的源碼編譯安裝


PHP 架構和安裝擴展的幾種方式
PHP 三大模塊:

SAPI:接受並處理請求。
Zend Engine:PHP 的核心,負責分析 PHP 代碼並轉為 opcode,然后在 Zend VM 虛擬機上執行。
PHP 功能函數及擴展層:實現各種功能,例如 curl 通信、連接 MySQL 等。
PHP 中,有以下幾種方式添加擴展:

把擴展編譯進 PHP
通過 pecl 命令或 Linux 發行版自帶的 yum、apt-get 等命令安裝,動態加載(Linux 下是 *.so 文件,Windows 下是 *.dll 文件)
用 phpize 從源碼編譯共享 PECL 擴展庫
相比通過 yum install 或 apt-get 等各大 Linux 發行版自帶的安裝方向,源碼編譯安裝略顯復雜,但是靈活性也更高,比如要安裝 PCNTL 等擴展,就只能通過源碼編譯安裝。

注意:源碼編譯安裝時,只會安裝指定的擴展,而好多擴展是默認不安裝的。對於常用的數據庫驅動、OpenSSL、GD 庫等都需要指定。如果安裝后發現遺漏,可以重新編譯,加上相應的參數可得到驅動程序(Linux 下是 *.so 文件),然后復制到 PHP 的擴展目錄(一般是 /usr/local/php/include/php/ext)下,並在 php.ini 配置文件中開啟擴展既可以。

通過 yum list php72w-* 可以在 CentOS 中查看可以使用命令安裝的擴展。

獲取 PHP 源碼並解壓
下載源碼
官網下載
官網下載地址:http://php.net/downloads ,在這個頁面選擇一個具體的版本,點擊后會跳轉到選擇鏡像的頁面。我試了一下中國的兩個鏡像,都掛了,隨便點了一個日本的鏡像,結果下載成功了。。

Git 下載
可以在 GitHub 上的 PHP 源碼倉庫 或 PHP 自建的 Git 倉庫 下載源碼。

解壓
tar -zxvf mirror
1
配置並構建 PHP
核心配置選項列表

簡單示例
PHP 初始的配置和安裝過程被 configure 腳本中一系列命令行選項控制。可以通過 ./configure --help 命令了解 PHP 所有可用的編譯選項及簡短解釋。

Linux 下安裝軟件的步驟:

./configure:執行配置選項(例如 --prefix 可以指定安裝位置),判斷硬件及操作系統平台,生成 Makefile 文件
make:編譯
make install:安裝
配置好 PHP 后,便可以開始用 make 命令編譯模塊和可執行文件。

cd ../php-7.2.12
./configure --prefix=/tdata/soft/php/php-7.2.12
make && make install

 


執行 ./configure 命令時,可能會因為 Linux 尚未安裝某些庫而報錯,安裝即可解決。配置成功后會看到授權信息:

Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+

  

PHP 源碼的 ext 目錄中,有大量的擴展:

[root@VM_139_38_centos php-7.2.12]# ls
acinclude.m4 configure.ac libtool modules README.NEW-OUTPUT-API scripts
aclocal.m4 CONTRIBUTING.md LICENSE NEWS README.PARAMETER_PARSING_API server-tests-config.php
appveyor CREDITS ltmain.sh pear README.REDIST.BINS server-tests.php
build ext main php7.spec README.RELEASE_PROCESS snapshot
buildconf EXTENSIONS makedist php7.spec.in README.SELF-CONTAINED-EXTENSIONS stamp-h.in
buildconf.bat footer Makefile php.gif README.STREAMS tests
CODING_STANDARDS generated_lists Makefile.frag php.ini-development README.SUBMITTING_PATCH travis
config.guess genfiles Makefile.fragments php.ini-production README.TESTING TSRM
config.log header Makefile.gcov README.EXT_SKEL README.TESTING2 UPGRADING
config.nice include Makefile.global README.GIT-RULES README.UNIX-BUILD-SYSTEM UPGRADING.INTERNALS
config.status INSTALL Makefile.objects README.input_filter README.WIN32-BUILD-SYSTEM vcsclean
config.sub install-sh missing README.MAILINGLIST_RULES run-tests.php win32
configure libs mkinstalldirs README.md sapi Zend
[root@VM_139_38_centos php-7.2.12]# ls ext/
bcmath dba filter imap mysqli pcre pdo_pgsql recode soap sysvsem xmlrpc
bz2 dom ftp interbase mysqlnd pdo pdo_sqlite reflection sockets sysvshm xmlwriter
calendar enchant gd intl oci8 pdo_dblib pgsql session sodium tidy xsl
com_dotnet exif gettext json odbc pdo_firebird phar shmop spl tokenizer zend_test
ctype ext_skel gmp ldap opcache pdo_mysql posix simplexml sqlite3 wddx zip
curl ext_skel_win32.php hash libxml openssl pdo_oci pspell skeleton standard xml zlib
date fileinfo iconv mbstring pcntl pdo_odbc readline snmp sysvmsg xmlreader

 

常用的配置選項
PHP 選項
–prefix[=PREFIX]:安裝路徑的前綴,可以自定義,例如 /tdata/soft/php。指定prefix,可執行文件默認放在/usr/local/bin,庫文件默認放在/usr/local/lib,配置文件默認放在/usr/local/etc,其它的資源文件放在/usr/local/share,很凌亂。指定 prefix,直接刪掉一個文件夾就夠了。
–with-config-file-path=PATH:設置 php.ini 的搜索路徑。默認為 PREFIX/lib。
–disable-short-tags:默認禁用短形式的開始標簽 <? 。

PHP 擴展
每個擴展對應的選項,需要在具體的擴展文檔里找。大部分可以安裝 PHP 之后再安裝。

–enable-mbstring:開啟 mbstring 多字節擴展
–with-gd[=DIR]:激活 GD 支持,可以指定擴展位置。編譯 GD 庫需要libpng 和 libjpeg。建議通過 sudo apt-get install php7.2-gd 或 yum install php72w-gt 安裝。
–with-pear:安裝 PEAR 擴展。
–with-zip[=DIR]:提供 zip 支持,[DIR]是 ZZIPlib 庫安裝路徑。建議通過 通過 PECL 安裝。

進程控制擴展:
–enable-pcntl:開啟 PCNTL 進程控制擴展,只能編譯安裝。

網絡相關擴展:
–with-openssl[=DIR]:開啟 OpenSSL 擴展,可以指定擴展位置
–enable-ftp:開啟 FTP 擴展
–with-curl:支持 cURL
–enable-sockets:開啟 socket 擴展
–enable-soap:支持 SOAP
–enable-fpm:激活 FPM 支持

數據庫擴展:
–with-mysql=mysqlnd
–with-mysqli=mysqlnd
–with-pdo-mysql=mysqlnd

–with-mysql=/usr/bin/mysql_config
–with-mysqli=mysqlnd
–with-pdo-mysql=mysqlnd

配置 PHP
在之前編譯的源碼包中,找到 php.ini-production,復制到/usr/local/php下,並改名為php.ini:

$ cp php.ini-production /usr/local/php/php.ini


編譯安裝 PHP 擴展
PHP 安裝后,如果還需要安裝擴展,可以先看看 PHP 源碼的 ext 目錄中有沒有,有的話直接編譯即可。

PHP 默認安裝的擴展
執行 ./configure 命令時,如果不指定任何擴展,PHP 會默認安裝如下擴展,其他的就需要自己制定了,例如 GD、MySQL、curl、mbstring、bz2、calendar、exif、ftp 等:

[root@VM_139_38_centos php-7.2.12]# /tdata/soft/php/php-7.2.12/bin/php -m
[PHP Modules]
Core
ctype
date
dom
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter

[Zend Modules]

 

CentOS 通過 yum 命令安裝的 PHP:

[root@VM_139_38_centos gd]# php -m
[PHP Modules]
bz2
calendar
Core
ctype
curl
date
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
json
libxml
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
swoole
tokenizer
xml
zip
zlib

[Zend Modules]

 

---------------------
作者:kikajack
來源:CSDN
原文:https://blog.csdn.net/kikajack/article/details/84727142
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM