PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?
Posted
技术标签:
【中文标题】PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?【英文标题】:No PNG support in PHP GD Library but has GIF and JPEG Support. How can I fix this? 【发布时间】:2014-09-27 06:51:29 【问题描述】:我在 OS X Yosemite 上运行 MAMP 服务器版本 3.0.5。在执行期间,我的 php 文件似乎缺少 PNG 支持 甚至在我拥有 MAMP 2.1 之前,它在 png 相关功能上就出现了致命错误。
Jpeg 函数可以正常工作。
这就是我的 phpinfo 的样子:
Build Date Apr 10 2014 17:21:18
Configure Command './configure' '--with-mysql=/Applications/MAMP/Library' '--with-apxs2=/Applications/MAMP/Library/bin/apxs' '--with-gd' '--with-jpeg-dir=/Applications/MAMP/Library' '--with-png-dir=/Applications/MAMP/Library' '--with-zlib' '--with-zlib-dir=/Applications/MAMP/Library' '--with-freetype-dir=/Applications/MAMP/Library' '--prefix=/Applications/MAMP/bin/php/php5.5.10' '--exec-prefix=/Applications/MAMP/bin/php/php5.5.10' '--sysconfdir=/Applications/MAMP/bin/php/php5.5.10/conf' '--with-config-file-path=/Applications/MAMP/bin/php/php5.5.10/conf' '--enable-ftp' '--enable-gd-native-ttf' '--with-bz2=/usr' '--with-ldap' '--with-mysqli=/Applications/MAMP/Library/bin/mysql_config' '--with-t1lib=/Applications/MAMP/Library' '--enable-mbstring=all' '--with-curl=/Applications/MAMP/Library' '--enable-sockets' '--enable-bcmath' '--with-imap=shared,/Applications/MAMP/Library/lib/imap-2007f' '--enable-soap' '--with-kerberos' '--enable-calendar' '--with-pgsql=shared,/Applications/MAMP/Library/pg' '--enable-exif' '--with-libxml-dir=/Applications/MAMP/Library' '--with-gettext=shared,/Applications/MAMP/Library' '--with-xsl=/Applications/MAMP/Library' '--with-pdo-mysql=shared,/Applications/MAMP/Library' '--with-pdo-pgsql=shared,/Applications/MAMP/Library/pg' '--with-mcrypt=shared,/Applications/MAMP/Library' '--with-openssl' '--enable-zip' '--with-iconv=/Applications/MAMP/Library' '--enable-opcache' '--enable-intl' '--with-tidy=shared' '--with-icu-dir=/Applications/MAMP/Library'
这就是 GD 部分包含的内容:
GD Support enabled
GD Version bundled (2.1.0 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.4.12
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPEG Support enabled
libJPEG Version 8
PNG Support enabled
libPNG Version 1.6.6
WBMP Support enabled
XBM Support enabled
为了测试代码存在的 png 执行和 gd 库,我运行以下代码:
if (extension_loaded('gd'))
echo "\nGD support is -Loaded-";
else
echo "\nGD support is == NOT == loaded ";
if(function_exists('gd_info'))
echo "\nGD function support is -Available- ";
else
echo "\nGD function support is == NOT == available ";
if(function_exists('imagepng'))
echo "\nimagepng() -Exists-";
else
echo "\nimagepng() ==== DOES NOT ==== Exist";
if(function_exists('imagejpeg'))
echo "\nimagejpeg() -Exists-";
else
echo "\nImage Function ==== DOES NOT ==== Exists";
这是我得到的结果:
我注意到的一件事是 GD 中的 libPNG 版本是“1.6.6”,而我电脑上的版本是“1.6.12”。是否有可能导致 PNG 功能出现问题?
【问题讨论】:
虽然这似乎是一个有效的问题,但这与编程无关,所以我建议关闭并迁移到 ServerFault。 Libpng-1.6.12 应该是 ABI 与 1.6.6 兼容,因此链接失败可能有其他解释。 格伦我也是这么想的。感谢您的调查。 【参考方案1】:对于那些来这里有相同症状的人(PHP 在 Yosemite 下,GD Lib 处于活动状态但缺少 PNG 支持)但使用 OS X 附带的 Apache 和 PHP(而不是 MAMP)的人来说,这是一个答案。
在这种情况下,问题的原因是 Yosemite 的 PHP 没有编译 PNG 和 FreeType 支持。
这里描述了这种情况下的解决方案:https://***.com/a/26505558/430742
【讨论】:
【参考方案2】:根据您发布的屏幕截图,问题不只是 PNG。您包含的 phpinfo() 浏览器输出显示 FreeType、T1Lib、XBM 和 PNG 都已启用且可用,而 PHP 脚本结果的命令行屏幕截图显示这些都不可用。
因此,您遇到的问题很可能源于在两种情况下使用两种不同的 PHP 安装:一种通过浏览器上的 MAMP,另一种可能来自命令行上的本地安装。请通过 MAMP/浏览器运行您的脚本,以确保您得到相同的 PNG 错误。
通过运行命令检查正在使用的 PHP 二进制文件:
which php
如果它在 /etc 中列出了 PHP 路径或 MAMP 路径以外的任何内容,则您需要在运行命令时显式使用 MAMP PHP 路径。或者,您可以在 .bash_profile 文件中设置别名,方法是添加一行(将 php5.X.X 替换为您拥有的正确版本):
alias php=/Applications/MAMP/bin/php/php5.X.X/bin/php
您也可以尝试删除旧的 PHP bin 文件并创建指向 MAMP PHP bin 的符号链接:
sudo ln -s /Applications/MAMP/bin/php/php5.X.X/bin/php OLDPATH
希望对您有所帮助。
【讨论】:
我猜您所指的第二个 PHP 安装是 Yosemite 附带的本机安装。它的问题是PNG支持没有被编译成ins(见***.com/questions/26443242/…)。以上是关于PHP GD 库中不支持 PNG,但支持 GIF 和 JPEG。我怎样才能解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Linux 上的 xampp 中的 php GD 库中启用 Webp 支持