关于php 编译安装 遇到的坑总结
关于php 编译安装 遇到的坑总结
每一次记录都是成长的过程
因为公司服务器问题,我们临时打算将测试环境的php 环境 先升级到 7.0 左右 ,然后我就接下了这个坑。
我的系统环境:
1 | DISTRIB_ID=Ubuntu |
话不多说,首先贴出我这次遇到的问题
- 问题一:
1 | configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution |
- 问题二:
1
E: Unable to locate package libxslt1-devel
- 问题三:
1
php 7.0 make: *** [ext/gd/libgd/gd_png.lo] error 1
- 问题四:
1
2collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
具体问题 我就不过多阐述了,上述问题也不是最终的问题指向,其他因为扩展的问题,我也不多说了。总之一句话,直接升级除了坑就是麻烦
老系统建议直接升级
- 问题一、问题二
这个问题其实很简单,但是对于 一个 浅度的 Ubuntu 用户来说,其实这是致命的一个问题
看到这个问题 我们可以直接去 用系统的命令去安装,可是 ubuntu 使用 apt-get install 的时候 就会出现第二个问题。
发生这种情况的时候,我们有两个解决方案
- 直接去 google 上面 搜索对应的扩展包,执行编译 安装到系统
- 搜索大佬的解决方案
本着能偷懒就偷懒的性格,我选择了第二个方案
然后 我就看到各种 关于 ubuntu 的系统 search package 的解决方案
有 提示 让我直接 apt-get update 的。(公司服务器 阿里云)
当我直接 更新后,第二个问题基本没有解决,而且,还更严重了,直接 就是 对应的 libgd 的扩展 全部都找不到了
这让我如何是好啊。
1 | sudo apt-get install libbz2-dev libcurl4-gnutls-dev libssl-dev libc-client2007e libc-client2007e-dev libcurl4-openssl-dev libpq-dev libxslt1-dev libxpm-dev build-essential |
然后我发现 在 ubuntu 上 需要这样去找 你敢信 libbz2-dev libxslt1-dev 还有先后顺序
不过好在 问题 顺利解决了
魔鬼出在细节里
为了保证 有一个 良好的周六日 不会被公司的小伙伴们 用远程电话叫醒 这次安装环境 原先的环境 我并没有删除
然后 问题三 出现了 (原报错非常多,没有一一记录)
大致的问题就是 我使用的 gd_png 出现了不可知的意外错误
看到这里 我已经开始怀疑 php 关于gd 库的bug 是不是没有解决的问题了。熟练的上 php.net 搜索了一会儿 版本记录。发现这个问题已经被解决了。那就很奇怪,我这里的问题又是怎么发生的呢?
上面的 php 环境没有删除 划重点 <\-_-/>
仔细 看了看错误信息 因为 ./configure 已经通过了 现在是 make 失败 说明 php 不存在 bug 那么多半出在 扩展上
ext/gd/libgd/gd_png.c
我根据提示错误信息 找到了 对应文件 然后 搜索了自己的系统 发现存在多个 png.h 的文件
难道是 png.h 引用错误?
上面图片 请根据 自己系统中的文件 更换 绝对路径
发生了问题,多半都是基础知识的复习
当解决掉一大堆问题之后,我们终于来到了最后一步,看着终端不停的输出 我甚至在 make 后面 加上了 j4
然后就发生了第四个问题
这次的报错还是 gd 库的问题
无奈,我们已经排除了所有的答案,但是 这个错误很迷惑 因为它涉及到了 sapi 的问题 说明 已经进入了编译的后半段阶段,按道理来说 gd 库已经编译成功了,应该已经进入 其他阶段了,请看下面的示意图:
在安裝 PHP 到系统中时要是发生「undefined reference to libiconv_open’」之类的错误信息,那表示在「./configure 」沒抓好一些环境变数值。错误发生点在建立「-o sapi/cli/php」是出错,没給到要 link 的 iconv 函式库参数。 解决方法:编辑Makefile 大约77 行左右的地方: EXTRA_LIBS = ….. -lcrypt 在最后加上 -liconv,例如: EXTRA_LIBS = ….. -lcrypt -liconv 然后重新再次 make 即可。
或者用另一种办法
make ZEND_EXTRA_LIBS=’-liconv’
ln -s /usr/local/lib/libiconv.so.2 /usr/lib64/
记得先make clean一下
成功
1 | root@iZbp13psr6fb9tfovzicnmZ:/alidata/server/php-7.0.23# make install |
附属链接-帮助记录
软件包: libxslt1-dev (1.1.28-2.1ubuntu0.3 以及其他的) [security]
https://packages.ubuntu.com/xenial/libxslt1-dev
Ubuntu 16.04 编译安装Nginx-1.10.3、 PHP7.0.9、Redis3.0 扩展、Phalcon3.1 扩展、Swoole1.9.8 扩展、ssh2扩展(全程编译安装)
https://www.cnblogs.com/tinywan/p/6607395.html
下载必要软件包
- libxml2-2.6.30.tar.gz (一个xml c语言版的解析器)
ftp://ftp.gnome.org/pub/GNOME/sources/libxml2/2.6/libxml2-2.6.30.tar.gz - libmcrypt-2.5.8.tar.gz (php中mcrypt扩展,libmcrypt是加密算法扩展库)
http://prdownloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?use_mirror=peterhost - zlib-1.2.7.tar.gz (提供数据压缩用的函式库,为安装gd库做准备)
http://zlib.net/fossils/zlib-1.2.7.tar.gz - libpng-1.2.31.tar.gz (软件包包含 libpng 库.这些库被其他程式用于读写png文件,为安装gd库做准备)
ftp://194.54.81.27/services/customapache/libpng-1.2.31.tar.gz - jpegsrc.v6b.tar.gz (为安装gd库做准备)
http://www.ijg.org/files/jpegsrc.v6b.tar.gz - freetype-2.3.5.tar.gz (字体库文件,为GD库做准备) http://download.savannah.gnu.org/releases/freetype/freetype-2.3.5.tar.gz
- autoconf-2.61.tar.gz (是用来产生configure文件的。)
ftp://ftp.gnu.org/gnu/autoconf/autoconf-2.61.tar.gz - libgd-2.1.0.tar.gz(是php处理图形的扩展库)
https://bitbucket.org/libgd/gd-libgd/downloads/libgd-2.1.0.tar.gz - ngnix
http://nginx.org/download/nginx-1.0.15.tar.gz - pcre (一个正则表达式库,nginx伪静态可以用到)
http://ftp.exim.llorien.org/pcre/pcre-8.36.tar.gz - mysql
http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.6/mysql-5.6.27.tar.gz - php
http://cn2.php.net/get/php-5.6.9.tar.gz/from/a/mirror - cmake (编译mysql)
http://www.cmake.org/files/v3.2/cmake-3.2.2.tar.gz - zend guard (php脚本加密)
http://downloads.zend.com/guard/5.5.0/ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
下载apache
http://www.apache.org/dist/httpd/httpd-2.4.17.tar.gz
下载apr(Apache库文件)
http://mirror.bit.edu.cn/apache/apr/apr-1.5.2.tar.gz
下载apr-util(Apache库文件)
http://mirror.bit.edu.cn/apache/apr/apr-util-1.5.4.tar.gz
php7
https://github.com/php/php-src/archive/php-7.0.0.tar.gz
一些排错的坑
1 | make && makeinstall |
错误处理:
1 | make[1]: *** [nanohttp.lo] Error 1打开目录下的nanohttp.c,第1588行由 |
- cd /usr/local/src/libmcrypt-2.5.8
./configure –prefix=/usr/local/libmcrypt
出现错误:
checking for C++ compiler default output file name… configure: error: C++ compiler cannot create executablesSee `config.log’ for more details.
解决办法:
sudo apt-get install g++
make && make install
cd /usr/local/src/zlib-1.2.3
1 | ./configure --prefix=/usr/local/zlib |
cd /usr/local/src/libpng-1.2.3
1 | ./configure --prefix=/usr/local/libpng |
cd /usr/local/src/zlib-1.2.3
1 | ./configure --prefix=/usr/local/zlib |
在安装过程中会出现如下错误:
1 | error: zlib not installed |
解决的办法是:
1 | cd /usr/local/src/zlib-1.2.3 |
安装jpeg6库文件
1 | mkdir /usr/local/jpeg6 |
cd /usr/local/src/freetype-2.3.5
1 | ./configure --prefix=/usr/local/freetype |
cd /usr/local/src/autoconf-2.61
1 | ./configure make && makeinstall |
安装GD库
1 | cd /usr/local/src/libgd-2.1.0 |
以上子make过程中会出现如下错误:
1 | “gd_png.c:16:53: error: png.h: No such file or directory |
处理方法:
vi gd_png.c
将#include “png.h”
替换成:#include “/usr/local/libpng/include/png.h”
然后再make就可以了
注:include“”双引号里包含的是libpng安装的路径里的include文件夹里的png.h文件
cmake
1 | cd /usr/local/src |
pcre
1 | cd /usr/local/src |
安装apr
1 | cd /usr/local/src |
安装apr-util
1 | tar zxvf apr-util-1.4.1.tar.gz |
mysql
- groupadd mysql #添加mysql组
- useradd -g mysql mysql -s /bin/false #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统
- mkdir -p /data/mysql #创建MySQL数据库存放目录
- chown -R mysql:mysql /data/mysql #设置MySQL数据库目录权限
- mkdir -p /usr/local/mysql #创建MySQL安装目录
1
2
3
4cd /usr/local/src
tar zxvf mysql-5.5.27.tar.gz
cd mysql-5.5.27
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc #配置 - *出现如下错误:**
1
2
3
4
5
6
7CMake Error at cmake/readline.cmake:83 (MESSAGE):
...
cmake/readline.cmake:127 (FIND_CURSES)
cmake/readline.cmake:217 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:268 (MYSQL_CHECK_READLINE)
Configuring incomplete, errors occurred!
如回显所示,ubuntu下安装libncurses5-dev;redhat下安装ncurses-devel,并删除当前目录CMakeCache.txt(必须删除,否则报错依旧)并重新运行:$ cmake . - *解决:**
- remove CMakeCache.txt;
- yum install ncurses-devel 或 sudo apt-get install libncurses5-dev
- 重新运行cmake .
make && make install
1 | * 配置mysql: cd /usr/local/mysql |
安装apache2
1 | cd /usr/local/srctar -zvxf httpd-2.4.1.tar.gzcd httpd-2.4.1mkdir -p /usr/local/apache2 |
配置一:
1
./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-ssl --enable-ssl --enable-module=so --enable-rewrite --enable-cgid --enable-cgi --with-pcre=/usr/local/pcre
配置二:
1
2./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib=/usr/local/zlib --with-pcre=/usr/local/pcre --enable-so --enable-rewrite=shared --enable-deflate=shared --enable-expires=shared --enable-static-support
make && make install配置apache
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24/usr/local/apache2/bin/apachectl -k start #启动
vi /usr/local/apache2/conf/httpd.conf #编辑配置文件
找到:#ServerName www.example.com:80
修改为:ServerName www.osyunwei.com:80
找到:DirectoryIndex index.html
修改为:DirectoryIndex index.html index.php
找到:Options Indexes FollowSymLinks
修改为:Options FollowSymLinks #不显示目录结构
找到AllowOverride None
修改为:AllowOverride All #开启apache支持伪静态,有两处都做修改
LoadModule rewrite_module modules/mod_rewrite.so #取消前面的注释,开启apache支持伪静态
vi /etc/profile #添加apache服务系统环境变量
在最后添加下面这一行
export PATH=$PATH:/usr/local/apache2/bin
cp /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/httpd #把apache加入到系统启动
vi /etc/init.d/httpd #编辑文件
在#!/bin/sh下面添加以下两行
chkconfig:2345 10 90
descrption:Activates/Deactivates Apache Web Server
chown daemon.daemon -R /usr/local/apache2/htdocs #更改目录所有者
chmod 700 /usr/local/apache2/htdocs -R #更改apache网站目录权限
chkconfig httpd on #设置开机启动
/etc/init.d/httpd start
service httpd restart
nginx
- groupadd www
- useradd -g www -s /bin/false www
- cd /usr/local/src/nginx-1.2.6
1 | ./configure \ |
php7
1 | cd /usr/local/src |
make 过程中提示:
In file included from /usr/local/packages/php-5.6.9/ext/zip/lib/zip_add.c:37:/usr/local/packages/php-5.6.9/ext/zip/lib/zipint.h:118:2: error: #error unsupported size of off_tmake: *** [ext/zip/lib/zip_add.lo] Error 1
是因为 –with-zlib-dir=DIR –with-pcre-dir=DIR –with-libzip=DIR , zip都基于这三个模块,后来瞎试试发现装好后在./configure的参数加上这三个,然后成了……哎,php5.6以上才会发生这样的问题,以下貌似随便搞。
- 配置php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24cp php.ini-production /usr/local/php5/etc/php.ini #复制php配置文件到安装目录**
rm -rf /etc/php.ini #删除系统自带配置文件
ln -s /usr/local/php5/etc/php.ini /etc/php.ini #添加软链接
cp /usr/local/php5/etc/php-fpm.conf.default /usr/local/php5/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件
vi /usr/local/php5/etc/php-fpm.conf #编辑
user = www #设置php-fpm运行账号为www
group = www #设置php-fpm运行组为www
pid = run/php-fpm.pid #取消前面的分号
设置 php-fpm开机启动
cp /usr/local/src/php-5.3.16/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm #拷贝php-fpm到启动目录
chmod +x /etc/rc.d/init.d/php-fpm #添加执行权限
chkconfig php-fpm on #设置开机启动
vi /usr/local/php5/etc/php.ini #编辑配置文件
找到:;open_basedir =
修改为:open_basedir = .:/tmp/ #防止php木马跨站,重要!!
找到:disable_functions =
修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。
找到:;date.timezone =
修改为:date.timezone = PRC #设置时区
找到:expose_php = On
修改为:expose_php = OFF #禁止显示php版本的信息
找到:display_errors = On
修改为:display_errors = OFF #关闭错误提示
配置apache支持php
- vi /usr/local/apache2/conf/httpd.conf #编辑apache配置文件
- 在LoadModule php5_module modules/libphp5.so这一行下面添加、
- AddType application/x-httpd-php .php (注意:php .php这个点前面有一个空格)
- service httpd restart #重启apache
- service mysqld restart #重启mysql
- 测试篇
1 | cd /usr/local/apache2/htdocsvi index.php #输入下面内容 |
配置php支持Zend Guard
- 安装Zend Guard
1 | cd /usr/local/src |
ok!
安装Zend Guard
cd /usr/local/src
mkdir /usr/local/zend #建立Zend安装目录
tar xvfz ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz #解压安装文件
cp ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/ZendGuardLoader.so /usr/local/zend/ #拷贝文件到安装目录
vi /usr/local/php5/etc/php.ini #编辑文件
在最后位置添加以下内容
[Zend Guard]
zend_extension=/usr/local/zend/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=
ok!
Vimium has been updated to 1.41.x