从php源码中补充编译安装GD模块扩展的一些问题

2024-08-24 06:38

本文主要是介绍从php源码中补充编译安装GD模块扩展的一些问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上篇博客,主要写了关于日志服务器的搭建。

centos+rsyslog+mysql+loganalyzer搭建日志服务器_大橘子的博客-CSDN博客

其中loganalyzer界面需要图表,于是才需要安装gd模块。可以先尝试yum安装gd,然后php当中调用它。我这个因为版本不兼容,所以只好定制安装。

按照网上大神的说法,需要这些依赖:jpeg,libpng,freetype,zlib。这些东西都可以单独在官网下载源码。网址如下:

jpeg:http://www.ijg.org/

libpng:http://www.libpng.org/

freetype:https://freetype.org/

zlib:http://www.zlib.net/

我用的php是之前搭建lamp时编译安装的php5.6。之前的两个博客详细提到过。

mariadb10.5.13+php5.6.40,解决/tmp/mysql.sock_大橘子的博客-CSDN博客

apache和php的两种组合方式,module和fpm_大橘子的博客-CSDN博客

当时选择php5.6的意图,在于系统环境是centos6,如果下载最新的php8,首先要求libxml2-2.9,而且还不止这个问题,不想无限延伸,所以就选了老些的版本。

这一次我也一样有类似尝试。我选择的各版本分别是:jpeg9e(最新),libpng1.6.37(最新),freetype2.5.0(折中),zlib和gd都是php源码包中带了模块源码,只是默认不编译。

其中freetype使用最新版本时,php5.6自带的gd编译不通过,又不想用最新php8,所以只好妥协freetype。

下面是重要过程记录:

回顾php:

php-mod方式:

 ./configure --prefix=/usr/local/php-mod --sysconf=/usr/local/php-mod/conf --with-config-file-path=/usr/local/php-mod/conf --with-config-file-scan-dir=/usr/local/php-mod/conf.d --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-bz2 --with-apxs2=/usr/local/apache/bin/apxs --enable-maintainer-zts

php-fpm方式:

./configure --prefix=/usr/local/php-fpm --sysconf=/usr/local/php-fpm/conf --with-config-file-path=/usr/local/php-fpm/conf --with-config-file-scan-dir=/usr/local/php-fpm/conf.d --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --with-mcrypt --with-bz2 --enable-fpm

我两种都装了,为的就是灵活。配置文件路径尽量避开系统默认位置。

apache我装在了/usr/local/apache,配置文件路径/usr/local/apache/conf,一定要避开系统默认位置。个人习惯而已,将来不用了直接删除,简单。

jpeg和libpng:

        ./configure --prefix=/usr/local/jpeg --enable-shared
        make -j 4 && make install            
        ./configure --prefix=/usr/local/libpng --enable-shared
        make -j 4 && make install

        过程简单没特别说明的。

        有些源码中直接有configure,有些有autogen.sh,可以自动执行configure,但是有些需要在脚本中设置路径。具体一看便知。

freetype2.6:

 正常执行configure时报错:

checking for libpng... which: no libpng-config in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
configure: error: `libpng-config' not found;
either set the LIBPNG_CFLAGS and LIBPNG_LDFLAGS environment variables,
or pass `--without-png' to the `configure' script.
make: *** [setup] Error 1

开始我天真地以为,加上--with-png=/usr/local/libpng就可以了,而且理论上这是可以满足要求的,因为libpng的安装目录结构完好,其bin目录下确实有libpng-config,咋就不行了?而且--with-png这个参数也不是瞎给的,给错会提示。

我注意到它搜索的路径其实是path环境变量,但是我的习惯是,临时用一下不值得去修改一些固定的东西。所以我使用了():

(PATH=$PATH:/usr/local/libpng/bin;./configure --prefix=/usr/local/freetype --enable-shared)
make -j 4 && make install

括号里临时执行一下即可,然后编译成功。

zlib和gd:

这两个在php源码目录中可以找到,分别在ext/zlib和ext/gd。这种属于补充编译。我以为和编译内核似的可以使用M=,但是不行的。应该这样:

首先进入到模块源码目录,这时候里面没有configure。

其次需要以这个目录为当前目录,调用执行phpzie程序,比如:/usr/local/php-mod/bin/phpize。这个没有一定,看php程序在什么地方了 ,上面是我编译安装php的位置。

我编译zlib时遇到它报错了,因为没找到config.m4文件,但是有个config0.m4,很简单,复制或者重命名一个就行了。

然后phpize会在当前目录下生成configure以及相关编译工具文件。然后就正常编译:

gd:

./configure --with-php-config=/usr/local/php-mod/bin/php-config --with-jpeg-dir=/usr/local/jpeg/ --with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ 
make -j 4 && make install            

zlib:
./configure --with-php-config=/usr/local/php-mod/bin/php-config
make -j 4 && make install 

有些参数,开始不知道可以什么都不加,如果需要它会报错的。一看错误信息就知道了。编译安装完成后,它会生成模块文件,并放在php程序的扩展目录:

/usr/local/php-mod/lib/php/extensions/no-debug-zts-20131226

只要在这个目录下,php.ini当中就可以直接指定相对路径的。比如这样:

extension=zlib.so(这一项我试过,没有也行)
extension=gd.so
但是文件中的说明一定要看好,很多dll那种是给windows用的,linux上也没那些dll。

提醒:

上面做了这么多,我是以php-mod为例说明的,如果也装了php-fpm,一定要看好了到底用的是哪个,apache配置文件记着做好。我的习惯,不喜欢总修改原有的,所以httpd.conf的尾部我加了:

# php
Include conf/extra/httpd-php.conf

并且注释掉原有的php模块引用。

#LoadModule php5_module        modules/libphp5.so
然后在httpd-php.conf子文件中写:


#php-fpm option
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so#ProxyRequests Off
#ProxyPassMatch ^/(.*\.php)$  fcgi://127.0.0.1:9000/a_html/$1#php-mod option
LoadModule php5_module        modules/libphp5.so#php-common option
<IfModule dir_module>DirectoryIndex index.php index.html
</IfModule>
<IfModule mime_module>AddType application/x-httpd-php .phpAddType application/x-httpd-php-source .phps
</IfModule>
~                                                                                                                                                                           
~                                                                                                                                                                           
~                                          

这样,配置文件也是模块化的,修改方便。

当然,我在php-fpm模式下也测试过了,没问题。但是千万别偷懒,zlib和gd模块是需要重新编译成php-fpm模式的,--with-php-config选项指定相应位置即可。

其实熟悉了以后,操作非常快,主要是知道原理。

测试:

一切就绪后重启httpd服务,然后打开phpinfo页面查看。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5qmY,size_20,color_FFFFFF,t_70,g_se,x_16

 可以看到有了gd内容,都是enabled。

再看loganalyzer的statistics页面,图表也出来了,很美观。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5aSn5qmY,size_20,color_FFFFFF,t_70,g_se,x_16

至此完成。

每次操作,程序方面我都尽量选新版本。为了考虑centos6的兼容,所以php和freetype都相应降级,而其它程序我都选择了最新,比如mariadb ,jpeg,libpng,discuz,phpmyadmin,wordpress等。每次遇到问题,解决问题的过程才是成长的过程。

本文完。

这篇关于从php源码中补充编译安装GD模块扩展的一些问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101736

相关文章

Win10安装Maven与环境变量配置过程

《Win10安装Maven与环境变量配置过程》本文介绍Maven的安装与配置方法,涵盖下载、环境变量设置、本地仓库及镜像配置,指导如何在IDEA中正确配置Maven,适用于Java及其他语言项目的构建... 目录Maven 是什么?一、下载二、安装三、配置环境四、验证测试五、配置本地仓库六、配置国内镜像地址

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

解决RocketMQ的幂等性问题

《解决RocketMQ的幂等性问题》重复消费因调用链路长、消息发送超时或消费者故障导致,通过生产者消息查询、Redis缓存及消费者唯一主键可以确保幂等性,避免重复处理,本文主要介绍了解决RocketM... 目录造成重复消费的原因解决方法生产者端消费者端代码实现造成重复消费的原因当系统的调用链路比较长的时

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

kkFileView启动报错:报错2003端口占用的问题及解决

《kkFileView启动报错:报错2003端口占用的问题及解决》kkFileView启动报错因office组件2003端口未关闭,解决:查杀占用端口的进程,终止Java进程,使用shutdown.s... 目录原因解决总结kkFileViewjavascript启动报错启动office组件失败,请检查of

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

Redis MCP 安装与配置指南

《RedisMCP安装与配置指南》本文将详细介绍如何安装和配置RedisMCP,包括快速启动、源码安装、Docker安装、以及相关的配置参数和环境变量设置,感兴趣的朋友一起看看吧... 目录一、Redis MCP 简介二、安www.chinasem.cn装 Redis MCP 服务2.1 快速启动(推荐)2.