编译安装php7.4 版本 一直都用运维工具,处理多个版本环境的问题。如php,pythone,go等 ,在不同项目中需求也不一样,所以在一台服务器中会安装多个编译器,正常一台全新的服务器一般都会安装运维工具,如 宝塔 可以可视化的,傻瓜式的安装环境,编辑环境变量等一系列操作。这样也导致一个问题,在一些使用很久的服务器中,你没法安装宝塔运维工具,在不同项目中你使用的环境就不同,要手动编译安装,设定端口,环境内容设定等等,一旦遇到就是两眼一黑。 懒猫今天也遇到这样的问题,在一个项目中需要安装php7.4环境,是在一台很老的服务器,里面都是一些php5,php6,nginx配置也是乱七八糟,但还是要安装php7.4环境。
唯一值得庆幸的是 这台服务器是contentOs7 以上版本。7以下是没发使用yum安装。
当然懒猫使用的是编译安装。
安装过程
下载PHP源码包 在服务器上确定你要编译的安装目录如: /www/serve/
\
1 2 cd /www/serve/wget https://www.php.net/distributions/php-7.4.30.tar.gz
解压
1 tar xf php-7.4.30.tar.gz -C /www/serve/
预编译、检查环境
–prefix= : 是要编译到那个目录下,懒猫指定的是 /www/serve/php74
–with-config-file-path= : 编译完成后选择自己需要的 php.ini 文件 复制到 –with-config-file-path 指定的目录。 如果没有指定–with-config-file-path选项,PHP可能不知道在哪里查找php.ini文件。
其他都是安装扩展等
1 2 3 4 5 cd /www/serve/php-7.4.30 ./configure --prefix=/www/serve/php74 --with-config-file-path=/usr/local/php/etc --with-mysqli --with-pdo-mysql --with-mysql-sock=/usr/local/mysql/mysql.sock --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-curl --with-gd --with-gmp --with-zlib --with-xmlrpc --with-openssl --without-pear --with-snmp --with-gettext --with-mhash --with-libxml-dir=/usr --with-ldap --with-ldap-sasl --with-fpm-user=nginx --with-fpm-group=nginx --enable-xml --enable-fpm --enable-ftp --enable-bcmath --enable-soap --enable-shmop --enable-sysvsem --enable-sockets --enable-inline-optimization --enable-maintainer-zts --enable-mbregex --enable-mbstring --enable-pcntl --enable-zip --disable-fileinfo --disable-rpath --enable-libxml --enable-opcache --enable-mysqlnd
等待。。。
如果出现以下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 出现的错误 configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met: 解决方法: yum install libxml2-devel -y configure: error: Package requirements (openssl >= 1.0.1) were not met: 解决方法: yum install openssl-devel -y configure: error: Package requirements (sqlite3 > 3.7.4) were not met: 解决方法: yum install sqlite-devel -y configure: error: Package requirements (libcurl >= 7.15.5) were not met: 解决方法: yum install libcurl-devel -y configure: error: GNU MP Library version 4.2 or greater required. 解决方法: yum -y install gmp-devel -y configure: error: Cannot find ldap.h 解决方法: yum install openldap openldap-devel -y configure: error: Cannot find ldap libraries in /usr/lib. 解决方法: cp -frp /usr/lib64/libldap* /usr/lib/configure: error: Package requirements (oniguruma) were not met: 解决方法: yum install oniguruma-devel -y configure: error: Could not find net-snmp-config binary. Please check your net-snmp installation. 解决方法: yum install net-snmp-devel -y
编译并安装
出现的错误
cc: fatal error: Killed signal terminated program cc1 compilation terminated.
解决方法:
1 2 3 4 5 6 mkdir -p /var/cache/swap/dd if =/dev/zero of=/var/cache/swap/swap0 bs=10M count=400chmod 0600 /var/cache/swap/swap0mkswap /var/cache/swap/swap0 swapon /var/cache/swap/swap0 swapon -s
/usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol ‘ber_strdup’ //usr/lib64/liblber-2.4.so.2: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status make: *** [Makefile:287: sapi/cli/php] Error 1
解决方法:
1 2 3 4 vim Makefile EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lldap -lgmp -lrt -lm -ldl -lpthread -lxml2 -lssl -lcrypto -lsqlite3 -lz -lcurl -lxml2 -lssl -lcrypto -lonig -lsqlite3 -lxml2 -lnetsnmp -lm -lssl -lssl -lcrypto -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxml2 -lz -lssl -lcrypto -lcrypt -llber
如果编译直接成功,你就会发现在 /www/serve/php74
目录下生成了很多文件!!
配置php配置文件
1 2 3 4 cp /www/serve/php-7.4.30/etc/php-fpm.d/www.conf.default /www/serve/php74/etc/php-fpm.confcp /www/serve/php-7.4.30/php.ini-production /www/serve/php74/etc/php.ini
复制php启动脚本到/etc/init.d/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 cp /www/serve/php-7.4.30/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm-74chmod +x /etc/init.d/php-fpm-74chkconfig --add php-fpm-74 chkconfig php-fpm-74 on /etc/init.d/php-fpm-74 start systemctl status php-fpm.service ps aux|grep php
相关配置处理 设定运行php7.4指定端口 当运行php7.4 环境时,发现很多端口被其他版本环境占用,这时就需要设定php7.4使用其他端口。配置如下
访问到 /www/serve/php74/etc/php-fpm.conf
文件中 【注意这里是我之前 cp 过来的文件,具体可以看上文】
1 2 3 4 5 6 7 vi /www/serve/php74/etc/php-fpm.conf listen = 127.0.0.0:9003
重启php7.4环境即可
1 /etc/init.d/php-fpm-74 restart
nginx 域名配置 这时nginx配置要指定域名访问的项目目录使用php7.4那该如何配置指向呢?如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 server { listen 80 ; server_name demo.xxxx.com; index index.php index.html index.htm default.php default.htm default.html; root /xxxx/xxxxx/server/public; location / { index index.html index.htm index.php; if (!-e $request_filename ) { rewrite ^/(.*)$ /index.php?s=$1 last ; break; } } location ~ /.*\.php/ { rewrite ^(.*?/?)(.*\.php)(.*)$ /$2 ?s=$3 last ; break; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9003 ; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name ; include fastcgi_params; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d ; } error_page 404 /include/404 .shtml; error_log /xxx/xxx/xxxx.com_error.log; access_log /xxx/xxx/xxxx.com_access.log combined; }
如何设定php7.4相关参数 这时就要修改对应的php.ini,重上文我们已经复制php.ini文件cp /www/serve/php-7.4.30/php.ini-production /www/serve/php74/etc/php.ini
所以 只要修改 /www/serve/php74/etc/php.ini
文件,修改相关参数,如上传配置,内存设定,运行时长等
设置完毕后,需要重启 php7.4 环境,让其修改配置生效。/etc/init.d/php-fpm-74 restart
同时也重启下nginx service nginx restart
即可
如果是要看其他环境下对应php.ini 可以查看 phpinfo();
1 2 Configuration File (php.ini) Path => 这里会说明php.ini的路径 Loaded Configuration File => 这里会显示是否价值了php.ini
在编译安装 PHP 7.4 后,要安装扩展 按照以下步骤进行操作:
进入 PHP 解压缩后的源码包目录。在该目录中,你将找到要安装的扩展模块的目录。 进入要安装的扩展模块的目录。例如,如果你要安装 mbstring 扩展,你可以进入 php-7.4.x/ext/mbstring 目录(其中 x 是具体的版本号)。 使用 phpize 工具准备扩展模块的编译环境。phpize 是 PHP 提供的一个用于动态添加扩展的工具。你可以通过运行以下命令来调用 phpize:
请确保将 /path/to/phpize 替换为实际的 phpize 可执行文件路径。你可以使用 whereis phpize 或 find / -name phpize 命令来查找 phpize 的路径。
运行 configure 脚本以配置扩展模块的编译选项。该脚本将检查你的系统环境和依赖项,并生成 Makefile 文件。你可以使用以下命令来运行 configure 脚本:
1 ./configure --with-php-config=/path/to/php-config
请将 /path/to/php-config 替换为实际的 php-config 可执行文件路径。你可以使用 whereis php-config 或 find / -name php-config 命令来查找 php-config 的路径。
编译和安装扩展模块。使用以下命令来编译和安装扩展模块:
这将编译扩展模块并将其安装到适当的位置。
修改 php.ini 文件以启用扩展模块。找到 php.ini 文件(通常位于 PHP 安装目录的 lib 子目录中),然后添加以下两行内容:
1 2 extension_dir = "/path/to/extension_dir" extension=extension_name.so
将 /path/to/extension_dir 替换为实际的扩展模块目录路径,将 extension_name.so 替换为你要启用的扩展模块的文件名(例如,mbstring.so)。
重启你的 Web 服务器或 PHP-FPM 进程,以使更改生效。 请注意,上述步骤中的路径和文件名可能因你的系统和安装方式而有所不同。确保根据实际情况进行适当的替换和调整。 此外,如果你使用的是包管理器(如 apt 或 yum)来安装 PHP,你可以使用包管理器来安装和管理扩展模块,这样会更方便和简单。具体的命令和步骤可能会因你使用的操作系统和包管理器而有所不同。