关于 VOID 获取图片基础信息失败

本文折腾过程仅供参考,你完全可以直接工单硬刚客服,什么也不用管。

VOID 主题 3.4.0 版本新增了一个获取图片基础信息的功能,详见 关于 VOID 主题自动获取图片基础信息 。该功能主要实现了发布文章的时候,为文章中的图片链接增加长和宽的信息,配合懒加载功能,在图片尚未加载之前预先留白,这样就不会因为图片大小与留白不一致,出现页面抖动的情况。

但我还是遇到了问题,在我的虚拟主机上,不论是新发表文章,还是使用作者给出的 getimginfo 方法批量处理,都无法获得图片基础信息。

求助作者

我第一时间想到,Typecho 的文章内容都是存在数据库里的,或许是这个功能对数据库权限有要求,但是我在虚拟主机面板里始终找不到有关的选项设置。

最后只好在 GitHub 上求助作者,在确认完 MySQL 版本,PHP 版本,开启 curl 扩展均无问题之后,作者给出排查方案:

  1. 注释掉插件目录/libs/ParseImg.php 中第 101 行
  2. 在网站根目录 config.inc.php 中添加 define('__TYPECHO_DEBUG__', true);
  3. 登陆后台
  4. 访问 https://luhe.xyz/action/void?getsingleimginfo&cid=73
  • 页面显示 Array ( [0] => 6 [1] => 0 [2] => 0 [3] => 6 )

作者: 在 101 行后添加 echo $url.' '; 再重复以上步骤,看看是否已经解析出了图片链接。

  • 页面解析出全部图片链接。

作者:最后一个测试,在服务器上创建一个 t.php 文件,写入以下内容

<?php
print_r(getimagesize('https://pic-cdn.sukiu.net/2019/10/27/1.jpg'));

然后在命令行中运行这个文件,或者从浏览器访问这个文件,确定 PHP 的 getimagesize 函数能不能正常使用。

  • 页面显示空白

作者:所以这个函数没有正常运行。可能的问题是:

  1. pic-cdn 这个域设置了防盗链,所以不允许从别的地方请求图片信息
  2. PHP 的配置问题,不能用 getimagesize 这个函数
  3. 主机的问题,不能访问 pic-cdn 这个域

具体请咨询你的主机提供商。

咨询主机商

我可以确认 1 和 3 不是问题关键,于是开始发工单询问为何无法使用 getimagesize 这个函数。客服告诉我可以自定义 php.ini,但是让我注意这个函数非常多漏洞,黑客会利用入侵网站。

百度了很久都是 getimagesize 如何不安全的帖子,却没有一个说如何开启 getimagesize 函数,又或者根本不需要开启?

随后客服告诉我 GD 库已开启,函数是可以使用的,但是我这边却始终无法使用。

这个工单持续了两天,今天凌晨 5 点给我发邮件告诉我已解决,我尝试了下,果然可以获取图片信息了,客服也没有说做了什么。

副作用

新的问题出现了,我的博客评论时间异常,变成了格林威治标准时间(GMT+0)。

发工单问完之后我更迷惑了,客服告诉我服务器时间是北京时间,Typecho 后台也是北京时间,怎么就评论时间成了格林威治标准时间?

折腾到晚上,我开始查看主机的文件,突然发现多出 .user.ini 和 php.ini 两个文件,更新时间正是凌晨 5 点。

我这才明白,因为解决 getimagesize 函数问题,才弄出了这么一个 bug。

发工单,客服又在 .user.ini,php.ini 和 .htaccess 里操作了一番,终于解决了这个问题,结束了这次的折腾。

结语

我不太明白客服是怎么实现的,以下贴出一些代码仅供参考,也建议大家尽量还是买云服务器,虚拟主机太坑了。

.user.ini:

[PHP]
asp_tags = Off
display_errors = On
max_execution_time = 30
max_input_time = 60
max_input_vars = 1000
memory_limit = 32M
post_max_size = 8M
session.gc_maxlifetime = 1440
session.save_path = "/var/cpanel/php/sessions/ea-php56"
upload_max_filesize = 2M
zlib.output_compression = Off
date.timezone = "Asia/Shanghai"

php.ini:

date.timezone = "Asia/Shanghai"

.htaccess:

<IfModule php5_module>
   php_value date.timezone "Asia/Shanghai"
</IfModule>
<IfModule lsapi_module>
   php_value date.timezone "Asia/Shanghai"
</IfModule>

添加新评论

评论列表