PHP 的源码编译安装
<p>PHP 架构和安装扩展的几种方式<br>PHP 三大模块:</p><p>SAPI:接受并处理请求。<br>Zend Engine:PHP 的核心,负责分析 PHP 代码并转为 opcode,然后在 Zend VM 虚拟机上执行。<br>PHP 功能函数及扩展层:实现各种功能,例如 curl 通信、连接 MySQL 等。<br>PHP 中,有以下几种方式添加扩展:</p>
<p>把扩展编译进 PHP<br>通过 pecl 命令或 Linux 发行版自带的 yum、apt-get 等命令安装,动态加载(Linux 下是 *.so 文件,Windows 下是 *.dll 文件)<br>用 phpize 从源码编译共享 PECL 扩展库<br>相比通过 yum install 或 apt-get 等各大 Linux 发行版自带的安装方向,源码编译安装略显复杂,但是灵活性也更高,比如要安装 PCNTL 等扩展,就只能通过源码编译安装。</p>
<p>注意:源码编译安装时,只会安装指定的扩展,而好多扩展是默认不安装的。对于常用的数据库驱动、OpenSSL、GD 库等都需要指定。如果安装后发现遗漏,可以重新编译,加上相应的参数可得到驱动程序(Linux 下是 *.so 文件),然后复制到 PHP 的扩展目录(一般是 /usr/local/php/include/php/ext)下,并在 php.ini 配置文件中开启扩展既可以。</p>
<p>通过 yum list php72w-* 可以在 CentOS 中查看可以使用命令安装的扩展。</p>
<p>获取 PHP 源码并解压<br>下载源码<br>官网下载<br>官网下载地址:http://php.net/downloads ,在这个页面选择一个具体的版本,点击后会跳转到选择镜像的页面。我试了一下中国的两个镜像,都挂了,随便点了一个日本的镜像,结果下载成功了。。</p>
<p>Git 下载<br>可以在 GitHub 上的 PHP 源码仓库 或 PHP 自建的 Git 仓库 下载源码。</p>
<p>解压<br>tar -zxvf mirror<br>1<br>配置并构建 PHP<br>核心配置选项列表</p>
<p>简单示例<br>PHP 初始的配置和安装过程被 configure 脚本中一系列命令行选项控制。可以通过 ./configure --help 命令了解 PHP 所有可用的编译选项及简短解释。</p>
<p>Linux 下安装软件的步骤:</p>
<p>./configure:执行配置选项(例如 --prefix 可以指定安装位置),判断硬件及操作系统平台,生成 Makefile 文件<br>make:编译<br>make install:安装<br>配置好 PHP 后,便可以开始用 make 命令编译模块和可执行文件。</p>
<div class="cnblogs_code">
<pre>cd ../php-<span style="color: rgba(128, 0, 0, 1)">7.2</span>.<span style="color: rgba(128, 0, 0, 1)">12</span>
./configure --prefix=/tdata/soft/php/php-<span style="color: rgba(128, 0, 0, 1)">7.2</span>.<span style="color: rgba(128, 0, 0, 1)">12</span><span style="color: rgba(0, 0, 0, 1)">
make </span>&& make install</pre>
</div>
<p> </p>
<p><br>执行 ./configure 命令时,可能会因为 Linux 尚未安装某些库而报错,安装即可解决。配置成功后会看到授权信息:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:Perl;gutter:true;">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. |
+--------------------------------------------------------------------+
</pre>
</div>
<p> </p>
<p>PHP 源码的 ext 目录中,有大量的扩展:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ls</span>
acinclude.m4 configure.ac libtool modules README.NEW-OUTPUT-<span style="color: rgba(0, 0, 0, 1)">API scripts
aclocal</span>.m4 CONTRIBUTING.md LICENSE NEWS README.PARAMETER_PARSING_API server-tests-config.<span style="color: rgba(0, 0, 0, 1)">php
appveyor CREDITS ltmain</span>.sh pear README.REDIST.BINS server-tests.<span style="color: rgba(0, 0, 0, 1)">php
build ext main php7</span>.spec README.<span style="color: rgba(0, 0, 0, 1)">RELEASE_PROCESS snapshot
buildconf EXTENSIONS makedist php7</span>.spec.in README.SELF-CONTAINED-EXTENSIONS stamp-h.<span style="color: rgba(0, 0, 0, 1)">in
buildconf</span>.bat footer Makefile php.gif README.<span style="color: rgba(0, 0, 0, 1)">STREAMS tests
CODING_STANDARDS generated_lists Makefile</span>.frag php.ini-development README.<span style="color: rgba(0, 0, 0, 1)">SUBMITTING_PATCH travis
config</span>.guess genfiles Makefile.fragments php.ini-production README.<span style="color: rgba(0, 0, 0, 1)">TESTING TSRM
config</span>.<span style="color: rgba(0, 0, 255, 1)">log</span> header Makefile.gcov README.EXT_SKEL README.<span style="color: rgba(0, 0, 0, 1)">TESTING2 UPGRADING
config</span>.nice include Makefile.global README.GIT-RULES README.UNIX-BUILD-<span style="color: rgba(0, 0, 255, 1)">SYSTEM</span> UPGRADING.<span style="color: rgba(0, 0, 0, 1)">INTERNALS
config</span>.status INSTALL Makefile.objects README.input_filter README.WIN32-BUILD-<span style="color: rgba(0, 0, 255, 1)">SYSTEM</span><span style="color: rgba(0, 0, 0, 1)"> vcsclean
config</span>.<span style="color: rgba(0, 0, 255, 1)">sub</span> install-sh missing README.MAILINGLIST_RULES run-tests.<span style="color: rgba(0, 0, 0, 1)">php win32
configure libs mkinstalldirs README</span>.<span style="color: rgba(0, 0, 0, 1)">md sapi Zend
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> ls ext/</span>
<span style="color: rgba(0, 0, 0, 1)">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</span>.<span style="color: rgba(0, 0, 0, 1)">php hash libxml openssl pdo_oci pspell skeleton standard xml zlib
date fileinfo iconv mbstring pcntl pdo_odbc </span><span style="color: rgba(0, 0, 255, 1)">readline</span> snmp sysvmsg xmlreader</pre>
</div>
<p> </p>
<p>常用的配置选项<br>PHP 选项<br>–prefix[=PREFIX]:安装路径的前缀,可以自定义,例如 /tdata/soft/php。指定prefix,可执行文件默认放在/usr/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr/local/share,很凌乱。指定 prefix,直接删掉一个文件夹就够了。<br>–with-config-file-path=PATH:设置 php.ini 的搜索路径。默认为 PREFIX/lib。<br>–disable-short-tags:默认禁用短形式的开始标签 <? 。</p>
<p>PHP 扩展<br>每个扩展对应的选项,需要在具体的扩展文档里找。大部分可以安装 PHP 之后再安装。</p>
<p>–enable-mbstring:开启 mbstring 多字节扩展<br>–with-gd[=DIR]:激活 GD 支持,可以指定扩展位置。编译 GD 库需要libpng 和 libjpeg。建议通过 sudo apt-get install php7.2-gd 或 yum install php72w-gt 安装。<br>–with-pear:安装 PEAR 扩展。<br>–with-zip[=DIR]:提供 zip 支持,是 ZZIPlib 库安装路径。建议通过 通过 PECL 安装。</p>
<p>进程控制扩展:<br>–enable-pcntl:开启 PCNTL 进程控制扩展,只能编译安装。</p>
<p>网络相关扩展:<br>–with-openssl[=DIR]:开启 OpenSSL 扩展,可以指定扩展位置<br>–enable-ftp:开启 FTP 扩展<br>–with-curl:支持 cURL<br>–enable-sockets:开启 socket 扩展<br>–enable-soap:支持 SOAP<br>–enable-fpm:激活 FPM 支持</p>
<p>数据库扩展:<br>–with-mysql=mysqlnd<br>–with-mysqli=mysqlnd<br>–with-pdo-mysql=mysqlnd</p>
<p>–with-mysql=/usr/bin/mysql_config <br>–with-mysqli=mysqlnd <br>–with-pdo-mysql=mysqlnd</p>
<p>配置 PHP<br>在之前编译的源码包中,找到 php.ini-production,复制到/usr/local/php下,并改名为php.ini:</p>
<div class="cnblogs_code">
<pre>$ cp php.ini-production /usr/<span style="color: rgba(0, 0, 255, 1)">local</span>/php/php.ini</pre>
</div>
<p><br>编译安装 PHP 扩展<br>PHP 安装后,如果还需要安装扩展,可以先看看 PHP 源码的 ext 目录中有没有,有的话直接编译即可。</p>
<p>PHP 默认安装的扩展<br>执行 ./configure 命令时,如果不指定任何扩展,PHP 会默认安装如下扩展,其他的就需要自己制定了,例如 GD、MySQL、curl、mbstring、bz2、calendar、exif、ftp 等:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> /tdata/soft/php/php-7.2.12/bin/php -m</span>
<span style="color: rgba(0, 0, 0, 1)">
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
</span></pre>
</div>
<p> </p>
<p>CentOS 通过 yum 命令安装的 PHP:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> php -m</span>
<span style="color: rgba(0, 0, 0, 1)">
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
</span><span style="color: rgba(0, 0, 255, 1)">readline</span><span style="color: rgba(0, 0, 0, 1)">
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
swoole
tokenizer
xml
zip
zlib
</span></pre>
</div>
<p> </p>
<p>--------------------- <br>作者:kikajack <br>来源:CSDN <br>原文:https://blog.csdn.net/kikajack/article/details/84727142 <br>版权声明:本文为博主原创文章,转载请附上博文链接!</p><br><br>
来源:https://www.cnblogs.com/felix-h/p/11056301.html
頁:
[1]