博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 的源码编译安装
阅读量:4625 次
发布时间:2019-06-09

本文共 6271 字,大约阅读时间需要 20 分钟。

PHP 架构和安装扩展的几种方式

PHP 三大模块:

  1. SAPI:接受并处理请求。
  2. Zend Engine:PHP 的核心,负责分析 PHP 代码并转为 opcode,然后在 Zend VM 虚拟机上执行。
  3. PHP 功能函数及扩展层:实现各种功能,例如 curl 通信、连接 MySQL 等。

PHP 中,有以下几种方式添加扩展:

  • 把扩展编译进 PHP
  • 通过 或 Linux 发行版自带的 yum、apt-get 等命令安装,动态加载(Linux 下是 *.so 文件,Windows 下是 *.dll 文件)

相比通过 yum installapt-get 等各大 Linux 发行版自带的安装方向,源码编译安装略显复杂,但是灵活性也更高,比如要安装 PCNTL 等扩展,就只能通过源码编译安装。

注意:源码编译安装时,只会安装指定的扩展,而好多扩展是默认不安装的。对于常用的数据库驱动、OpenSSL、GD 库等都需要指定。如果安装后发现遗漏,可以重新编译,加上相应的参数可得到驱动程序(Linux 下是 *.so 文件),然后复制到 PHP 的扩展目录(一般是 /usr/local/php/include/php/ext)下,并在 php.ini 配置文件中开启扩展既可以。

通过 yum list php72w-* 可以在 CentOS 中查看可以使用命令安装的扩展。

获取 PHP 源码并解压

下载源码

官网下载

官网下载地址: ,在这个页面选择一个具体的版本,点击后会跳转到选择镜像的页面。我试了一下中国的两个镜像,都挂了,随便点了一个日本的镜像,结果下载成功了。。

Git 下载

可以在 GitHub 上的 或 下载源码。

解压

tar -zxvf mirror

配置并构建 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.12make && make install

执行 ./configure 命令时,可能会因为 Linux 尚未安装某些库而报错,安装即可解决。配置成功后会看到授权信息:

Generating filesconfigure: creating ./config.statuscreating main/internal_functions.ccreating 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]# lsacinclude.m4      configure.ac     libtool             modules                   README.NEW-OUTPUT-API             scriptsaclocal.m4        CONTRIBUTING.md  LICENSE             NEWS                      README.PARAMETER_PARSING_API      server-tests-config.phpappveyor          CREDITS          ltmain.sh           pear                      README.REDIST.BINS                server-tests.phpbuild             ext              main                php7.spec                 README.RELEASE_PROCESS            snapshotbuildconf         EXTENSIONS       makedist            php7.spec.in              README.SELF-CONTAINED-EXTENSIONS  stamp-h.inbuildconf.bat     footer           Makefile            php.gif                   README.STREAMS                    testsCODING_STANDARDS  generated_lists  Makefile.frag       php.ini-development       README.SUBMITTING_PATCH           travisconfig.guess      genfiles         Makefile.fragments  php.ini-production        README.TESTING                    TSRMconfig.log        header           Makefile.gcov       README.EXT_SKEL           README.TESTING2                   UPGRADINGconfig.nice       include          Makefile.global     README.GIT-RULES          README.UNIX-BUILD-SYSTEM          UPGRADING.INTERNALSconfig.status     INSTALL          Makefile.objects    README.input_filter       README.WIN32-BUILD-SYSTEM         vcscleanconfig.sub        install-sh       missing             README.MAILINGLIST_RULES  run-tests.php                     win32configure         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    xmlrpcbz2         dom                 ftp      interbase  mysqlnd  pdo           pdo_sqlite  reflection  sockets   sysvshm    xmlwritercalendar    enchant             gd       intl       oci8     pdo_dblib     pgsql       session     sodium    tidy       xslcom_dotnet  exif                gettext  json       odbc     pdo_firebird  phar        shmop       spl       tokenizer  zend_testctype       ext_skel            gmp      ldap       opcache  pdo_mysql     posix       simplexml   sqlite3   wddx       zipcurl        ext_skel_win32.php  hash     libxml     openssl  pdo_oci       pspell      skeleton    standard  xml        zlibdate        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-gdyum install php72w-gt 安装。
–with-pear:安装 PEAR 扩展。
–with-zip[=DIR]:提供 zip 支持,[DIR]是 ZZIPlib 库安装路径。建议通过 。

进程控制扩展:

–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]CorectypedatedomfileinfofilterhashiconvjsonlibxmlpcrePDOpdo_sqlitePharposixReflectionsessionSimpleXMLSPLsqlite3standardtokenizerxmlxmlreaderxmlwriter[Zend Modules]

CentOS 通过 yum 命令安装的 PHP:

[root@VM_139_38_centos gd]# php -m[PHP Modules]bz2calendarCorectypecurldateexiffileinfofilterftpgdgettextgmphashiconvjsonlibxmlmysqlimysqlndopensslpcntlpcrePDOpdo_mysqlpdo_sqlitePharreadlineReflectionsessionshmopSimpleXMLsocketsSPLsqlite3standardswooletokenizerxmlzipzlib[Zend Modules]

转载于:https://www.cnblogs.com/kika/p/10851532.html

你可能感兴趣的文章
Java基础50题test9—求完数
查看>>
【记忆法】心智绘图
查看>>
Jzoj4458 密钥破解——Pollard-rho
查看>>
Service类onStartCommand()返回值讲解.
查看>>
[Docker] Build a Simple Node.js Web Server with Docker
查看>>
npm安装
查看>>
git中如何合并某个指定文件?
查看>>
Pandas 中 SettingwithCopyWarning 的原理和解决方案
查看>>
Service bound(三)
查看>>
Android Camera拍照 压缩
查看>>
用OpenCV实现Otsu算法
查看>>
5.Spring+Struts+Hibernate配置文件整合
查看>>
Unable to create request (bad url?) 解决方案
查看>>
网络对抗技术_实验三_密码破解技术
查看>>
vue-状态管理
查看>>
css实现等高布局
查看>>
CH03_06.mxml 一个文本输入框复制到另外一个文本输入框
查看>>
malloc/free和new/delete
查看>>
spoj104 highways 生成树计数(矩阵树定理)
查看>>
nginx配置多个域名
查看>>