PHP纯离线搭建(php 8.1.7)

要离线从零安装 PHP 8.1.7,需要准备好 PHP 的源代码以及所有相关的依赖包。以下是步骤:

步骤概览

在联网系统上下载 PHP 8.1.7 源代码和所有依赖包。

将这些文件传输到离线系统。

安装所需的依赖包。

编译并安装 PHP 8.1.7。

配置 PHP 和 Web 服务器。

  1. 在联网系统上下载 PHP 8.1.7 和依赖库
    步骤 1: 下载 PHP 8.1.7 源代码
    在联网的系统上,首先下载 PHP 8.1.7 源代码:

wget https://www.php.net/distributions/php-8.1.7.tar.gz (或者浏览器直接输入该地址下载)

步骤 2: 下载依赖包

要编译 PHP,需要安装必要的编译工具和依赖包。可以使用包管理工具下载这些包。

对于 Ubuntu/Debian 系统

安装编译 PHP 所需的依赖包:

sudo apt-get install build-essential autoconf bison re2c libxml2-dev libsqlite3-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev libmcrypt-dev libssl-dev pkg-config

要离线下载这些包,可以使用以下命令在联网机器上下载依赖包:

apt-get download <package_name>

例如:

apt-get download build-essential autoconf bison re2c libxml2-dev libsqlite3-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libxpm-dev libfreetype6-dev libssl-dev pkg-config

对于 CentOS/RHEL 系统

下载 CentOS 或 RHEL 上所需的依赖包:

sudo yum groupinstall "Development Tools"

sudo yum install libxml2-devel bzip2-devel curl-devel libpng-devel libjpeg-devel freetype-devel openssl-devel sqlite-devel oniguruma-devel

可以使用 yumdownloader 下载这些包:

yumdownloader <package_name>

步骤 3: 打包下载的文件

将 PHP 源代码和所有依赖包打包:

tar -czvf php8.1.7_offline_install.tar.gz php-8.1.7.tar.gz <dependency_files>

  1. 将文件传输到离线系统

将打包的文件传输到离线系统,可以使用 USB 或 scp 等工具。

scp php8.1.7_offline_install.tar.gz user@offline_server:/path/to/destination

  1. 在离线系统上安装依赖包

步骤 1: 解压文件

在离线系统上,首先解压传输过来的打包文件:

tar -xzvf php8.1.7_offline_install.tar.gz

步骤 2: 安装依赖包

对于 Ubuntu/Debian 系统

sudo dpkg -i *.deb

对于 CentOS/RHEL 系统

sudo rpm -i *.rpm

  1. 编译和安装 PHP 8.1.7

步骤 1: 解压 PHP 源代码

tar -xzvf php-8.1.7.tar.gz

cd php-8.1.7

步骤 2: 配置编译选项

根据需要配置 PHP 编译选项。以下是常见的编译选项:

./configure --prefix=/usr/local/php8

--with-config-file-path=/usr/local/php8

--with-config-file-scan-dir=/usr/local/php8/conf.d

--enable-mbstring

--enable-intl

--with-openssl

--with-zlib

--enable-pcntl

--enable-sockets

--enable-soap

--with-curl

--enable-fpm

--with-mysqli

--with-pdo-mysql

--with-zlib

--enable-bcmath

--enable-ftp

--with-gd

--enable-gd

--with-jpeg

--with-freetype

步骤 3: 编译和安装 PHP

编译 PHP:

make

安装 PHP:

sudo make install

步骤 4: 配置 PHP

拷贝 PHP 配置文件模板:

cp php.ini-production /usr/local/php8/php.ini

编辑 php.ini,根据需要修改配置:

sudo nano /usr/local/php8/php.ini

  1. 配置 Web 服务器

配置 Nginx 和 PHP-FPM

启动 PHP-FPM:

/usr/local/php8/sbin/php-fpm

修改 Nginx 配置,使其使用 PHP-FPM,编辑 /etc/nginx/nginx.conf 或虚拟主机配置文件:

nginx

location ~ .php$ {

include fastcgi_params;

fastcgi_pass 127.0.0.1:9000;

fastcgi_param SCRIPT_FILENAME d o c u m e n t r o o t document_root documentrootfastcgi_script_name;

}

重启 Nginx:

sudo systemctl restart nginx

配置 Apache 和 PHP

确保已安装 Apache,并安装 libapache2-mod-php8.1。

sudo apt-get install apache2 libapache2-mod-php8.1

重启 Apache:

sudo systemctl restart apache2

  1. 测试 PHP 安装

创建测试 PHP 文件:

sudo nano /var/www/html/info.php

内容如下:

php
<?php phpinfo(); ?>

打开浏览器,访问 http://your_server_ip/info.php,确认 PHP 8.1.7 已成功安装。

总结

在联网系统上下载 PHP 源代码和依赖包。

将所有文件传输到离线系统。

安装依赖包,编译并安装 PHP 8.1.7。

配置 PHP 和 Web 服务器(Nginx 或 Apache)。

您说:

进行 ./configure 时报了no package 'oniguruma' found

在进行 PHP 编译时,oniguruma 是用于支持多字节正则表达式(用于 mbstring 扩展)的库。如果编译时提示没有找到 oniguruma,需要手动安装这个库。

解决方法:

  1. 下载并安装 oniguruma 库
    因为是离线安装,所以需要在有网络的机器上下载 oniguruma 源代码或包,之后再将其安装到目标系统中。

步骤 1: 下载 oniguruma 源代码

在有网络的机器上,下载 oniguruma 的源代码。oniguruma 的源代码托管在 GitHub 上:

wget https://github.com/kkos/oniguruma/releases/download/v6.9.7/onig-6.9.7.tar.gz

将下载的压缩包传输到目标离线系统。

步骤 2: 在离线系统上解压并编译 oniguruma

解压下载的文件:

tar -xzvf onig-6.9.7.tar.gz

cd onig-6.9.7

编译并安装 oniguruma:

./configure

make

sudo make install

步骤 3: 确认 oniguruma 安装成功

执行以下命令,确认 oniguruma 库已成功安装:

pkg-config --modversion oniguruma

如果输出了版本号,例如 6.9.7,说明 oniguruma 安装成功。

  1. 编译 PHP 时重新指定 oniguruma
    在 PHP 的编译过程中,确保指定了正确的路径来找到 oniguruma。可以通过以下命令再次配置 PHP:

./configure --with-onig=/usr/local

如果安装路径不同,可以替换 /usr/local 为 oniguruma 实际安装的路径。

总结

下载并编译 oniguruma 库。

安装完成后,重新运行 ./configure 配置 PHP,并确保指定了 oniguruma 的路径。

您说:

fail to load configuration file '/usr/local/php/etc/php-fpm.conf'

回答:

如果在启动 PHP-FPM 时遇到 "fail to load configuration file '/usr/local/php/etc/php-fpm.conf'" 错误,通常是因为配置文件路径不正确或配置文件丢失。下面是解决这个问题的步骤:

步骤 1: 确认 php-fpm.conf 文件路径

确保 php-fpm.conf 文件存在于指定路径 /usr/local/php/etc/ 中。

ls -l /usr/local/php/etc/php-fpm.conf

如果文件不存在或路径不对,需要重新检查或创建配置文件。

步骤 2: 创建 php-fpm.conf 配置文件

如果配置文件丢失,可以从 PHP 的源代码中复制默认配置文件,或者从其他 PHP 安装中获取默认配置文件。可以使用以下命令来创建一个基本的 php-fpm.conf 配置文件:

sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

如果 /usr/local/php/etc/php-fpm.conf.default 文件不存在,可以从 PHP 源代码目录中复制:

cp /path/to/php-8.1.7/php-fpm.conf /usr/local/php/etc/php-fpm.conf

步骤 3: 确保配置文件的正确性

打开配置文件并检查是否存在错误:

sudo nano /usr/local/php/etc/php-fpm.conf

确保配置文件中的路径、权限和其他设置都正确。以下是一个简单的配置示例:

ini

复制代码

global

error_log = /usr/local/php/var/log/php-fpm.log

pid = /usr/local/php/var/run/php-fpm.pid

www

user = www-data

group = www-data

listen = /usr/local/php/var/run/php-fpm.sock

listen.mode = 0660

pm = dynamic

pm.max_children = 5

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3

步骤 4: 检查配置目录权限

确保 PHP-FPM 配置目录 /usr/local/php/etc/ 和其他相关目录具有正确的权限和所有权:

sudo chown -R root:root /usr/local/php/etc

sudo chmod -R 755 /usr/local/php/etc

步骤 5: 检查 PHP-FPM 是否可以启动

尝试手动启动 PHP-FPM 并查看输出中的错误信息:

/usr/local/php/sbin/php-fpm -t

这会检查配置文件的语法错误。如果一切正常,你应该看到类似于 "configuration file /usr/local/php/etc/php-fpm.conf test is successful" 的消息。

然后可以尝试启动 PHP-FPM 服务:

/usr/local/php/sbin/php-fpm

步骤 6: 查看日志文件

如果仍然遇到问题,可以查看 PHP-FPM 的日志文件以获取更多信息:

sudo tail -f /usr/local/php/var/log/php-fpm.log

总结

确认 php-fpm.conf 文件存在于 /usr/local/php/etc/。

如果文件丢失,创建一个新的配置文件。

检查配置文件的路径、权限和设置是否正确。

使用 php-fpm -t 命令检查配置文件的语法。

启动 PHP-FPM 服务并查看日志文件以获取更多信息。

按照这些步骤,应该能够解决 "fail to load configuration file" 的问题。

问题

nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/.conf' from '/usr/local/php/etc/php-fpm.conf'
ChatGPT 说:
ChatGPT
如果在启动 PHP-FPM 时遇到错误 "nothing matches the include pattern '/usr/local/php/etc/php-fpm.d/
.conf' from '/usr/local/php/etc/php-fpm.conf'",这表明 php-fpm.conf 文件中指定的包含目录或文件模式没有匹配到任何文件。这个问题通常发生在以下几种情况下:

/usr/local/php/etc/php-fpm.d/ 目录不存在。

/usr/local/php/etc/php-fpm.d/ 目录存在但没有配置文件。

配置文件的路径或文件模式在 php-fpm.conf 中错误。

解决步骤

步骤 1: 确认目录存在

首先,确保 /usr/local/php/etc/php-fpm.d/ 目录存在:

ls -ld /usr/local/php/etc/php-fpm.d/

如果目录不存在,可以创建它:

sudo mkdir -p /usr/local/php/etc/php-fpm.d/

步骤 2: 确认目录下的配置文件

如果目录存在,但没有配置文件,需要添加至少一个配置文件。通常,这些文件是为不同的池配置文件。例如:

sudo nano /usr/local/php/etc/php-fpm.d/www.conf

可以用以下内容作为基本示例配置:

ini

www

user = www-data

group = www-data

listen = /usr/local/php/var/run/php-fpm.sock

listen.mode = 0660

pm = dynamic

pm.max_children = 5

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 3

步骤 3: 检查 php-fpm.conf 中的 include 指令

确保 php-fpm.conf 文件中的 include 指令指定了正确的目录和文件模式:

ini

include=/usr/local/php/etc/php-fpm.d/*.conf

检查该行是否拼写正确,并且指向了存在的目录和文件。

步骤 4: 测试配置文件

在修复目录和文件后,可以用以下命令测试 PHP-FPM 配置是否有效:

bash

/usr/local/php/sbin/php-fpm -t

步骤 5: 重新启动 PHP-FPM

如果配置文件和目录正确,尝试重新启动 PHP-FPM:

bash

/usr/local/php/sbin/php-fpm

步骤 6: 查看日志

如果仍然遇到问题,可以查看 PHP-FPM 的日志文件获取更多错误信息:

sudo tail -f /usr/local/php/var/log/php-fpm.log

总结

确保 /usr/local/php/etc/php-fpm.d/ 目录存在,如果不存在,则创建它。

在目录中添加至少一个配置文件,例如 www.conf。

检查 php-fpm.conf 中的 include 指令 是否正确指定了存在的目录和文件模式。

使用 php-fpm -t 命令测试配置,然后重新启动 PHP-FPM。

按照这些步骤操作后,应该能够解决 "nothing matches the include pattern" 的问题。

cannot get pid from group 'nobody'

错误 "cannot get pid from group 'nobody'" 通常发生在 PHP-FPM 启动时,表示 PHP-FPM 尝试使用名为 nobody 的用户或组,但系统中没有找到这个用户或组。这个问题通常与 PHP-FPM 的配置文件有关,特别是配置文件中的用户和组设置。

解决步骤

步骤 1: 确认 nobody 用户和组存在

首先,确认系统中是否存在 nobody 用户和组:

getent passwd nobody

getent group nobody

如果这些命令没有返回任何信息,说明系统中没有 nobody 用户和组。

步骤 2: 创建 nobody 用户和组

如果 nobody 用户和组不存在,你可以创建它们:

创建 nobody 组:

sudo groupadd nobody

创建 nobody 用户:

sudo useradd -r -g nobody nobody

其中 -r 选项表示创建一个系统用户。

步骤 3: 检查 PHP-FPM 配置文件

检查 PHP-FPM 配置文件 /usr/local/php/etc/php-fpm.conf 或池配置文件 /usr/local/php/etc/php-fpm.d/www.conf,确认 user 和 group 设置是否正确。例如:

ini

user = nobody

group = nobody

如果你的系统中没有 nobody 用户或组,可以将这些设置更改为系统中存在的用户和组。例如,可以使用 www-data 或 apache 用户和组(这取决于你的系统和 Web 服务器设置):

ini

user = www-data

group = www-data

步骤 4: 确保 PHP-FPM 配置文件的权限

确保 PHP-FPM 配置文件和相关目录的权限正确:

bash

sudo chown -R root:root /usr/local/php/etc/

sudo chmod -R 755 /usr/local/php/etc/

步骤 5: 测试和重启 PHP-FPM

在修改配置文件后,使用以下命令测试 PHP-FPM 配置文件:

/usr/local/php/sbin/php-fpm -t

如果配置测试通过,重新启动 PHP-FPM:

/usr/local/php/sbin/php-fpm

步骤 6: 查看日志文件

如果问题仍然存在,查看 PHP-FPM 的日志文件以获取更多信息:

sudo tail -f /usr/local/php/var/log/php-fpm.log

总结

确认 nobody 用户和组存在,如果不存在则创建它们。

检查并更新 PHP-FPM 配置文件 中的 user 和 group 设置。

确保配置文件和目录权限正确。

测试配置文件 并 重新启动 PHP-FPM。

查看日志文件 获取更多信息。

通过这些步骤,你应该能够解决 "cannot get pid from group 'nobody'" 的问题。(或者使用存在的组,配置到user和group)

相关推荐
BingoGo13 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack13 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo1 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1233 天前
matlab画图工具
开发语言·matlab
dustcell.3 天前
haproxy七层代理
java·开发语言·前端
norlan_jame3 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone3 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc