素材巴巴 > 程序开发 >

如何动态增加php模块,动态编译添加php模块

程序开发 2023-09-09 10:41:34

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2xpbnV4LnBuZw==.jpg

在很多时候我们用linux里搭建web服务器的时候会需要编译安装php套件,而在编译安装后可能又会需要添加一些编译安装时没有指定要编译进去的模块,例如如下情况:

mysql.so 或mysqli.so 、mbstring.so  zlib.so 等模块。

这里提示一下:

如果你有安装过phpmyadmin而且在安装配置好之后打开首页是空白的,那么很有可能就是你的php没有mysql和mbstring这两个模块。

还有就是在线安装wordpress插件时提示没有zlib插件也是因为你的php环境里没有 zlib.so 这个模块。

以上都是笔者经历过的,希望可以对解决你的问题有些帮助。

好了,现在进入正题,动态编译并添加php模块:

注明一下,本博文只讨论已经安装了php的linux环境。

此时你需要保存有以前编译安装php时候用的php源码。如果没有,你可以到http://cn2.php.net/downloads.php这里下载与你已经安装了的php版本一样的源码包(这里版本最好一样或者接近,版本不一样可能会存在不适配)。

还有你需要知道你的php是安装在哪里的,因为等下要用到安装目录下/bin/phpize 这个工具。

如果你不知道你的php目录安装在哪里,可以find命令来查找phpize 这个文件在哪里。

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMS5qcGc=.jpg

lfly@linux-oj9e:~> sudo find / -name phpize

这里我找到我的php就安装在/php下。

好了,这里我下载一个php-5.5.18.tar.gz这个源码包。

下载好了以后用tar -zxvf 解压。(只针对.tar.gz压缩包)

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMi5qcGc=.jpg

lfly@linux-oj9e:~/temp> tar -zxvf php-5.5.18.tar.gz

解压后得到一个php-5-5-18文件夹

然后cd 进去那个目录里面的ext 目录:

lfly@linux-oj9e:~/temp> cd php-5.5.18/ext

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMy5qcGc=.jpg

用ls 命令列出文件后可以看到很多文件夹:

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlNC5qcGc=.jpg

这些就是你要编译的模块的源码目录。这里我假设要编译的是mysql模块,那们我们就cd 到mysql 这个目录里,如果你要编译其它模块,那么就cd进对应那个模块。

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlNTEuanBn.jpg

lfly@linux-oj9e:~/temp/php-5.5.18/ext/mysql>  /php/bin/phpize

Cd 进去后我们调用上面提到的那个phpize脚本。

Phpize脚本是什么?

这里提及一下:

Phpize可以理解为侦察环境的作用。phpize工具会根据你已经安装的php的配置情况生成对应的configure文件。

执行这个命令后可能会提示没有安装 autoconf这个程序,如果这样你就要安装好这个软件再来运行这个命令。

我这里是没有问题的:

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlNjEuanBn.jpg

Phpize 运行没有问题后就用 ./configure –with-php-config=/php/bin/php-config

这里/php/bin/php-config要换成你的Php安装目录。比如是/usr/local/aaa那么你就搭成/usr/local/aaa/bin/php-config

执行这步后如果没有报错就执行make 命令。

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlNzEuanBn.jpg

如果执行make 命令也没有报错,那么接着执行make install 命令。

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlODEuanBn.jpg

我这里make install 发现报错,因为普通用户没有权限把编译好的模块安装到php的安装目录下。

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlOTEuanBn.jpg

此时可以用sudo执行make install 命令或者直接切换到root用户下执行,执行时需要输入你的密码。

Make install安装成功后还要干两件事:

其一是: 在php.ini的配置文件里加上一句:

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMTAxLmpwZw==.jpg

extension=mysql.so

这里假设是编译mysql模块,如果是其它就其它模块名.

比如:

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMTExLmpwZw==.jpg

如果你不知道你刚编译的模块是什么名称,你可以到php的模块目录下查看下:

L3Byb3h5L2h0dHAvd3d3LnByb2dyYW1maXNoLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE0LzEwL2ltYWdlMTIuanBn.jpg

我这里已经编译安装了4个模块。

第二件事就是重启下你的apache。(如果你安装的是apache提供web服务的)

注意:转载请注明 “作者:广州Linux爱好者+云计算 刁金明”

ANGULARJS 动态编译添加到dom中

在使用angularjs 时,希望通过动态构建angular模版,再通过angular进行展示. 使用 方法如下:

nginx重新编译添加ssl模块

https://www.cnblogs.com/zhming26/p/6278667.html https nginx配置 找到安装nginx的源码根目录,如果没有的话下载新的源码 http://ng ...

Nginx重新编译添加新模块

找到nginx的安装包目录,如果没有的话去官网重新下载 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录,重新设置nginx ./c ...

编译nginx平滑添加stream模块

1.操作背景 操作系统版本:CentOS Linux release (Core) nginx版本:1.13.4 nginx从1.9.0版本开始,新增了ngx_stream_core_module模块 ...

apache动态编译与静态编译

静态: 在使用./configure 编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个 ...

Apache静态编译与动态编译详解

Apache拥有4层结构,从核心到外层的module.而外层的module可以用通过静态和动态两种方式与Apache共同工作.这也就引入下文的“动态”和“静态”两种编译安装方式: 静态编译: 编译的时 ...

nginx编译安装新模块

nginx的模块是需要重新编译nginx,而不是像apache一样配置文件引用.so 这里以安装第三方ngx_http_google_filter_module模块为例 下载第三方扩展模块ngx_ht ...

nginx使用热部署添加新模块

简介 当初次编译安装nginx时,http_ssl_module 模块默认是不编译进nginx的二进制文件当中,如果需要添加 ssl 证书.也就是使用 https协议.那么则需要添加 http_ssl ...

玩玩 Nginx 2-----给Nginx添加第三方模块(动态更新upstream)

接上一篇,我们在初始化安装的时候添加了nginx_lua模块,然后了解到nginx不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.接下来一起看看如何安装nginx第 ...

随机推荐

spring boot注解 --@EnableAsync 异步调用

EnableAsync注解的意思是可以异步执行,就是开启多线程的意思.可以标注在方法.类上. @Component public class Task { @Async public void doT ...

Xcode7 制作通用的framework(转)

2016-01-07 16:24 2994人阅读 评论(0) 收藏 举报 分类: ios x code(55) 1.新建一个静态库工程. file→ new→ project, 弹出框中选择iOS ...

【netstream】探索数据传输对象1

什么是“从当前流中读取一个字符串.字符串有长度前缀,一次 7 位地被编码为整数.” 来探索一下: 写一段简单的程序: FileStream fs= new FileStream("d:\q ...

Python学习_IDLE快捷键以及列表相关杂记

IDLE快捷键 Tab完成:键入部分代码,按下TAB键,IDLE将给出列表帮助完成语句 回退代码语句:按下Alt+P(Previous),可以回退到IDLE中之前输入的代码语句, 下一个代码语句:按下 ...

IIS Web服务扩展中添加ASP.NET4.0

问题 服务器上安装了ASP.NET 4.0.30319组件,但是在IIS的Web服务扩展中并没有找到ASP.NET v4.0.30319这项,这导致基于.NET4.0开发的网页都无法正常浏览(404错 ...

【Python】使用多个迭代器

如果要达到多个迭代器的效果,__iter__()只需替迭代器定义新的状态对象,而不是返回self class SkipIterator: def __init__(self, wrapped): se ...

(十六)java中的String

String:字符串类型,是java中最常用的引用类型,String是不可变的,java.lang.String是由final修饰,此类不可被继承.     String是不可变的,指的是字符串一旦创 ...

[Leetcode]237. Delete Node in a Linked List -David_Lin

Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

GParted: GNOME Partition Editor, sharp weapon to modify disk partitions.

GParted Projects GNOME Partition Editor for creating, reorganizing, and deleting disk partitions. It ...

TF-IDF 提取关键词


标签:

上一篇: ANGULARJS 出错解决 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。