本文发布于Cylon的收藏册,转载请著名原文链接~


下载PHP

  • 台湾镜像站:http://ftp.ntu.edu.tw/php/distributions/
  • 搜狐镜像站:http://mirrors.sohu.com/php/
  • 阿里镜像:http://mirrors.aliyun.com/
  • 官网:http://php.net/downloads.php

检查PHP所需的lib库

rpm -qa \
zlib-devel \
libxml2-devel \
libjpeg-devel \
libjpeg-turbo-devel \
libiconv-devel \
freetype-devel \
libpng-devel \
gd-devel \
libcurl-devel \
libxslt-devel

提示:libjpeg-turbo-devel是早期libjpeg-devel的新名字,libcurl-devel是早期curl的新名字。


每个lib一般都会存在对应的以“-devel”命名的包,安装lib对应的-devel包后,对应的lib包就会自动安装好,例如安装gd-devel时就会安装gd。

这些lib库不是必须安装的,但是目前的企业环境下一般都需要安装。否则,PHP程序运行时会出现问题,例如验证码无法显示等。

执行下面命令安装相关的lib软件包:

yum install -y \
zlib-devel \
libxml2-devel \
libjpeg-devel \
libjpeg-turbo-devel \
freetype-devel \
libpng-devel \
gd-devel \
curl-devel \
libxslt-devel \
bzip2-devel \
gmp-devel \
readline-devel

提示:从安装上看,仅有libiconv-devel这个包没有安装,因为默认的yum源没有此包。可以一个一个地yum安装或通过源文件手工编译安装(这样效率慢)


安装libiconv-devel

libiconv下载地址:http://ftp.gnu.org/pub/gnu/libiconv/

可以将libiconv制作成rpm包,批量安装时,可放至本地yum源内

./configure --prefix=/usr/local/libiconv
make & make install

安装epel源

可以安装redhat官方yum源里没有的软件,epel源和官方源不冲突

阿里镜像 http://mirrors.aliyun.com/

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

Centos7

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装libmcrypt-devel

这是一个使用动态加载的模块化的libmcrypt。libmcrypt对于在程序运行时添加/移除算法是有用的。limbcrypt-nm目前不再被官方支持,其软件地址为http://mcrypt.hellug.gr/lib/,编译PHP的过程中,libmcrypt库不是必须要安装的包。

yum install libmcrypt-devel -y
# 安装成功后
rpm -qa libmcrypt-devel
libmcrypt-devel-5.8-9.el6.x86_64

安装mhash加密扩展库

mhash是基于离散数学原理不可逆向的PHP加密方式扩展库,其在默认情况下不会开启。mhash可以用于创建校验数值、消息摘要、消息认证码,以及无需原文的关键信息保存(如密码)等。它为PHP提供了多种散列算法,如MD5、SHA1、GOST等。可以通过MHASH_hashname()查看其支持的算法有哪些。

yum install mhash -y

安装mcrypt

PHP程序员在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密扩展库mcrypt和mhash。 其中,mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以将密文还原。 可以说,mcrypt是PHP里面重要的加密支持扩展库,该库在默认情况下不开启。

yum install mcrypt -y
yum install mcrypt mhash libmcrypt-devel -y

问:如果在不能联网的状态下怎么配置PHP环境? 答:在yum时,可以在yum配置文件中设置安装后不删除包 vi /etc/yum.conf

编译PHP

编译PHP参数详解

./configure 
--prefix=/app/php-7.  # <==指定PHP的安装目录
--with-curl 	 			    # <==打开PHP curl扩展
--with-curlwrappers 		# <==curl工具打开url流的测试版,不建议开启
--with-freetype-dir 		# <== 打开freetype字体库支持
--with-gd 					    # <==打开PHP GD库依赖
--with-png-dir 			    # <==
--with-jpeg-dir 			  # <==
--enable-gd-native-ttf  # <==打开PHP GD库ttf
--with-gettext 			    # <==打开PHP gettext库,多国语言时需要
--with-iconv-dir=/usr/local/lib 	# <==打开PHP iconv字符集转换格式时需要
--with-kerberos 			  # <==PHP的一种加密方式 DES
--with-libdir=lib64 		# <==默认找/usr/lib下。64位需指定路径
--with-libxml-dir 			# <==打开libxml2库的支持
--enable-xml
--enable-safe-mode 		  # <==打开安全模式
# 需要指定mysql的安装路径,安装PHP需要的MySQL相关内容。
# 当然如果没有MySQL软件包,也可以不单独安装,
# 这样的情况可使用--with-mysql=mysqlnd替代--with-mysql=/app/mysql
# 因为PHP软件里面已经自带连接MySQL的客户端工具。PHP7遗弃
--with-mysql=/app/mysql/
--with-mysqli=/app/mysql/bin/mysql_config 		# <==使用PHP mysqli扩展
--with-pdo-mysql 			  # <==使用pdo mysql扩展 
--with-pdo-sqlite 			# <==使用pdo sqlite扩展
--with-openssl 			    # <==https需要
--with-pcre-regex 			# <==使用pcre正则	
--with-pear 				    # <==安装pear,一般没啥用	
--with-xmlrpc 				  # <==打开xml-rpc的c语言
--enable-libxml 
--disable-rpath 			  # <==关闭额外的运行库文件
--with-xsl 					    # <==打开XSLT文件支持,扩展libXML2库,需要libxslt软件
--with-zlib 				    # <==打开zlib库的支持,用于http压缩传输
--enable-zip 				    # <==打开对zip的支持
--enable-bcmath 			  # <==打开图片大小调整,用zabbix监控时会用到该模块
--enable-inline-optimization 	# <==优化线程
--enable-mbregex 			  # <==
--enable-mbstring 			# <==支持mbstring
--with-mcrypt 				  # <==编码函数库
--with-mhash 				    # <==mhash算法的扩展
--enable-opcache 			  # <==php自带的加速模块php5.5
--enable-pcntl 			    # <==freeTDS需要用到,可能是链接mssql
--enable-shmop 			    # <==
--enable-soap 				  # <==soap模块的扩展
--enable-sockets 		 	  # <==打开sockets支持
--enable-sysvsem 		 	  # <==使用sysv信号机制,则打开此选项
--enable-short-tags 		# <==开启短标签
--with-fpm-user=www 
--with-fpm-group=www 
--enable-fpm 				    # <==表示激活PHP-FPM方式服务,即FactCGI方式运行PHP服务
--with-apxs2=/app/apache/bin/apxs # <==使httpd支持PHP
--enable-json
--with-bz2
--enable-filter
--enable-session

公共编译参数

./configure \
--prefix=/app/php-5.5.38 \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-png-dir \
--with-jpeg-dir \
--enable-gd-native-ttf \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libxml-dir \
--enable-xml \
--enable-safe-mode \
--with-mysql=/app/mysql/ \
--with-mysqli=/app/mysql/bin/mysql_config \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-openssl \
--with-pcre-regex \
--with-pear \
--with-xmlrpc \
--enable-libxml \
--disable-rpath \
--with-xsl \
--with-zlib \
--enable-zip \
--enable-bcmath \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-mhash \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-short-tags \
--enable-json \
--with-bz2 \
--enable-filter \
--enable-session \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-fpm \
--with-apxs2=/app/apache/bin/apxs
configure: error: Cannot find libmysqlclient under /app/mysql/.

解决:

ln -s /app/mysql/lib /app/mysql/lib64
ln -s /app/mysql/lib/libmysqlclient.so.15./app/mysql/lib64/libmysqlclient_r.so

nginx 5.3.27

./configure \
--prefix=/app/php-5.3.27 \
--with-mysql=/app/mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-ftp

注:上述每行结尾的换行符反斜线(\)之后不能再有任何字符包括空格


apache 5.3

./configure \
--prefix=/app/php-5.3.27 \
--with-mysql=/app/mysql \
--with-iconv-dir=/usr/local/libiconv \
--with-apxs2=/app/apache/bin/apxs \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-safe-mode \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--with-curlwrappers \
--enable-mbregex \
--enable-mbstring \
--with-mcrypt \
--with-gd \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--enable-short-tags \
--enable-zend-multibyte \
--enable-static \
--with-xsl \
--enable-ftp

配置php.ini

/home/tools/php-5.3.27/php.ini-production
/home/tools/php-5.3.27/php.ini-development
cp /home/tools/php-5.3.27/php.ini-production /app/php/lib/php.ini

开发环境更多的是开启日志、调试信息,而生产环境都是关闭状态。

配置PHP(FastCGI)的配置文件php-fpm.conf

  • PHP5位置:/app/php/etc/
  • PHP7位置:/app/php/etc/和 php-fpm.d
cp php-fpm.conf.default php-fpm.conf # <==PHP5只需要改它即可
php-fpm.d/www.conf.default # <==PHP7还需要改这个文件

3 配置Nginx支持PHP程序

# 这里如果配置不好,很容易出现404错误,
# 此处也可以吧两个localtion里的root html/blog合成一个 
 location  ~.*\.(php|php5)?$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi.conf;
  	index  index.html index.htm;
 }  # <==可将所有location里的root提出到外面。

image-20221025225413522

原因:local中没有路径,要么加路径,要么提出最外面

image-20221025225422603

4 配置apache支持PHP

默认生成

$ grep libphp5 /app/apache/conf/httpd.conf
LoadModule php5_module        modules/libphp5.so
$ ll /app/apache/modules/
总用量 29620
-rw-r--r--. 1 root root     94月   8 03:02 httpd.exp
-rwxr-xr-x. 1 root root 303164月  21 01:46 libphp5.so

修改311行

AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps

更改daemon,更改用户是为了安全考虑

image-20221025225445542

打不开解决方法:

$ lsof -i:80
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd    5  root    4u  IPv6  69      TCP *:http (LISTEN)
httpd   60apache    4u  IPv6  69      TCP *:http (LISTEN)
$ /app/apache/bin/apachectl restart

image-20221025225459373

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2016/06/php-installtation/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。