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)

相关推荐
闲晨2 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程29 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk1 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*1 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue1 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
萧鼎3 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸3 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农3 小时前
Python 继承、多态、封装、抽象
开发语言·python
^velpro^3 小时前
数据库连接池的创建
java·开发语言·数据库