赞
踩
1.除了前面安装的一系列软件外,安装php时根据自己需要提前安装以下环境
yum install dnf
dnf install sqlite-devel
dnf -y install bzip2-devel
dnf -y install libcurl-devel
dnf -y install libicu-devel
dnf -y install libxslt-devel
dnf -y install libzip-devel
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
No package 'sqlite3' found
#那需要安装此生产包
yum install sqlite-devel
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:
Requested 'libzip >= 0.11' but version of libzip is 0.10.1
处理办法:
先移除现有的安装:yum remove libzip-devel libzip
下载对应的版本:wget https://libzip.org/download/libzip-1.3.2.tar.gz --no-check-certificate
解压tar包,然后进入解压包,执行配置脚本:./confugure
编译安装:make & make install
安装完成后,查询/usr/local/lib64目录下是否有pkgconfig目录,有的话执行命令export PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig/"指定PKG_CONFIG_PATH,然后重新执行切换php解压之后的文件夹,执行./configure脚本即可
2.oniguruma是一个处理正则表达式的库,安装php的过程中,mbstring的正则表达式处理功能对这个包有依赖性,所以我们要先安装这个库在/usr/local/src/目录下
#下载
[root@localhost src]# wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz
#解压
[root@localhost src]# tar xf oniguruma-6.9.4.tar.gz
#进入解压包
[root@localhost src]# cd oniguruma-6.9.4/
#配置
[root@localhost oniguruma-6.9.4]# ./autogen.sh && ./configure --prefix=/usr/local/oniguruma
#编译安装
[root@localhost oniguruma-6.9.4]# make && make install
./autogen.sh && ./configure --prefix=/usr
运行中如果报错:则需要安装以下类库Generating autotools files.
./autogen.sh: line 6: autoreconf: command not found
[root@localhost oniguruma-6.9.4]# yum -y install autoconf automake libtool libtool-ltdl
3.配置php并编译安装,在执行编译之前,需要配置此次编译和安装后的文件的存放位置以及安装的一些组件
#进入php解压包 [root@CncLucZK ~]# cd /usr/local/src/php-8.0.0 # #编译前配置 [root@localhost php-8.1.12]# ./configure --prefix=/usr/local/php/ \ #指定安装位置 --with-config-file-path=/usr/local/php/etc/ \ #设置php配置文件(php.ini)的存放位置, #一般来说安装php的时候只需要指定这两个路径即可,其他的则是指定php支持哪一些组件了 --with-apxs2=/usr/local/apache2/bin/apxs \ #调用apache2 --with-mysql=/usr/local/mysql/ \ #调用mysql --with-libxml=/usr/local/libxml2/ \ #调用libxml2库 --with-libjpeg=/usr/local/jpeg6/ \ #调用jpeg库 --with-libpng=/usr/local/libpng/ \ #调用libpng库 --with-freetype=/usr/local/freetype/ \ #调用freetype库 --with-mcrypt=/usr/local/libmcrypt/ \ #调用libmcrypt库 --with-mysqli=/usr/local/mysql/bin/mysql_config #增加MysqlLi功能 --with-pdo-mysql=/usr/local/mysql \ #启用mysql的pdo模块支持 --enable-soap \ #支持SOAP和Web Services --enable-mbstring=all \ #支持多字节字符串 --enable-mbregex \ #支持处理正则表达式 --enable-sockets \ #支持socket(套接字)通信 --enable-gd \ #支持gd库 #后续这些功能可以视情况追加,但需要提前安装好相应环境。其中问题最大的使用--with-openssl,在centos8上存在库调用问题 --with-curl --with-gettext --with-kerberos --with-libdir=lib64 --with-openssl --with-pdo-sqlite --with-pear --with-mhash --with-ldap-sasl --with-xsl --with-zlib --with-zip -with-bz2 --enable-fpm --enable-pdo --enable-bcmath --enable-opcache --enable-pcntl --enable-shmop --enable-sysvsem --enable-xml --enable-sysvsem --enable-cli --enable-intl --enable-calendar --enable-static --enable-mysqlnd --with-iconv #编译安装 [root@localhost php-8.1.12]# make && make install
- 编译安装PHP8存在问题1:
libtool: link: warning: library
/usr/lib64/libonig.la' was moved. libtool: link: warning: library
/usr/lib64/libonig.la’ was moved.
#报以上错误的原因在于: 类似于这种的la文件/usr/lib64/libonig.la中的最后的libdir='/usr/local/oniguruma/lib’位置有误导致,需要正确安装oniguruma库后在配置此文件
- 编译安装PHP8存在问题2:configure: error: iconv does not support errno
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz tar -zxvf libiconv-1.14.tar.gz cd libiconv-1.14 ./configure --prefix=/usr/local/libiconv make && make install # 添加 --with-iconv=/usr/local/libiconv 编译参数,重新 configure
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 在编译安装libiconv存在问题3:提示如下错误:stdio.h:1010:1: error: 'gets;undeclared here (not in a function)
解决方法:
使用命令找到该文件find / -name 'stdio.h’或 find / -name stdio.in.h这两个文件都可以,修改的是统一的内容,只是位置不同
/usr/local/src/libiconv-1.14/srclib/stdio.h #1010行
/usr/local/src/libiconv-1.14/srclib/stdio.in.h #698行
然后直接编辑1010行
vi +1010 /usr/local/src/libiconv-1.14/srclib/stdio.h
文件,注释这一行
然后在注释行下面添加下面三行#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16) _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif
- 1
- 2
- 3
- 4
- 5
保存退出后,直接编译安装 make && make install
编译安装PHP8存在问题4:在开启–enable-openssl时,centos8报如下错误:找了网上的方法都无法解决,所以暂时不开启次功能
/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/libk5crypto.so: undefined reference to
EVP_KDF_derive@OPENSSL_1_1_1b' /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/libk5crypto.so: undefined reference to
EVP_KDF_ctrl@OPENSSL_1_1_1b’
/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/libk5crypto.so: undefined reference toEVP_KDF_CTX_free@OPENSSL_1_1_1b' /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/libk5crypto.so: undefined reference to
EVP_KDF_CTX_new_id@OPENSSL_1_1_1b’
collect2: error: ld returned 1 exit status
make: *** [Makefile:308: sapi/cli/php] Error 1
4.查看php安装情况:切换到configure指定的安装路径的bin目录,执行版本查看:
[root@CncLucZK php-8.0.0]# /usr/local/php/bin/php -v
PHP 8.0.0 (cli) (built: Nov 4 2022 21:35:58) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
5.建立PHP配置文件
cp /usr/local/src/php-8.0.0/php.ini-production /usr/local/php/etc/php.ini
6.让apache可以识别“.php”扩展名
在安装 PHP 时,在 ./configure 命令中使用 --with-apxs2=/usr/local/apache2/bin/apxs 选项,已经把 PHP 作为模块被 apache 识别了。不过,apache 并不知道哪些扩展名的文件要调用 PHP 模块来解析(如果是 apache 不认识的扩展名,那么客户端在访问时,apache 不会尝试解析,而是提示客户端下载),所以我们需要修改 apache 的配置文件,让 apache 可以认识 PHP 脚本的扩展名。
让 apache 在遇到“.php”和“.phps”扩展名时,调用 PHP 模块来解析这些文件的内容,那么我们只需要执行如下命令:
#修改apache配置文件,加入如下内容
[root@localhost php-5.4.25]# vi /usr/local/apache2/etc/httpd.conf
...
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .phps #这句话的意思是:如果遇到.php和.phps扩展名,则调用PHP模块来解析这个文件的内容
...
这句话加载在 apache 配置文件中的任何位置都是可以的,不过系统中有类似的语句 AddType application/x-gzip.gz.tgz,那么我们一般将其加载到这句话后面。至于 PHP 文件的扩展名,可以自由定义。
7.重启Apache服务器:我们修改了 apache 的配置文件,如果想让这个修改生效,那么必须重启 Apache 服务器。重启命令如下:
#重启apache服务systemctl restart apache
[root@CncLucZK php]# service apache stop
[root@CncLucZK php]# service apache start
httpd not running, trying to start
这里最好不要使用 restart 参数,因为对于源码包的 apache 启动命令,restart 参数有时会不起作用。
8.测试PHP环境是否正常
[root@CncLucZK php]# vi /usr/local/apache2/htdocs/index.php
<?php
phpinfo();
?>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。