有几种方法可以在UNIX平台上安装PHP。使用configure和compile进程,或者使用各种预编译的包。这篇文章主要关注PHP的配置和编译过程。许多Unix许可系统都有一个软件包安装系统,可以在标准配置中用来设置PHP。但是,如果需要与标准配置不同的功能(例如,安全服务器或其他数据库驱动扩展),则可能需要编译PHP或Web服务器。如果您不熟悉软件编译,请搜索以确定是否有人编译了包含所需功能的预编译包。
编译所需的知识和软件:
Unix的基本技能(make和C编译器的操作)
ANSI C语言编译器
网络服务器
模块特定组件(如GD或PDF库)
如果直接从Git源文件或自己修改的包编译,则可能需要:
autoconf: 2.59+ (for PHP >= 7.0.0), 2.64+ (for PHP >= 7.2.0)
automake: 1.4+
libtool: 1.4.x+(除了 1.4.2)
re2c: 版本 0.13.4+
bison:
PHP 7.0 - 7.3: 2.4 或更高 (包含 Bison 3.x)
PHP 7.4: > 3.0
PHP的初始配置和安装由configure脚本中的一组命令行选项控制。所有可用的PHP编译选项和简要说明包括:./configure--help命令允许您查看。本手册单独介绍了这些选项。核心配置选项在附录中有记载,但扩展模块特定的配置选项在各自的函数参考页中有说明。
配置PHP后,可以开始编译模块和可执行文件。要执行此操作,请使用生成命令。
注意:
某些Unix系统(例如OpenBSD或SELinux)可能无法为文件设置写入和运行访问权限,这是出于安全原因,也称为“PaX MPROTECT”或“W^X违规”保护。但是,PCRE的JIT无法执行此操作,因此请参阅在安装过程中关闭PCRE的JIT支持,或者将相关的二进制文件添加到系统的保护白名单中。
注意:当前不支持ARM和Android工具链的交叉编译。
最近,我遇到了从源代码构建PHP7.1.13的情况。然而,当我运行makeinstall时,配置和make很好,它挂起了。事实证明,如果您正在使用Apache(apxs)构建PHP,make文件调用带有-a标志的apxs,该标志告诉它修改httpd。conf文件。如果由于任何原因,文件不可写,那么它将失败,您将面临挂起。
我的Makefile中的第108行如下所示:
INSTALL_IT = $(mkinstalldirs) '$(INSTALL_ROOT)/usr/lib64/httpd/modules' && $(mkinstalldirs) '$(INSTALL_ROOT)/etc/httpd/conf' && /usr/sbin/apxs -S LIBEXECDIR='$(INSTALL_ROOT)/usr/lib64/httpd/modules' -S SYSCONFDIR='$(INSTALL_ROOT)/etc/httpd/conf' -i -a -n php7 libphp7.la
我不得不移除-a旗,然后就没事了。
使用Red Hat Fedora时,请注意安全增强的Linux,SELinux。
引用自Red Hat:“安全目标是确保Apache HTTP仅读取静态Web内容,而不执行任何其他操作,如写入内容、连接到数据库套接字、读取用户主目录等。”
这些限制包括,除其他外,使用mkdir创建目录,使用fopen访问文件,使用fopen或get_headers读取URL,或者使用exec来运行碰巧使用套接字的外部应用程序(或者访问一些文件,但当以Unix用户apache或httpd的身份从命令行执行时运行良好——例如从nweb2fax recvq.php和sendq.php调用的HylaFAX“faxstat”)。
请参阅/var/log/messages以了解SELinux策略导致的任何拒绝。要禁用它:
-系统、管理、安全级别和防火墙
-打开SELinux选项卡
-单击过渡树
-选中“禁用Apache HTTP的SELinux保护”
-执行/etc/init。d/httpd重启