Linux学习-84-安装PHP

2023-05-16

17.13 安装PHP

  • PHP(PHP:Hypertext Preprocessor递归缩写)中文名字是:“超文本预处理器”,是一种广泛使用的通用开源脚本语言,适合于Web网站开发,它可以嵌入HTML中。编程范型是面向对象、命令式编程的。
  • PHP/Perl/Python:作为三种开发动态网页的编程语言,负责解释动态网页文件,负责沟通Web服务器和数据库系统以协同工作,并提供Web应用程序的开发和运行环境。其中PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可以嵌入到HTML中,尤其适合于Web应用开发。

1.除了前面安装的一系列软件外,安装php时根据自己需要提前安装以下环境

yum install dnf
dnf install sqlite-devel
dnf -y install bzip2-devel
dnf -y install libcurl-devel
dnf -y install libicu-devel
dnf -y install libxslt-devel
dnf -y install libzip-devel
  • 如果不提前安装,后续在编译的时候会报两种错误:
    • 1.包找不到,未安装,需要安装:例如
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
No package 'sqlite3' found
#那需要安装此生产包
yum install sqlite-devel
    • 现有的安装包版本较低.例如:
configure: error: Package requirements (libzip >= 0.11 libzip != 1.3.1 libzip != 1.7.0) were not met:
Requested 'libzip >= 0.11' but version of libzip is 0.10.1

处理办法:

  • 先移除现有的安装:yum remove libzip-devel libzip

  • 下载对应的版本:wget https://libzip.org/download/libzip-1.3.2.tar.gz --no-check-certificate

  • 解压tar包,然后进入解压包,执行配置脚本:./confugure

  • 编译安装:make & make install

  • 安装完成后,查询/usr/local/lib64目录下是否有pkgconfig目录,有的话执行命令export PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig/"指定PKG_CONFIG_PATH,然后重新执行切换php解压之后的文件夹,执行./configure脚本即可

2.oniguruma是一个处理正则表达式的库,安装php的过程中,mbstring的正则表达式处理功能对这个包有依赖性,所以我们要先安装这个库在/usr/local/src/目录下

#下载
[root@localhost src]# wget https://github.com/kkos/oniguruma/archive/v6.9.4.tar.gz -O oniguruma-6.9.4.tar.gz 
#解压
[root@localhost src]# tar xf oniguruma-6.9.4.tar.gz 
#进入解压包
[root@localhost src]# cd oniguruma-6.9.4/
#配置
[root@localhost oniguruma-6.9.4]# ./autogen.sh && ./configure --prefix=/usr/local/oniguruma

#编译安装
[root@localhost oniguruma-6.9.4]# make && make install
  • ./autogen.sh && ./configure --prefix=/usr运行中如果报错:则需要安装以下类库
Generating autotools files.
./autogen.sh: line 6: autoreconf: command not found

[root@localhost oniguruma-6.9.4]# yum -y install autoconf automake libtool libtool-ltdl

3.配置php并编译安装,在执行编译之前,需要配置此次编译和安装后的文件的存放位置以及安装的一些组件

#进入php解压包
[root@CncLucZK ~]# cd /usr/local/src/php-8.0.0
# #编译前配置
[root@localhost php-8.1.12]# ./configure --prefix=/usr/local/php/ \	#指定安装位置
--with-config-file-path=/usr/local/php/etc/ \ 						#设置php配置文件(php.ini)的存放位置,
#一般来说安装php的时候只需要指定这两个路径即可,其他的则是指定php支持哪一些组件了
--with-apxs2=/usr/local/apache2/bin/apxs  \							#调用apache2
--with-mysql=/usr/local/mysql/ \ 									#调用mysql
--with-libxml=/usr/local/libxml2/ \									#调用libxml2库
--with-libjpeg=/usr/local/jpeg6/ \									#调用jpeg库
--with-libpng=/usr/local/libpng/  \									#调用libpng库
--with-freetype=/usr/local/freetype/  \								#调用freetype库
--with-mcrypt=/usr/local/libmcrypt/ \								#调用libmcrypt库
--with-mysqli=/usr/local/mysql/bin/mysql_config 					#增加MysqlLi功能
--with-pdo-mysql=/usr/local/mysql \									#启用mysql的pdo模块支持
--enable-soap \														#支持SOAP和Web Services
--enable-mbstring=all \												#支持多字节字符串
--enable-mbregex \													#支持处理正则表达式
--enable-sockets \													#支持socket(套接字)通信
--enable-gd \ 														#支持gd库

#后续这些功能可以视情况追加,但需要提前安装好相应环境。其中问题最大的使用--with-openssl,在centos8上存在库调用问题
--with-curl  --with-gettext --with-kerberos --with-libdir=lib64  --with-openssl  --with-pdo-sqlite --with-pear  --with-mhash --with-ldap-sasl --with-xsl --with-zlib --with-zip -with-bz2 --enable-fpm --enable-pdo  --enable-bcmath --enable-opcache --enable-pcntl  --enable-shmop --enable-sysvsem --enable-xml --enable-sysvsem --enable-cli --enable-intl --enable-calendar --enable-static --enable-mysqlnd --with-iconv

#编译安装
[root@localhost php-8.1.12]# make && make install

  • 编译安装PHP8存在问题1:

libtool: link: warning: library /usr/lib64/libonig.la' was moved. libtool: link: warning: library /usr/lib64/libonig.la’ was moved.
#报以上错误的原因在于: 类似于这种的la文件/usr/lib64/libonig.la中的最后的libdir='/usr/local/oniguruma/lib’位置有误导致,需要正确安装oniguruma库后在配置此文件

  • 编译安装PHP8存在问题2:configure: error: iconv does not support errno
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

tar -zxvf libiconv-1.14.tar.gz

cd libiconv-1.14

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

make && make install

# 添加 --with-iconv=/usr/local/libiconv 编译参数,重新 configure
  • 在编译安装libiconv存在问题3:提示如下错误:stdio.h:1010:1: error: 'gets;undeclared here (not in a function)

在这里插入图片描述

解决方法:

使用命令找到该文件find / -name 'stdio.h’或 find / -name stdio.in.h这两个文件都可以,修改的是统一的内容,只是位置不同

/usr/local/src/libiconv-1.14/srclib/stdio.h #1010行

/usr/local/src/libiconv-1.14/srclib/stdio.in.h #698行

然后直接编辑1010行 vi +1010 /usr/local/src/libiconv-1.14/srclib/stdio.h文件,注释这一行
然后在注释行下面添加下面三行

 #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)

_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

#endif

保存退出后,直接编译安装 make && make install

在这里插入图片描述

编译安装PHP8存在问题4:在开启–enable-openssl时,centos8报如下错误:找了网上的方法都无法解决,所以暂时不开启次功能

/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/libk5crypto.so: undefined reference to EVP_KDF_derive@OPENSSL_1_1_1b' /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/libk5crypto.so: undefined reference to EVP_KDF_ctrl@OPENSSL_1_1_1b’
/usr/lib/gcc/x86_64-redhat-linux/8/…/…/…/…/lib64/libk5crypto.so: undefined reference to EVP_KDF_CTX_free@OPENSSL_1_1_1b' /usr/lib/gcc/x86_64-redhat-linux/8/../../../../lib64/libk5crypto.so: undefined reference to EVP_KDF_CTX_new_id@OPENSSL_1_1_1b’
collect2: error: ld returned 1 exit status
make: *** [Makefile:308: sapi/cli/php] Error 1

4.查看php安装情况:切换到configure指定的安装路径的bin目录,执行版本查看:

[root@CncLucZK php-8.0.0]# /usr/local/php/bin/php -v
PHP 8.0.0 (cli) (built: Nov  4 2022 21:35:58) ( ZTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

5.建立PHP配置文件

  • 和 MySQL一样,这个配置文件不用手工建立,也是有模板文件的,我们只需复制即可。命令如下:
cp /usr/local/src/php-8.0.0/php.ini-production /usr/local/php/etc/php.ini

6.让apache可以识别“.php”扩展名

  • 在安装 PHP 时,在 ./configure 命令中使用 --with-apxs2=/usr/local/apache2/bin/apxs 选项,已经把 PHP 作为模块被 apache 识别了。不过,apache 并不知道哪些扩展名的文件要调用 PHP 模块来解析(如果是 apache 不认识的扩展名,那么客户端在访问时,apache 不会尝试解析,而是提示客户端下载),所以我们需要修改 apache 的配置文件,让 apache 可以认识 PHP 脚本的扩展名。

  • 让 apache 在遇到“.php”和“.phps”扩展名时,调用 PHP 模块来解析这些文件的内容,那么我们只需要执行如下命令:

#修改apache配置文件,加入如下内容
[root@localhost php-5.4.25]# vi /usr/local/apache2/etc/httpd.conf
...
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .phps 			#这句话的意思是:如果遇到.php和.phps扩展名,则调用PHP模块来解析这个文件的内容
...

这句话加载在 apache 配置文件中的任何位置都是可以的,不过系统中有类似的语句 AddType application/x-gzip.gz.tgz,那么我们一般将其加载到这句话后面。至于 PHP 文件的扩展名,可以自由定义。

在这里插入图片描述
7.重启Apache服务器:我们修改了 apache 的配置文件,如果想让这个修改生效,那么必须重启 Apache 服务器。重启命令如下:

#重启apache服务systemctl restart apache
[root@CncLucZK php]# service apache stop
[root@CncLucZK php]# service apache start
httpd not running, trying to start

这里最好不要使用 restart 参数,因为对于源码包的 apache 启动命令,restart 参数有时会不起作用。

8.测试PHP环境是否正常

  • 对源码包安装的 apache 来讲,网页的默认保存位置是 /usr/local/apache2/htdocs/ 目录。为了测试 PHP 环境是否正常,我们需要在这个目录中建立一个 PHP 文件,看看这个文件是否可以正常显示。命令如下:
[root@CncLucZK php]# vi /usr/local/apache2/htdocs/index.php
<?php
phpinfo();
?>
  • 这里我们使用了 phpinfo() 函数,这个函数的主要作用是显示 PHP 的相关信息,这些信息包括 PHP 的编译信息、PHP 的版本、服务器信息和环境、PHP 的环境、操作系统信息、路径、主要的配置选项、HTTP 头信息和 PHP 的许可等。我们一般使用这个函数来测试 PHP 是否安装成功,接下来在浏览器中输入“http://服务器IP/index.php”来执行该文件,如下图所示则PHP 安装成功。

在这里插入图片描述

下一篇:Linux学习-85-memcache、Docker安装和配置(自启动)过程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux学习-84-安装PHP 的相关文章

  • 重置密码 电子邮件

    我是 Laravel 开发新手 目前正在从事小型项目 我想自定义重置密码的电子邮件模板 甚至将其链接到完全不同的模板 对于身份验证脚手架 我使用了php artisan make auth命令 但是 默认重置密码功能使用默认的 Larave
  • 如何在变量中存储包含哈希标记的完整 url?

    我正在尝试存储一个网址 例如 http localhost pro print index php page home http localhost pro print index php page home 在变量中 但我找不到执行此操作
  • laravel 4 登录验证失败

    在 Laravel4 中 我在路由中编写了以下代码 但它总是将我重定向到登录页面 我用谷歌搜索并在堆栈溢出上找到了它 并尝试了所有解决方案但没有成功 我确信这将是一个愚蠢的错误 但请跟踪它 谢谢 Routes Route post logi
  • PHP、htaccess:在 URL 中应用页面标题

    我想在 URL 中应用页面 HTML 标题 例如 在这里 stackoverflow url 是这样的 http stackoverflow com questions 10000000 get the title of a page ur
  • 正则表达式删除块注释也删除 * 选择器

    我正在尝试使用 bash 从 css 文件中删除所有块注释 我有以下 sed 命令的正则表达式 sed r s w s w d 这可以很好地去除块注释 例如 This is a comment this is another comment
  • 构建错误:致命错误:pcre.h:没有这样的文件或目录

    我刚刚安装完 Ubuntu 13 10 我想尝试 Phalcon 当我构建源代码 phalcon so 时 出现以下错误 from home fabrice Downloads cphalcon build 32bits phalcon c
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 使用 fgetcsv 循环遍历 csv

    我有一个包含 3 列的 csv 文件 电子邮件地址 名 and 姓 我已经到了可以使用以下代码打印数组的阶段 这会打印数组 因此每个字段都在一行中 我希望它打印的只是该行第一列中的值 这是如何完成的 关于 fgetcsv 的文档对我 相对初
  • Blade @if 中的 Laravel 会话变量

    当我尝试使用 Laravel Session 在刀片中设置 JS 变量来刷新一些数据时 我在 Laravel 4 2 中遇到了一些奇怪的情况 这很简单 我不知道我错过了什么 目标 在用户注册后立即触发 Javascript 网站浏览 方法
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • PHP 检查字符串是否只包含任何语言的字母、数字和空格

    我如何检查字符串是否只包含任何语言中的字母 数字和空格 我已经尝试过 但它不检查像 这样的特殊字符 preg match p L u string preg match p N u string 您可以使用 preg match p L p
  • Magento - 当我的订单取消或退款时如何运行代码

    如果订单被取消或退款 我的支付模块需要向支付服务发送通知 我假设订单页面 在管理后端 上的 取消 按钮将取消订单 而 贷项通知单 按钮 创建发票后 将退还订单 如何针对这些事件运行我的代码 我尝试在付款方式模型中使用 cancel 方法 但
  • 如何在线程创建和退出时调用函数?

    include
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 比较表中的行以了解字段之间的差异

    我有一个包含 20 多列的表 客户端 其中大部分是历史数据 就像是 id clientID field1 field2 etc updateDate 如果我的数据如下所示 10 12 A A 2009 03 01 11 12 A B 200
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • 使用 PHP 获取 2 个同名 HTML 输入标签的值

    假设我有下表
  • PHP - Filter_var 替代方案?

    我构建了一个 php 脚本来输出以表单形式发布的数据 但遇到了问题 网站将运行的服务器运行 PHP 5 1 6 此版本的 PHP 不支持 filter var 我需要知道短期内的替代方案 最好是昨天 但在 Google 或 Stack Ov
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月

随机推荐

  • register关键字详解

    前言 xff1a 编译器的优化很大程度上就是通过数据流分析 调整读取内存的顺序等 xff0c 减少CPU对内存的读写 因为内存的运行速度相对于CPU是很慢的 xff0c 计算机中添加cache就是为了解决CPU和内存运行速度差异过大的问题
  • 海思烧录工具HiTool的使用方法以及烧录uboot

    1 什么是HiTool HiTool是海思公司提供的用于海思芯片的烧录工具 xff0c 可用于烧录uboot kernel rootfs等 这里只是简单的介绍用HiTool通过串口去烧写uboot xff0c 更加仔细的使用方法可以参考海思
  • /etc/profile文件简单介绍

    什么是 etc profile文件 etc profile文件为系统的每个用户设置环境变量信息 此文件的修改会影响到所有用户 想了解更多细节内容可以用 xff1a vi etc profile 命令进行查看 etc profile文件和 b
  • 五月再不跳槽,就晚了

    从时间节点上来看 xff0c 3月 4月是每年跳槽的黄金季 xff01 之后的五月也会放出一些岗位 以 BAT 为代表的互联网大厂 xff0c 无论是薪资待遇 还是平台和福利 xff0c 都一直是求职者眼中的香饽饽 xff0c 大厂经历 在
  • I2C通信协议详解和通信流程分析

    1 I2C通信特征 1 1 物理接口 xff1a SCL 43 SDA 1 SCL serial clock xff1a 时钟线 xff0c 传输CLK信号 xff0c 一般是I2C主设备向从设备提供时钟的通道 2 SDA serial d
  • 用LED驱动框架注册led设备的示例代码

    1 LED驱动框架分析 参考博客 xff1a 内核LED驱动框架讲解以及led设备注册示例代码 xff1b 2 简单的用LED驱动框架注册led设备的代码 span class token macro property span class
  • 【C++入门】静态成员详解(定义、实现原理、使用注意事项)

    1 类的静态成员 1 在类中用static修饰成员 xff0c 则该成员是静态成员 xff1b 2 静态成员是属于类本身的 xff0c 所有类的对象共享 xff1b 3 类的对象都可以访问静态成员 xff0c 但是所有类的成员访问的静态成员
  • pci总线协议学习笔记——PCI总线基本概念

    1 pci总线概述 1 PCI xff0c 外设组件互连标准 Peripheral Component Interconnection xff0c 是一种由英特尔 xff08 Intel xff09 公司1991年推出的用于定义局部总线的标
  • RK3568芯片开发笔记——调试pwm控制红外功能

    1 PWM介绍 参考博客 xff1a ARM芯片开发 xff08 S5PV210芯片 xff09 定时器 看门狗 RTC xff1b 2 配置pwm功能的方法 1 内核层 xff1a 内核代码里有pwm子系统 xff0c 里面有pwm相关函
  • 海思芯片(hi3536av100)启动模式选择

    1 支持多种模式可配置 1 支持BootRom启动 2 支持从 SPI NOR Flash 启动 3 支持从 SPI NAND Flash 启动 4 支持从 eMMC 启动 5 支持 PCIe 从片启动 2 启动方式的选择 BOOT SEL
  • C语言头文件详解

    1 include的作用 简单一句话 xff1a 在include的地方 xff0c 把头文件里的内容原封不动的复制到引用该头文件的地方 2 头文件的引用 头文件引用有两种形式 xff1a include lt stdio h gt 和 i
  • wps云文档 wps自动备份怎么设置和取消

    转载请说明来源于 34 厦门SEO 34 本文地址 xff1a http www 96096 cc Article 169633 html wps云文档 WPS 为用户提供了自动备份的功能 xff0c 这为用户带来了方便的同时也给用户带来了
  • IDEA中Spring的配置使用

    IDEA中Spring的配置使用 1 首先创建JavaEE Web Application项目 xff0c 勾选Spring xff0c Libraries选择Set up library later xff08 有spring jar包的
  • content-type类型总结

    content type content type是http请求的响应头和请求头的字段 当作为响应头时 xff0c 告诉客户端实际返回的内容的内容类型 作为请求头时 xff0c 客户端告诉服务器实际发送的数据类型 前端开发过程中 xff0c
  • 外包干了6年,寄了

    前两天有读者想我资讯 xff1a 我是一名Android工程师 xff0c 工作已经四年多快五年了 现在正在找工作 xff0c 由于一直做的都是外包的项目 技术方面都不是很深入 xff0c 现在找工作都是会问一些 xff0c 四大组件 xf
  • java.lang.RuntimeException: Unable to instantiate activity ComponentInfo(不能实例化)异常解决

    java lang RuntimeException Unable to instantiate activity ComponentInfo xff08 不能实例化 xff09 异常解决 一 可能出现的原因及解决方法 xff1a xff0
  • Error:java: Compilation failed: internal java compiler error 的解决过程

    1 错误描述 xff1a IDEA导入一个新的项目 xff0c 运行时包编译失败 2 错误原因 这个错误的原因是因为 JDK 版本问题 xff0c 有两个原因 xff0c 一个是编译器版本不匹配 xff0c 一个是当前项目 JDK 版本不支
  • SpringCloud-21-Hystrix全局降级和解耦降级逻辑

    8 6 全局降级方法 通过上面的方式实现服务降级时 xff0c 需要针对所有业务方法都配置降级方法 xff0c 这极有可能会造成代码的急剧膨胀 为了解决该问题 xff0c 我们还可以为所有业务方法指定一个全局的回退方法 xff0c 具体步骤
  • Linux学习-61-Linux系统服务管理

    14 Linux系统服务管理 系统服务 xff1a 服务是在后台运行的应用程序 xff0c 并且可以提供一些本地系统或网络的功能 Linux 中常见的服务有那些 xff0c 这些服务怎么分类 xff0c 服务如何启动 xff0c 服务如何自
  • Linux学习-84-安装PHP

    17 13 安装PHP PHP xff08 PHP xff1a Hypertext Preprocessor递归缩写 xff09 中文名字是 xff1a 超文本预处理器 xff0c 是一种广泛使用的通用开源脚本语言 xff0c 适合于Web