上一篇:视频内容(2022-11-28 14:12:20)
文章大纲

php装了gd扩展,还是报call to undefined function imagecreatefromjpeg错误

2022-12-16 18:03:51

1.服务器报错

在服务器里,通过php -m命令可以查看到gd这个模块,可是程序里用到imagecreatefromjpeg函数还是报错,如下所示:



这是因为gd扩展,没有安装jpeg这部分。


2. gd安装缺乏jpeg的图示

通过phpinfo查看,gd扩展部分的信息如下图所示:


可以看到gif、png、bmp,却就是看不到jpeg。


3. 重新编译gd扩展

网上这个时候都会让你下载jpeg的源码包,然后再进行编译安装。

本人经过实践,在php8.0版本下,不用另外下载源码包。


进入php源码包的ext/gd目录,本人实践目录如下所示:

/opt/php-8.0.23/ext/gd


然后开始重新编译gd扩展,依次执行如下命令:

/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config --enable-gd --with-jpeg --with-freetype
make && make install

由于本人服务器有安装多版本php,所以执行phpize命令用的绝对路径,否则编译版本信息容易匹配不上。


如果看到类似下面的提示,就说明扩展编译成功了,连so文件位置,提示里都告诉我们了。

Build complete.
Don't forget to run 'make test'.

Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-non-zts-20200930/
Installing header files:          /usr/local/php7/include/php/


另外提一下,freetype是跟字体相关的东东,验证码给背景图添加文字时会用到。例如这个函数:imagettftext


4. phpinfo里gd模块不见了

gd扩展编译好后,重启了php-fpm,可是phpinfo里却看不到gd模块了。

原因只是因为我本人重启php-fpm用错了命令。

正确:/usr/local/php7/sbin/php-fpm  -c /etc/php.ini
错误:/usr/local/php7/sbin/php-fpm  -c /usr/local/php7/etc/php-fpm.conf

成功了,gd模块信息就会增多了,如下所示:



5. zlib安装了,却提示没找到

编译gd时,报如下错误:

configure: error: Package requirements (zlib) were not met: No package 'zlib' found

即没找到zlib包。


下面还有一大串其它提示:

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.


可问题时,我有安装zlib,无论在php -m下还是phpinfo里,都可以看到这个模块。

所以要解决的问题就是:如何让服务器在编译gd扩展时,能够自己找到zlib。


经过简单了解,pkg config就是package config,告诉你包相关的一些信息,例如依赖哪些其他包,其他包的位置又在哪里等等。


通过命令

whereis pkgconfig

我得到如下位置:

pkgconfig: /usr/lib64/pkgconfig /usr/local/lib/pkgconfig /usr/share/pkgconfig


在/usr/lib64/pkgconfig目录里,我就发现了zlib.pc这个文件。(这个文件我估计就是安装zlib扩展时生成的)

-rw-r--r--.   1 root root    211 Oct 31  2018 xcb-xtest.pc
-rw-r--r--.   1 root root    215 Oct 31  2018 xcb-xvmc.pc
-rw-r--r--.   1 root root    210 Oct 31  2018 xcb-xv.pc
-rw-r--r--    1 root root    239 Oct 31  2018 zlib.pc

所以我们只要让服务器知道zlib.pc在哪里,它就自然能找到zlib在哪里了。


上面的错误提示就告诉我们解决方法了:通过配置环境变量PKG_CONFIG_PATH来解决。

最终我在/etc/profile下添加了如下一行,然后source /etc/profile生效,gd编译就畅通无阻了。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig:$PKG_CONFIG_PATH   //本人添加的行,让系统能够发现zlib.pc





上一篇:视频内容(2022-11-28 14:12:20)
我要评论
评论列表