从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 .php
    AddType 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等。每次遇到问题,解决问题的过程才是成长的过程。

本文完。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值