CentOS 7下PHP7.4编译安装全攻略:从依赖解决到常见报错处理
CentOS 7下PHP7.4编译安装全攻略从依赖解决到常见报错处理在Linux服务器环境中PHP作为最流行的服务器端脚本语言之一其安装方式通常有yum安装和编译安装两种选择。对于追求性能优化和功能定制的开发者来说编译安装PHP7.4无疑是更优的选择。本文将详细介绍在CentOS 7系统下从零开始编译安装PHP7.4的全过程包括环境准备、依赖解决、编译参数优化、服务配置以及常见问题的排查与解决。1. 环境准备与依赖安装编译安装PHP7.4前必须确保系统环境满足基本要求并安装所有必要的依赖库。CentOS 7默认的软件仓库可能不包含最新版本的PHP和相关依赖因此我们需要先配置额外的软件源。首先更新系统基础软件包yum update -y安装EPEL仓库和Remi仓库这两个仓库提供了许多CentOS官方仓库中没有的软件包yum install epel-release -y yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm -y接下来安装开发工具组这是编译任何软件的基础yum groupinstall Development Tools -yPHP7.4编译所需的核心依赖包列表如下依赖类别主要包名功能说明基础库libxml2-devel, openssl-develXML处理和SSL/TLS支持图像处理libjpeg-devel, libpng-devel, freetype-develJPEG/PNG图像处理和字体渲染数据库sqlite-devel, libicu-develSQLite和国际化组件支持压缩bzip2-devel, zlib-develBzip2和Zlib压缩支持网络libcurl-devel, libxslt-develcURL和XSLT转换支持其他oniguruma-devel, libzip-devel正则表达式和ZIP压缩支持安装所有必要的开发依赖包yum install -y libxml2-devel openssl-devel bzip2-devel libcurl-devel \ libjpeg-devel libpng-devel freetype-devel gmp-devel libmcrypt-devel \ readline-devel libxslt-devel zlib-devel glibc-devel glib2-devel \ ncurses-devel gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel \ expat-devel xmlrpc-c-devel libicu-devel libmemcached-devel \ libsqlite3x-devel oniguruma-devel libzip-devel krb5-devel提示如果某些依赖包无法找到可能需要启用PowerTools仓库yum config-manager --set-enabled PowerTools2. 下载与编译PHP7.4完成环境准备后我们可以开始下载PHP7.4源代码并进行编译。建议从官方镜像站点获取源代码以保证安全性和稳定性。2.1 获取PHP源代码选择一个合适的PHP7.4稳定版本本文以7.4.33为例cd /usr/local/src wget https://www.php.net/distributions/php-7.4.33.tar.gz tar -zxvf php-7.4.33.tar.gz cd php-7.4.332.2 配置编译选项PHP提供了丰富的编译选项可以根据实际需求启用或禁用特定功能。以下是一个兼顾性能和功能的配置示例./configure --prefix/usr/local/php74 \ --with-config-file-path/usr/local/php74/etc \ --with-config-file-scan-dir/usr/local/php74/etc/conf.d \ --enable-fpm \ --with-fpm-usernginx \ --with-fpm-groupnginx \ --enable-mbstring \ --enable-opcache \ --enable-intl \ --with-openssl \ --with-zlib \ --with-curl \ --with-bz2 \ --with-gd \ --with-jpeg \ --with-freetype \ --with-gettext \ --with-mysqli \ --with-pdo-mysql \ --with-xmlrpc \ --with-xsl \ --with-zip \ --enable-soap \ --enable-sockets \ --enable-pcntl \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-sysvshm \ --with-pear注意--with-fpm-user和--with-fpm-group应根据实际Web服务器用户设置常见的有nginx或www-data2.3 编译与安装配置完成后开始编译和安装过程make -j$(nproc) make install-j$(nproc)选项会根据CPU核心数并行编译显著加快编译速度。在4核服务器上编译时间通常在10-20分钟左右。3. 配置PHP环境编译安装完成后需要进行一系列配置才能使PHP正常工作。3.1 设置环境变量将PHP的可执行文件路径添加到系统PATH中echo export PATH/usr/local/php74/bin:/usr/local/php74/sbin:$PATH /etc/profile.d/php74.sh source /etc/profile.d/php74.sh验证PHP是否可用php -v3.2 配置文件设置复制PHP配置文件模板cp php.ini-production /usr/local/php74/etc/php.ini常见的php.ini优化设置包括调整内存限制memory_limit 256M增加上传文件大小限制upload_max_filesize 100M调整POST数据大小post_max_size 100M启用OPcache加速[opcache] opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files4000 opcache.revalidate_freq60 opcache.fast_shutdown13.3 PHP-FPM配置配置PHP-FPM进程管理器cd /usr/local/php74/etc cp php-fpm.conf.default php-fpm.conf cp php-fpm.d/www.conf.default php-fpm.d/www.conf编辑www.conf文件调整以下关键参数[www] user nginx group nginx listen /run/php-fpm/php-fpm.sock listen.owner nginx listen.group nginx pm dynamic pm.max_children 50 pm.start_servers 5 pm.min_spare_servers 2 pm.max_spare_servers 8 pm.max_requests 500创建systemd服务文件cat /usr/lib/systemd/system/php74-fpm.service EOF [Unit] DescriptionThe PHP 7.4 FastCGI Process Manager Afternetwork.target [Service] Typeforking PIDFile/run/php-fpm/php-fpm.pid ExecStart/usr/local/php74/sbin/php-fpm --daemonize --fpm-config /usr/local/php74/etc/php-fpm.conf ExecReload/bin/kill -USR2 \$MAINPID ExecStop/bin/kill -SIGQUIT \$MAINPID PrivateTmptrue [Install] WantedBymulti-user.target EOF启动并启用PHP-FPM服务systemctl daemon-reload systemctl start php74-fpm systemctl enable php74-fpm4. 常见问题与解决方案在编译安装PHP7.4的过程中可能会遇到各种问题。以下是常见错误及其解决方法。4.1 编译时依赖错误问题1: configure: error: Package requirements (libxml-2.0 2.7.6) were not metyum install libxml2-devel -y问题2: configure: error: Package requirements (oniguruma) were not metyum install oniguruma oniguruma-devel -y问题3: configure: error: Please reinstall the BZip2 distributionyum install bzip2-devel -y4.2 PHP扩展编译问题编译安装PHP扩展时可能会遇到以下问题问题: make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1解决方法make clean ./buildconf --force ./configure [your original configure options] make4.3 PHP-FPM启动失败问题: ERROR: failed to open configuration file /usr/local/php74/etc/php-fpm.conf: No such file or directory解决方法cd /usr/local/php74/etc cp php-fpm.conf.default php-fpm.conf问题: ERROR: [pool www] cannot get gid for group nginx解决方法确保指定的用户和组存在groupadd -r nginx useradd -r -g nginx -s /sbin/nologin nginx4.4 性能优化建议OPcache配置确保OPcache正确配置并启用可以显著提高PHP性能PHP-FPM进程管理根据服务器内存调整pm.max_children等参数文件系统缓存对于频繁访问的文件考虑使用内存文件系统JIT编译PHP8引入了JIT但在PHP7.4中可以通过优化OPcache配置获得更好性能5. 扩展安装与管理编译安装PHP的一个主要优势是可以灵活地添加或移除扩展。PHP扩展分为核心扩展和第三方扩展安装方式也有所不同。5.1 编译安装第三方扩展以安装redis扩展为例cd /usr/local/src wget https://pecl.php.net/get/redis-5.3.7.tgz tar -zxvf redis-5.3.7.tgz cd redis-5.3.7 /usr/local/php74/bin/phpize ./configure --with-php-config/usr/local/php74/bin/php-config make make install然后在php.ini中添加extensionredis.so5.2 启用内置扩展PHP有些扩展是内置在源代码中但默认不启用的可以通过重新编译PHP来启用它们。例如启用ftp扩展cd /usr/local/src/php-7.4.33 ./configure [之前的参数] --enable-ftp make make install5.3 扩展管理技巧使用php -m查看已加载的模块使用php --ri 模块名查看模块详细信息在php.ini中使用extension模块名.so加载扩展将不同扩展的配置放在conf.d目录中单独管理6. 与Web服务器集成PHP-FPM可以与多种Web服务器配合工作下面介绍与Nginx的集成配置。6.1 Nginx配置在Nginx的server配置中添加PHP处理规则location ~ \.php$ { try_files $uri 404; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }6.2 权限设置确保Nginx和PHP-FPM使用相同的用户权限chown -R nginx:nginx /var/www/html6.3 测试配置创建测试PHP文件echo ?php phpinfo(); ? /var/www/html/info.php访问http://your-server-ip/info.php应该能看到PHP信息页面。7. 安全加固建议编译安装的PHP需要进行适当的安全配置禁用危险函数在php.ini中设置disable_functions exec,passthru,shell_exec,system,proc_open,popen限制文件访问open_basedir /var/www/html隐藏PHP版本expose_php Off调整文件上传file_uploads On upload_max_filesize 20M max_file_uploads 5会话安全session.cookie_httponly 1 session.cookie_secure 1 session.use_strict_mode 1PHP-FPM监听方式建议使用Unix socket而非TCP端口8. 维护与升级8.1 日常维护定期检查PHP-FPM进程状态systemctl status php74-fpm监控PHP错误日志tail -f /usr/local/php74/var/log/php-fpm.log定期清理OPcache缓存可通过编写PHP脚本实现8.2 版本升级当需要升级到新的PHP7.4小版本时备份当前配置文件和网站代码下载新版本源代码使用相同的configure参数重新编译执行make install覆盖安装重启PHP-FPM服务8.3 降级处理如果新版本出现问题可以重新编译旧版本并安装cd /usr/local/src/php-7.4.old make make install9. 性能监控与调优9.1 监控PHP-FPMPHP-FPM提供了状态页面功能可以监控进程状态在php-fpm.conf中启用pm.status_path /status然后在Nginx中添加配置location /status { fastcgi_pass unix:/run/php-fpm/php-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; allow 127.0.0.1; deny all; }访问http://your-server/status可以看到类似如下的信息pool: www process manager: dynamic start time: 01/Jan/2022:12:34:56 0800 start since: 1234 accepted conn: 5678 listen queue: 0 max listen queue: 5 listen queue len: 128 idle processes: 3 active processes: 5 total processes: 8 max active processes: 10 max children reached: 0 slow requests: 09.2 OPcache状态监控同样可以启用OPcache状态页面在php.ini中配置opcache.enable1 opcache.enable_cli0 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files4000 opcache.revalidate_freq60 opcache.fast_shutdown1 opcache.enable_file_override1 opcache.validate_timestamps1 opcache.revalidate_path0 opcache.save_comments1 opcache.load_comments1 opcache.file_cache/tmp opcache.file_cache_only0 opcache.file_cache_consistency_checks1 opcache.huge_code_pages0 opcache.error_log/var/log/php_opcache.log opcache.log_verbosity_level1创建监控脚本cat /var/www/html/opcache.php EOF ?php opcache_reset(); phpinfo(INFO_MODULES); EOF9.3 性能调优参数根据服务器硬件调整以下参数PHP-FPM进程管理pm.max_children (总内存 - 系统内存) / 单个进程内存pm.start_servers CPU核心数 × 2pm.min_spare_servers CPU核心数pm.max_spare_servers CPU核心数 × 4OPcache优化opcache.memory_consumption 64-256 (MB)opcache.max_accelerated_files 4000-16000opcache.interned_strings_buffer 8-16 (MB)PHP核心参数realpath_cache_size 256k-1Mrealpath_cache_ttl 300-360010. 实际应用案例10.1 WordPress优化配置针对WordPress的PHP配置优化[PHP] memory_limit 128M max_execution_time 120 upload_max_filesize 64M post_max_size 128M max_input_vars 3000 [opcache] opcache.enable1 opcache.memory_consumption128 opcache.interned_strings_buffer8 opcache.max_accelerated_files10000 opcache.revalidate_freq60 opcache.enable_file_override110.2 Laravel生产环境配置Laravel框架推荐的PHP设置[PHP] memory_limit 256M max_execution_time 60 upload_max_filesize 20M post_max_size 20M [opcache] opcache.enable1 opcache.memory_consumption256 opcache.interned_strings_buffer16 opcache.max_accelerated_files20000 opcache.revalidate_freq0 opcache.validate_timestamps0 opcache.save_comments1 opcache.enable_file_override110.3 高并发API服务配置处理高并发API请求的PHP-FPM配置[www] pm dynamic pm.max_children 200 pm.start_servers 30 pm.min_spare_servers 20 pm.max_spare_servers 50 pm.max_requests 1000 pm.process_idle_timeout 10s request_terminate_timeout 30s request_slowlog_timeout 5s slowlog /var/log/php-fpm/slow.log11. 备份与迁移11.1 备份PHP配置tar -czvf php74_backup.tar.gz /usr/local/php74/etc /usr/lib/systemd/system/php74-fpm.service11.2 迁移到新服务器在新服务器上按照相同步骤安装相同版本的PHP复制备份的配置文件迁移网站代码和数据库测试所有功能是否正常11.3 配置版本控制将PHP配置纳入版本控制cd /usr/local/php74/etc git init git add php.ini php-fpm.conf php-fpm.d/www.conf git commit -m Initial PHP configuration12. 容器化部署建议虽然本文介绍的是传统编译安装方式但在容器化环境中也可以使用类似的配置Dockerfile示例FROM centos:7 RUN yum install -y epel-release \ yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm \ yum install -y yum-utils \ yum-config-manager --enable remi-php74 \ yum install -y php php-fpm php-opcache php-mysqlnd \ yum clean all COPY php.ini /etc/php.ini COPY www.conf /etc/php-fpm.d/www.conf EXPOSE 9000 CMD [php-fpm, -F]13. 多版本PHP共存在某些情况下可能需要同时运行多个PHP版本。可以通过以下方式实现为每个PHP版本指定不同的安装前缀如/usr/local/php74和/usr/local/php81配置不同的PHP-FPM监听端口或socket在Web服务器配置中根据需求指向不同的PHP版本Nginx配置示例location ~ ^/php74/.*\.php$ { fastcgi_pass unix:/run/php74-fpm.sock; include fastcgi_params; } location ~ ^/php81/.*\.php$ { fastcgi_pass unix:/run/php81-fpm.sock; include fastcgi_params; }14. 调试与问题排查14.1 日志配置确保正确配置了PHP和PHP-FPM的日志php.ini中error_log /var/log/php_errors.log log_errors On error_reporting E_ALL ~E_DEPRECATED ~E_STRICT display_errors Off display_startup_errors Offphp-fpm.conf中error_log /var/log/php-fpm.log log_level notice access.log /var/log/php-fpm-access.log slowlog /var/log/php-fpm-slow.log request_slowlog_timeout 5s14.2 常见问题排查命令检查PHP配置php -i | grep Loaded Configuration File检查PHP模块php -m检查PHP-FPM进程ps aux | grep php-fpm检查PHP-FPM监听ss -lnp | grep php-fpm测试PHP-FPM响应SCRIPT_FILENAME/var/www/html/info.php REQUEST_METHODGET cgi-fcgi -bind -connect /run/php-fpm/php-fpm.sock15. 自动化部署脚本为了简化重复安装过程可以创建自动化安装脚本#!/bin/bash # PHP 7.4编译安装脚本 # 适用于CentOS 7 PHP_VERSION7.4.33 INSTALL_DIR/usr/local/php74 # 安装依赖 yum install -y epel-release yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm yum install -y yum-utils yum groupinstall -y Development Tools yum install -y libxml2-devel openssl-devel bzip2-devel libcurl-devel \ libjpeg-devel libpng-devel freetype-devel gmp-devel libmcrypt-devel \ readline-devel libxslt-devel zlib-devel glibc-devel glib2-devel \ ncurses-devel gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel \ expat-devel xmlrpc-c-devel libicu-devel libmemcached-devel \ libsqlite3x-devel oniguruma-devel libzip-devel krb5-devel # 下载PHP cd /usr/local/src wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.gz tar -zxvf php-${PHP_VERSION}.tar.gz cd php-${PHP_VERSION} # 编译安装 ./configure --prefix${INSTALL_DIR} \ --with-config-file-path${INSTALL_DIR}/etc \ --with-config-file-scan-dir${INSTALL_DIR}/etc/conf.d \ --enable-fpm \ --with-fpm-usernginx \ --with-fpm-groupnginx \ --enable-mbstring \ --enable-opcache \ --enable-intl \ --with-openssl \ --with-zlib \ --with-curl \ --with-bz2 \ --with-gd \ --with-jpeg \ --with-freetype \ --with-gettext \ --with-mysqli \ --with-pdo-mysql \ --with-xmlrpc \ --with-xsl \ --with-zip \ --enable-soap \ --enable-sockets \ --enable-pcntl \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-sysvshm \ --with-pear make -j$(nproc) make install # 配置环境变量 echo export PATH${INSTALL_DIR}/bin:${INSTALL_DIR}/sbin:\$PATH /etc/profile.d/php74.sh source /etc/profile.d/php74.sh # 配置文件 cp php.ini-production ${INSTALL_DIR}/etc/php.ini cd ${INSTALL_DIR}/etc cp php-fpm.conf.default php-fpm.conf cp php-fpm.d/www.conf.default php-fpm.d/www.conf # systemd服务 cat /usr/lib/systemd/system/php74-fpm.service EOF [Unit] DescriptionThe PHP 7.4 FastCGI Process Manager Afternetwork.target [Service] Typeforking PIDFile/run/php-fpm/php-fpm.pid ExecStart${INSTALL_DIR}/sbin/php-fpm --daemonize --fpm-config ${INSTALL_DIR}/etc/php-fpm.conf ExecReload/bin/kill -USR2 \$MAINPID ExecStop/bin/kill -SIGQUIT \$MAINPID PrivateTmptrue [Install] WantedBymulti-user.target EOF # 启动服务 systemctl daemon-reload systemctl start php74-fpm systemctl enable php74-fpm echo PHP ${PHP_VERSION} 安装完成安装目录${INSTALL_DIR}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2451504.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!