Php8.X的版本中安装Sphinx扩展支持的记录

embedded/2024/12/22 0:31:42/

        Php技术现在感觉越来越没落了,我也很久没有再接触使用过PHP,今天有一个很多年前的项目发现在使用 sphinx ,而最新的升级后发现新的 php8版本的docker 容器镜像中没有安装 sphinx 扩展,导致搜索功能不可用,个人又总是看不惯问题的存在,就想着把它解决。但解决一些麻烦问题的过程总是一波三折,今天把这个放在这里做个记录,同时也希望为一些会碰到相同问题的朋友提供一点帮助。

        安装 sphinx 需要进行两个大步的操作,第一步是安装 Sphinx客户端库的开发包,第二步是给PHP安装sphinx的扩展,如果直接进行第二步安装sphinx扩展,就会收到错误提示:Cannot find libsphinxclient headers。

root@267aa5d53517:/var/www/html/exts/sphinx-1.1.0# ./configure --with-php-checking for PHP extension directory... /usr/local/lib/php/extensions/no-debug-non-zts-20210902
checking for PHP installed headers prefix... /usr/local/include/php
checking if debug is enabled... no
checking if zts is enabled... no
checking for gawk... no
checking for nawk... nawk
checking if nawk is broken... no
checking for sphinx support... yes, shared
checking for libsphinxclient headers in default path... not found
configure: error: Cannot find libsphinxclient headers

        报错解释: Cannot find libsphinxclient headers,这个错误表明系统中缺少Sphinx全文搜索引擎的客户端库的头文件。Sphinx客户端库是用于与Sphinx搜索服务器通信的,而头文件通常用于编译需要与该库交互的程序。

        我这里的是基于Ubuntu 搭建的 Docker 服务,大多操作都是在Docker容器中进行,周知,所以接来开始进行操作 :

一:安装 Sphinx客户端库的开发包

        Sphinx客户端库的开发包的官网地址如下,

  Sphinx 3 downloads | Sphinxicon-default.png?t=O83Ahttps://sphinxsearch.com/downloads/current/        进入下载对应的系统版本文件,截图如下:

# 下载后解压进入目录 注意是进入api下面的目录文件夹中

cd sphinx-3.7.1/api/libsphinxclient/
mkdir -p /usr/local/php/sphinx
./configure --prefix=/usr/local/php/sphinx
make
make install

        也有一些提议使用 apt-get 安装,记在这里,我一开始用的如下命令,但提示E: Unable to locate package libsphinxclient-dev。这步操作应该没有什么问题。

sudo apt-get update
sudo apt-get install libsphinxclient-dev

 二、安装 Php 的 sphinx 扩展

        为php安装sphinx扩展,首先要下载 sphinx 扩展包,其官网地址如下:PECL :: Package :: sphinxicon-default.png?t=O83Ahttp://pecl.php.net/package/sphinx

      开始我下载了页面中的最新版本 sphinx-1.3.3.tgz  ,但在安装的时候发现有大量报错内容,

/var/www/html/exts/sphinx-1.0.3/sphinx.c:1577:2: error: too few arguments to function 'php_error_docref'
 1577 |  php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "SphinxClient instance cannot be (un)serialized");
      |  ^~~~~~~~~~~~~~~~
In file included from /var/www/html/exts/sphinx-1.0.3/sphinx.c:26:
/usr/local/include/php/main/php.h:327:23: note: declared here
  327 | PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format, ...)
      |                       ^~~~~~~~~~~~~~~~
/var/www/html/exts/sphinx-1.0.3/sphinx.c: In function 'zm_startup_sphinx':
/var/www/html/exts/sphinx-1.0.3/sphinx.c:1773:45: error: 'php_sphinx_client_read_property' undeclared (first use in this function); did you mean 'php_sphinx_client_handlers'?
 1773 |  php_sphinx_client_handlers.read_property = php_sphinx_client_read_property;
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                             php_sphinx_client_handlers
/var/www/html/exts/sphinx-1.0.3/sphinx.c:1774:46: error: 'php_sphinx_client_get_properties' undeclared (first use in this function); did you mean 'php_sphinx_client_handlers'?
 1774 |  php_sphinx_client_handlers.get_properties = php_sphinx_client_get_properties;
      |                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                                              php_sphinx_client_handlers
/var/www/html/exts/sphinx-1.0.3/sphinx.c:1777:53: error: expected ')' before 'TSRMLS_CC'
 1777 |  ce_sphinx_client = zend_register_internal_class(&ce TSRMLS_CC);
      |                                                     ^~~~~~~~~~
      |                                                     )
/var/www/html/exts/sphinx-1.0.3/sphinx.c:1778:36: error: 'php_sphinx_client_new' undeclared (first use in this function); did you mean 'php_sphinx_client'?
 1778 |  ce_sphinx_client->create_object = php_sphinx_client_new;
      |                                    ^~~~~~~~~~~~~~~~~~~~~
      |                                    php_sphinx_client

          因为这些 sphinx 版本过旧,不支持PHP7+,更何况我这现在使用的是最新的php8版本,在有上面的页面中有一个 [ Browse Source ] 链接,进入的页面中有提到 php7 有一个专门的版本,相关的错误见链接: PHP :: Bug #71586 :: Sphinx extension doesn't compile with PHP 7.0.3  页面最下方有说明:

PHP7 support is in a separate branch, called "php7": http://git.php.net/?p=pecl/search_engine/sphinx.git;a=shortlog;h=refs/heads/php7
I'll release a new package version when PECL infrastructure is ready for releases from different branches, but until then you'll have to use Git to get the sources.

        但是上面这个链接的地址打不开!无法访问!唯一的救命稻草竟然打不开啊!真折腾!最后通过在网上直接寻找资源,总算是找到了这个包文件。资源地址链接如下:

https://download.csdn.net/download/weixin_47792780/90145015

        下载资源后进行安装,修改php.ini,添加 sphinx.so 扩展重启php即可。我这里的PHP详细版本是php8.1.4。查看信息界面如下截图:


http://www.ppmy.cn/embedded/147660.html

相关文章

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…

spark 分布式 原理

Apache Spark 是一个快速且通用的大数据处理引擎,它支持分布式计算。Spark 的设计旨在通过高效的内存内计算和对多种数据源的支持来简化大规模数据集的处理。以下是关于 Spark 分布式原理的详细介绍: 1. 架构概述 Driver Program(驱动程序&…

洛谷【贪心算法】P1803 学习笔记

2024-12-20 - 第 41 篇 洛谷贪心算法题单 - 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) P1803 凌乱的yyy / 线段覆盖 题目背景 快 noip 了,yyy 很紧张! 题目描述 现在各大 oj 上有 n n n 个比赛,每个比赛的开始、结…

<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)

(46)问题的起源: 因为上面的内核代码,我们编写多线程代码时,对手里的家伙事不那么自信。但我们知道,多线程在竞争锁时,若得不到锁,会进入睡眠,并会在被唤醒后重新尝试得…

金碟中间件-AAS-V10.0安装

金蝶中间件AAS-V10.0 AAS-V10.0安装 1.解压AAS-v10.0安装包 unzip AAS-V10.zip2.更新license.xml cd /root/ApusicAS/aas# 这里要将license复制到该路径 [rootvdb1 aas]# ls bin docs jmods lib modules templates config domains …

前端解析超图的iserver xml

前端解析超图的iserver xml const res await axios.get(url)const xmlDom new DOMParser().parseFromString(res.data, text/xml);// 获取versionconst version xmlDom.getElementsByTagNameNS(*, ServiceTypeVersion)[0].textContent// 获取layerconst layerDom xmlDom.ge…

发布/部署WebApi服务器(IIS+.NET8+ASP.NETCore)

CS软件授权注册系统-发布/部署WebApi服务器(IIS.NET8ASP.NETCore) 目录 本文摘要VS2022配置发布VS2022发布WebApiIIS服务器部署WebApi 将程序文件复制到云服务器添加网站配置应用程序池配置dns域名配置端口阿里云ECS服务器配置19980端口配置https协议 (申请ssl证书)测试WebAp…

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB,遥感大数据时…