从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安装及配置Gradle全过程

《win10安装及配置Gradle全过程》本文详细介绍了Gradle的下载、安装、环境变量配置以及如何修改本地仓库位置,通过这些步骤,用户可以成功安装并配置Gradle,以便进行项目构建... 目录一、Gradle下载1.1、Gradle下载地址1.2、Gradle下载步骤二、Gradle安装步骤2.1、安

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Python sys模块的使用及说明

《Pythonsys模块的使用及说明》Pythonsys模块是核心工具,用于解释器交互与运行时控制,涵盖命令行参数处理、路径修改、强制退出、I/O重定向、系统信息获取等功能,适用于脚本开发与调试,需... 目录python sys 模块详解常用功能与代码示例获取命令行参数修改模块搜索路径强制退出程序标准输入

Python pickle模块的使用指南

《Pythonpickle模块的使用指南》Pythonpickle模块用于对象序列化与反序列化,支持dump/load方法及自定义类,需注意安全风险,建议在受控环境中使用,适用于模型持久化、缓存及跨... 目录python pickle 模块详解基本序列化与反序列化直接序列化为字节流自定义对象的序列化安全注

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github