Centos7 php 5.6.19编译安装
0x01 前言
在php官网下载php-5.6.19.tar.gz源代码(php7虽然说性能提升很大,但是小菜菜还是先用着这个先吧),解压后根目录有个INSTALL文件,里面有安装教程了,目录如下:
Installing PHP
     __________________________________________________________________
* General Installation Considerations
     * Installation on Unix systems
          + Apache 1.3.x on Unix systems
          + Apache 2.x on Unix systems
          + Lighttpd 1.4 on Unix systems
          + Sun, iPlanet and Netscape servers on Sun Solaris
          + CGI and command line setups
          + HP-UX specific installation notes
          + OpenBSD installation notes
          + Solaris specific installation tips
          + Debian GNU/Linux installation notes
     * Installation on Mac OS X
          + Using Packages
          + Using the bundled PHP
          + Compiling PHP on Mac OS X
     * Installation of PECL extensions
          + Introduction to PECL Installations
          + Downloading PECL extensions
          + Installing a PHP extension on Windows
          + Compiling shared PECL extensions with the pecl command
          + Compiling shared PECL extensions with phpize
          + php-config
          + Compiling PECL extensions statically into PHP
     * Problems?
          + Read the FAQ
          + Other problems
          + Bug reports
     * Runtime Configuration
          + The configuration file
          + .user.ini files
          + Where a configuration setting may be set
          + How to change configuration settings
     * Installation
     __________________________________________________________________
对应你当前的系统,查看相应的内容,当前我的环境应该参考Apache 2.x on Unix systems这部分
Apache 2.x on Unix systems
This section contains notes and hints specific to Apache 2.x installs
   of PHP on Unix systems.
   Warning
We  do  not recommend using a threaded MPM in production with Apache 2.
   Use  the prefork MPM, which is the default MPM with Apache 2.0 and 2.2.
   For  information  on  why,  read the related FAQ entry on using Apache2
   with a threaded MPM
The   » Apache  Documentation  is  the  most  authoritative  source  of
   information   on   the   Apache  2.x  server.  More  information  about
   installation options for Apache may be found there.
The  most  recent  version  of  Apache HTTP Server may be obtained from
   » Apache  download  site,  and  a  fitting  PHP  version from the above
   mentioned  places.  This  quick  guide  covers  only  the basics to get
   started with Apache 2.x and PHP. For more information read the » Apache
   Documentation.  The  version  numbers have been omitted here, to ensure
   the  instructions are not incorrect. In the examples below, 'NN' should
   be replaced with the specific version of Apache being used.
There  are  currently two versions of Apache 2.x - there's 2.0 and 2.2.
   While  there  are various reasons for choosing each, 2.2 is the current
   latest  version,  and  the  one  that is recommended, if that option is
   available  to  you. However, the instructions here will work for either
   2.0 or 2.2.
    1. Obtain  the  Apache HTTP server from the location listed above, and
       unpack it:
gzip -d httpd-2_x_NN.tar.gz
tar -xf httpd-2_x_NN.tar
2. Likewise, obtain and unpack the PHP source:
gunzip php-NN.tar.gz
tar -xf php-NN.tar
3. Build  and install Apache. Consult the Apache install documentation
       for more details on building Apache.
cd httpd-2_x_NN
./configure --enable-so
make
make install
4. Now  you  have  Apache  2.x.NN  available under /usr/local/apache2,
       configured  with  loadable  module  support  and  the  standard MPM
       prefork.  To  test  the  installation use your normal procedure for
       starting the Apache server, e.g.:
/usr/local/apache2/bin/apachectl start
and stop the server to go on with the configuration for PHP:
/usr/local/apache2/bin/apachectl stop
5. Now,  configure and build PHP. This is where you customize PHP with       这里开始就是php的安装,上面说的都是apache
       various  options,  like  which  extensions  will  be  enabled.  Run
       ./configure  --help for a list of available options. In our example
       we'll do a simple configure with Apache 2 and MySQL support.
       If  you  built  Apache  from  source, as described above, the below
       example  will match your path for apxs, but if you installed Apache
       some other way, you'll need to adjust the path to apxs accordingly.
       Note that some distros may rename apxs to apxs2.
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql
make
make install
If you decide to change your configure options after installation,
       you'll  need to re-run the configure, make, and make install steps.         如果需要改变设置就重新安装
       You  only need to restart apache for the new module to take effect.
       A recompile of Apache is not needed.
       Note  that  unless told otherwise, 'make install' will also install
       PEAR,  various  PHP  tools such as phpize, install the PHP CLI, and
       more.
    6. Setup your php.ini
cp php.ini-development /usr/local/lib/php.ini
You  may  edit  your  .ini  file  to set PHP options. If you prefer
       having php.ini in another location, use
       --with-config-file-path=/some/path in step 5.                                        自定义配置文件路径
       If  you  instead  choose php.ini-production, be certain to read the
       list of changes within, as they affect how PHP behaves.
    7. Edit  your httpd.conf to load the PHP module. The path on the right
       hand side of the LoadModule statement must point to the path of the
       PHP  module  on  your  system. The make install from above may have
       already added this for you, but be sure to check.
LoadModule php5_module modules/libphp5.so                               在httpd配置文件中添加语句加载php模块
    8. Tell  Apache to parse certain extensions as PHP. For example, let's
       have  Apache  parse  .php  files  as PHP. Instead of only using the
       Apache  AddType  directive,  we want to avoid potentially dangerous   只使用AddType指令具有潜在危险
       uploads  and  created  files  such  as  exploit.php.jpg  from being
       executed   as   PHP.   Using  this  example,  you  could  have  any
       extension(s)  parse as PHP by simply adding them. We'll add .php to
       demonstrate.
<FilesMatch \.php$>                                 正则表达式,匹配所有“.php”结尾的文件名
    SetHandler application/x-httpd-php
</FilesMatch>
       Or,  if we wanted to allow .php, .php2, .php3, .php4, .php5, .php6,
       and  .phtml files to be executed as PHP, but nothing else, we'd use
       this:
<FilesMatch "\.ph(p[2-6]?|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
       And  to  allow  .phps files to be handled by the php source filter,
       and displayed as syntax-highlighted source code, use this:
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
       mod_rewrite  may  be  used  To  allow any arbitrary .php file to be
       displayed  as  syntax-highlighted  source  code,  without having to
       rename or copy it to a .phps file:
RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
       The  php source filter should not be enabled on production systems,
       where it may expose confidential or otherwise sensitive information
       embedded in source code.
    9. Use your normal procedure for starting the Apache server, e.g.:
/usr/local/apache2/bin/apachectl start
OR
service httpd restart
Following  the  steps  above you will have a running Apache2 web server
   with  support  for  PHP as a SAPI module. Of course there are many more
   configuration  options  available  Apache and PHP. For more information
   type ./configure --help in the corresponding source tree.
Apache  may  be built multithreaded by selecting the worker MPM, rather
   than  the  standard  prefork MPM, when Apache is built. This is done by
   adding  the  following option to the argument passed to ./configure, in
   step 3 above:
   --with-mpm=worker
This should not be undertaken without being aware of the consequences
   of  this  decision,  and  having  at  least a fair understanding of the
   implications.   The   Apache   documentation   regarding  » MPM-Modules
   discusses MPMs in a great deal more detail.
Note:
The Apache MultiViews FAQ discusses using multiviews with PHP.
Note:
To  build  a multithreaded version of Apache, the target system must
     support  threads.  In  this  case,  PHP  should  also  be built with
     experimental Zend Thread Safety (ZTS). Under this configuration, not
     all  extensions will be available. The recommended setup is to build
     Apache with the default prefork MPM-Module.
     __________________________________________________________________
0x02 php编译选项
具体参数含义可以用./configure --help来查看。源自 http://blog.csdn.net/niluchen/article/details/41513217,还有一个官方的文档参考http://php.net/manual/zh/configure.about.php
列表如下(部分参数未得到解释):
# 指定 php 安装目录
--prefix=/usr/local/php
# 指定php.ini位置
--with-config-file-path=/usr/local/php/etc
# mysql安装目录,对mysql的支持
--with-mysql=/usr/local/mysql
mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
--with-mysqli=/usr/local/mysql/bin/mysql_config
整合 apache,apxs功能是使用mod_so中的LoadModule指令,加载指定模块到 apache,要求 apache 要打开SO模块
--with-apxs2=/usr/local/apache/bin/apxs
# 选项指令 --with-iconv-dir 用于 PHP 编译时指定 iconv 在系统里的路径,否则会扫描默认路径。
--with-iconv-dir=/usr/local
--with-freetype-dir 打开对freetype字体库的支持
--with-jpeg-dir 打开对jpeg图片的支持
--with-png-dir 打开对png图片的支持
--with-zlib-dir 打开zlib库的支持,用于http压缩传输
--with-libxml-dir 打开libxml2库的支持
--disable-rpath 关闭额外的运行库文件
--enable-bcmath 打开图片大小调整,用到zabbix监控的时候用到了这个模块
--enable-shmop --enable-sysvsem 这样就使得你的PHP系统可以处理相关的IPC函数了。
--enable-inline-optimization 优化线程
--with-curl 打开curl浏览工具的支持
--with-curlwrappers 运用curl工具打开url流
--enable-mbregex
--enable-fpm 打上PHP-fpm 补丁后才有这个参数,CGI方式安装的启动程序
--enable-mbstring 多字节,字符串的支持
--with-mcrypt mcrypt算法扩展
--with-mhash mhash算法扩展
--with-gd 打开gd库的支持
--enable-gd-native-ttf 支持TrueType字符串函数库
--with-openssl openssl的支持,加密传输https时用到的
--enable-pcntl freeTDS需要用到的,可能是链接mssql 才用到
--enable-sockets 打开 sockets 支持
--with-xmlrpc 打开xml-rpc的c语言
--enable-zip 打开对zip的支持
--enable-ftp 打开ftp的支持
--with-bz2 打开对bz2文件的支持
--without-iconv 关闭iconv函数,字符集间的转换
--with-ttf 打开freetype1.*的支持,可以不加了
--with-xsl 打开XSLT 文件支持,扩展了libXML2库 ,需要libxslt软件
--with-gettext 打开gnu 的gettext 支持,编码库用到
--with-pear 打开pear命令的支持,PHP扩展用的
--enable-calendar 打开日历扩展功能
--enable-exif 图片的元数据支持
--enable-magic-quotes 魔术引用的支持
--disable-debug 关闭调试模式
--with-mime-magic=/usr/share/file/magic.mime 魔术头文件位置
CGI方式安装才用的参数
--enable-fastCGI 支持fastcgi方式启动PHP
--enable-force-CGI-redirect 重定向方式启动PHP
--with-ncurses 支持ncurses 屏幕绘制以及基于文本终端的图形互动功能的动态库
--with-gmp 应该是支持一种规范
--enable-dbase 建立DBA 作为共享模块
--with-pcre-dir=/usr/local/bin/pcre-config perl的正则库案安装位置
--disable-dmalloc
--with-gdbm dba的gdbm支持
--enable-sigchild
--enable-sysvshm
--enable-zend-multibyte 支持zend的多字节
--enable-wddx
--enable-soap
0x03 安装过程
[root@localhost php-5.6.19]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql/ --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --enable-sockets --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --enable-maintainer-zts
1、按照上面选项编译报错
checking libxml2 install dir... yes
checking for xml2-config path... 
configure: error: xml2-config not found. Please check your libxml2 installation.
显示内容是xml2-config找不到,发现libxml2已经安装但是安装文件没有xml2-config,安装libxml2-devel后
[root@localhost php-5.6.19]# rpm -ql libxml2-devel
/usr/bin/xml2-config
……
2、继续编译,报错如下
checking for BZip2 support... yes
checking for BZip2 in default path... not found
configure: error: Please reinstall the BZip2 distribution
安装bzip2-devel
[root@localhost php-5.6.19]# yum install bzip2-devel
3、继续编译,报错如下
checking for specified location of the MySQL UNIX socket... no
configure: error: Cannot find libmysqlclient_r under /usr/local/mysql/.
Note that the MySQL client library is not bundled anymore!
对于这个问题有个比较久远的帖子 http://blog.chinaunix.net/uid-10697776-id-2935536.html有提及,这个方法我没有测试,另一种说就是因为64位的linux的lib路径有问题加上--with-libdir=lib的编译选项,这个试过加上也是同样的编译报错。
最终找到一个可行的办法就是,编译之前,先处理一下mysql的库,默认查找libmysqlclient_r.so,可是mysql默认为libmysqlclient.so,内容完全一样,做个链接即可
# cd /usr/local/mysql/lib/mysql/ 
# ln -s libmysqlclient.so.15.0.0 libmysqlclient_r.so
最后成功解决,可以make了,视个人系统环境不同,可能编译出错也不同,其时就是少什么库,就安装什么,对于编译错误找到一个总结比较好的帖子http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html
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.                            |
+--------------------------------------------------------------------+
Thank you for using PHP.
config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands
make 完成之后,信息提示如下:
Generating phar.php
Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.
clicommand.inc
directorytreeiterator.inc
invertedregexiterator.inc
directorygraphiterator.inc
pharcommand.inc
phar.inc
Build complete.
Don't forget to run 'make test'.
最终make install 安装完成
[root@localhost php-5.6.19]# make install
Installing PHP SAPI module:       apache2handler
/usr/local/apache2/build/instdso.sh SH_LIBTOOL='/usr/local/apr/build-1/libtool' libphp5.la /usr/local/apache2/modules
/usr/local/apr/build-1/libtool --mode=install install libphp5.la /usr/local/apache2/modules/
libtool: install: install .libs/libphp5.so /usr/local/apache2/modules/libphp5.so
libtool: install: install .libs/libphp5.lai /usr/local/apache2/modules/libphp5.la
libtool: install: warning: remember to run `libtool --finish /usr/local/src/php-5.6.19/libs'
chmod 755 /usr/local/apache2/modules/libphp5.so
[activating module `php5' in /etc/httpd/httpd.conf]
Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-zts-20131226/
Installing PHP CLI binary:        /usr/local/php/bin/
Installing PHP CLI man page:      /usr/local/php/php/man/man1/
Installing PHP CGI binary:        /usr/local/php/bin/
Installing PHP CGI man page:      /usr/local/php/php/man/man1/
Installing build environment:     /usr/local/php/lib/php/build/
Installing header files:           /usr/local/php/include/php/
Installing helper programs:       /usr/local/php/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /usr/local/php/lib/php/
[PEAR] Archive_Tar    - installed: 1.4.0
[PEAR] Console_Getopt - installed: 1.4.1
[PEAR] Structures_Graph- installed: 1.1.1
[PEAR] XML_Util       - installed: 1.3.0
[PEAR] PEAR           - installed: 1.10.1
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
/usr/local/src/php-5.6.19/build/shtool install -c ext/phar/phar.phar /usr/local/php/bin
ln -s -f phar.phar /usr/local/php/bin/phar
Installing PDO headers:           /usr/local/php/include/php/ext/pdo/
0x03 后续工作
查看apache配置文件,发现已经加载了php模块
LoadModule alias_module modules/mod_alias.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so
在apache安装目录下modules里面有php安装后新增的libphp5.so
[root@localhost php-5.6.19]# ll /usr/local/apache2/modules/libphp5.so 
-rwxr-xr-x. 1 root root 34524225 3月   7 00:12 /usr/local/apache2/modules/libphp5.so
以上即可说明php已经正常安装
1、在apache配置文件添加以下语句,实现php文件调用php模块解析
AddType application/x-httpd-php .php
2、复制php源码根目录下的配置文件到/etc
cp php.ini-production /etc/php.ini
至此php已经可以正常工作了
0x04 测试
因为apache编译安装的网页文件目录为/usr/local/apache2/htdocs
在其中新增php文件测试能否正常解析,新增经典测试语句
[root@localhost php-5.6.19]# cat /usr/local/apache2/htdocs/phpinfo.php 
<?php
phpinfo();
?>

测试正常
Centos7 php 5.6.19编译安装的更多相关文章
- CentOS6.5内 MySQL5.7.19编译安装
		作为博主这样的Linux菜鸟,CentOS下最喜欢的就是yum安装.但有时候因为特殊情况(例如被墙等),某些软件可能没办法直接通过yum来安装,这时候我们可以使用编译安装或者直接二进制文件安装. 本博 ... 
- centos7下比特币源码编译安装
		今天我们介绍比特币的源码安装过程,是利用编译安装的 首先安装依赖 1 yum install -y boost-devel qt-devel protobuf-devel qrencode-devel ... 
- linux下Mysql  8.0.19 编译安装
		1 前言 linux下安装MySQL的方式有很多种,包括以仓库的方式安装(yum,apt,zypper),以包的方式安装(rpm,deb),以docker方式安装,从压缩包解压安装,从源码编译安装,这 ... 
- Centos7 Apache 2.4.18编译安装
		安装环境:CentOS Linux release 7.0.1406 (Core) 0x01 到官网http://httpd.apache.org/download.cgi#apache24下载apa ... 
- centos7下vim8.1的编译安装教程
		之前安装YouCompleteMe的时候遇到vim版本不兼容的问题,看网上说是需要将vim版本提升到8.0及以上,然后就开始安装最新版本的vim,安装过程中的遇到了不少问题主要集中在配置方面和缺少插件 ... 
- CentOS7  Hadoop 3.1.0  编译安装
		1.配置环境变量 JAVA_HOME=/jdk1..0_131 ANT_HOME=/apache-ant- MAVEN_HOME=/apache-maven- FINDBUGS_HOME=/findb ... 
- Centos7.4上Apache(http)编译安装
		前提:1.这个centos操作系统能上网 2.yum 安装apr,apr-util,zlib-devel,groupinstall Development Tools,gcc 1.在apache的 ... 
- 在 CentOS7最小化 下的编译安装:Nginx 1.5.2 + PHP 5.5.7 + MySQL 5.6.10
		1.安装Nginx: 安装包目录 mkdir -p /Data/tgzcd /Data/tgz 安装编译依赖 yum install wget yum install pcre yum install ... 
- Centos7 搭建LAMP环境(编译安装)
		1.查看系统版本 [niemx@localhost ~]$ cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) 2.安装软件准备 ... 
随机推荐
- OpenStack nova VM migration (live and cold) call flow
			OpenStack nova compute supports two flavors of Virtual Machine (VM) migration: Cold migration -- mig ... 
- Hadoop on Yarn 各组件详细原理
			运行在独立的节点上的ResourceManager和NodeManager一起组成了yarn的核心,构建了整个平台.ApplicationMaster和相应的container一起组成了一个Yarn的 ... 
- [Tex学习笔记]一个数学公式
			\begin{equation*} \begin{aligned} &\quad\int |\nabla(T_1-\overline{T})^+|^2 \rm dx-\int \frac{3m ... 
- gcc-常见命令和错误
			一:编译过程的4个阶段:预处理,编译,汇编,链接; 1:最常用的方式 gcc hello.c -o hello 2:预处理后停止编译 gcc -E hello.c -o hello.i(.i通常为 ... 
- South - 在 Django 中 Migrate Database
			Web 开发避免不了经常修改表结构,手工修改表结构不仅容易出错,而且涉及到多人协作开发时,这么土的做法很不经济. Django 的第三方 app South 就是专门做数据库表结构自动迁移的.Jaco ... 
- Vi中的^M问题
			一般情况下,windows下编辑过的文件放到Linux下行尾会多出一个^M符号 1.可以通过dos2unix 命令作用与文件消除 2.或者在VI内通过 只需要在vi/vim 中输入命令:%s/\r// ... 
- brew安装
			p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #454545 } span.s1 { font: 12. ... 
- 【EF学习笔记08】----------加载关联表的数据 显式加载
			显式加载 讲解之前,先来看一下我们的数据库结构:班级表 学生表 加载从表集合类型 //显示加载 Console.WriteLine("=========查询集合===========&quo ... 
- 开源文档管理工具Joomla的网站安装
			1.配置PHP开发环境(Apache.PHP.MySQL) 2.安装Joomla网站: 1. 下载安装包 http://www.joomla.org/download.html 2. 登陆Jo ... 
- Linux网络常用指令
			5.1 网络参数设定使用的指令 ifconfig 查询 设定网络卡与 IP 网域等相关参数: ifup, ifdown 这两个档案是 script,透过更简单的方式来启动网络接口: route 查 ... 
