身为一个PHPer菜鸟,服务器上出现问题后,总是不能第一时间找到解决的办法,通过大量踩坑的经验摸索了一些经验,简单记录一下。
下面详细说一下在PHP7.4.X下面如何正确安装GD扩展的全部支持。
如图上面的,JPEG和FreeType一个都不能少。由于手动安装PHP7.4的时候,网上的安装介绍里面的坑太多,导致没有正确安装上GD库的全部支持。接下来手动完成GD的安装。
首先安装libzip,如果已经安装libzip的先卸载一下yum的安装以免冲突。
yum remove -y libzip
下载libzip的软件包,然后编译安装,安装libzip时回车执行即可,什么都不用配置,使用默认即可。
wget https://nih.at/libzip/libzip-1.2.0.tar.gz\
tar -zxvf libzip-1.2.0.tar.gz\
cd libzip-1.2.0\
./configure\
make\
make install
手动安装GD,下载GD软件包。
wget https://github.com/libgd/libgd/releases/download/gd-2.2.3/libgd-2.2.3.tar.gz\
tar -xzvf libgd-2.2.3.tar.gz\
cd libgd-2.2.3\
./configure --enable-shared\
make\
make install\
make clean\
make distclean
下载zlib,注意不要和libzip搞混,这是不同的软件包。
wget http://www.zlib.net/zlib-1.2.11.tar.gz\
tar -xzvf zlib-1.2.11.tar.gz\
cd zlib-1.2.11\
./configure --prefix=/usr/local/zlib --enable-shared\
make\
make install
下载freetype的软件包,定义一下freetype的软件安装目录,建议安装在/usr/local/下面
wget https://download.savannah.gnu.org/releases/freetype/freetype-2.10.1.tar.gz\
tar -xzvf freetype-2.10.1.tar.gz\
cd freetype-2.10.1\
./configure --prefix=/usr/local/freetype --enable-shared\
make\
make install
下载libpng的软件包,同样安装在/usr/local/下面
wget http://jaist.dl.sourceforge.net/project/libpng/libpng16/1.6.31/libpng-1.6.31.tar.gz\
tar -xzvf libpng-1.6.31.tar.gz\
cd libpng-1.6.31\
./configure --prefix=/usr/local/libpng --enable-shared\
make\
make install
下载jpeg的软件包,最新版本是V9D,也可以降到稳定版本。
wget http://www.ijg.org/files/jpegsrc.v9d.tar.gz\
tar -xzvf jpegsrc.v9d.tar.gz\
cd jpeg-9d\
./configure --prefix=/usr/local/libjpeg --enable-shared\
make\
make install
注意:安装软件包时候一定要在configure后面加一个--enable-shared参数。用来生成lib或lib64共享库里面的.so文件。
好了以上支持的软件包都安装完成了,万事俱备,只欠东风。下面在PHP中安装GD扩展。
首先进入你服务器上面的php软件包的安装目录,在目录下面进入/ext/gd/目录下。注意是PHP7.4x的安装文件的目录。不是已经安装好的PHP目录。
例如:cd php-7.4.3/ext/gd
在目录下面执行命令,清除一下残留的make文件。然后用phpize重新生成一下configure,如果设置PHP变量的可以直接使用phpize命令,如果没有设置过变量的要输入命令路径执行命令。
make clean
#/usr/local/php替换自己的php路径
/usr/local/php/bin/phpize
./configure \
--enable-gd \
--with-php-config=/usr/local/php/bin/php-config \
--with-jpeg=/usr/local/libjpeg \
--with-freetype=/usr/local/freetype \
make && make install
phpize操作如果出现了
Cannot find config.m4.
Make sure that you run '/usr/bin/phpize' in the top level source directory of the module
#进入php源码包目录:
cd /usr/local/php-7.4.X/ext/opensslphp
#执行命令:
cp ./config0.m4 ./config.m4 便可html
安装时为什么不加入--with-png-dir和--with-zlib-dir的安装目录呢?
php7.4.x对于目录方面有一些更改,默认取消了--with-png-dir和--with-zlib-dir的自定义,7.4.x下的GD已经自动绑定了libpng和zlib。
当然如果你的GD扩展里面如果漏装了一个,例如缺少JPEG或者FreeType的时候,在GD目录下安装,也要执行全部安装命令。不能单独安装jpeg或者freetype。那样的话会安装上了jpeg而缺少freetype,又或者安装上了freetype又缺少了jpeg。反正就是执行全部安装就可以了。
php7目录变更可以参考:PHP7.4x在文件夹目录上的一些变更,升级PHP7.4x必看
make install过后,系统会自动生成一个GD.SO文件在下面的目录。
例如屏幕会提示一个这样的目录。
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
使用一下ldd命令查看一下gd.so下面有没有安装完整。
ldd /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd.so
可以看到GD已经安装完毕了,接下来把路径复制到php.ini内
extension=/web/soft/php74/lib/php/extensions/no-debug-non-zts-20190902/gd.so
接下来查看当前php-fpm pid
ps -ef | grep php-fpm
重启PHP-FPM
kill -USR2 pid
#或者用一下方法,/web/soft/php74替换为自己的路径
/web/soft/php74/sbin/php-fpm -c /web/soft/php74/etc/php.ini -y /web/soft/php74/etc/php-fpm.conf