【问题标题】:getimagesize() not working in PHP 7.1getimagesize() 在 PHP 7.1 中不起作用
【发布时间】:2017-07-22 23:25:19
【问题描述】:

我有一个获取 imgur 链接并使用简单方法获取图像的高度和宽度的代码:

list($width, $height) = getimagesize($link);

我运行的是 PHP 7.1,一切正常,直到我开始使用 getimagesize()。当函数被调用时,它每次都返回 false。然后我恢复到 PHP 5.3,代码立即生效。

我只是想问一下 getimagesize() 在 7.1 中停止工作是否有原因?文档说 PHP 7,所以我想我只是感到困惑。

【问题讨论】:

  • 你确定不是 list() 没有失败吗? php.net/manual/en/function.list.php 说:"警告 在 PHP 5 中,list() 从最右边的参数开始赋值。在 PHP 7 中,list() 从最左边的参数开始。 " 所以这也适用于 7.1。另请参阅变更日志。
  • 这很奇怪......它应该可以工作!哈哈,我马上就去测试
  • 啊,是的 list() 会更有意义,哈哈,找到 Fred 真好!
  • 这是可能的,但是我确实尝试仅对 getimagesize($link) 进行变量转储,它返回 NULL。这是正常反应吗?
  • 然后检查$link。那可能会失败(也)。 @Mac 可能是路径问题和/或权限。也使用错误报告php.net/manual/en/function.error-reporting.php,但请查看list() 手册并重试。

标签: php php-7.1 getimagesize


【解决方案1】:

最好的猜测,$link 是一个 url,这意味着它需要 php.ini 设置 allow_url_fopentrue 以便 getimagesize 来检查它,你在 php5 的 php.ini 中将它设置为 true,和 php7 的 php.ini 中的 false - 这会导致您描述的问题。另一种与 php 版本和 php.ini 设置兼容的替代方法是:

$tmp=tmpfile();
$file=stream_get_meta_data($tmp)['uri'];
$ch=curl_init($link);
curl_setopt_array($ch,array(
CURLOPT_FILE=>$tmp,
CURLOPT_ENCODING=>''
));
curl_exec($ch);
curl_close($ch);
list($width, $height) = getimagesize($file);
fclose($tmp); // << explicitly deletes the file, freeing up disk space etc~ - though php would do this automatically at the end of script execution anyway.

edit:正如@marekful 所指出的,最初提出的解决方法代码会给出错误的结果。更新后的代码应该给出正确的结果。

编辑:修复了一些破坏代码的拼写错误(在变量名中)

【讨论】:

  • OP 不想要尺寸,而您正在以字节为单位给出大小的答案吗? (PHP函数名有点误导...)
  • @marekful Holy ** 是的,你是对的,谢谢。暂时删除了建议的解决方法。
  • OP 要么擅离职守,要么没有在 cmets 中说过和/或答案解决了这个问题。你一定喜欢“沉默型”吧?
  • @Fred-ii- 给他一些时间哈哈。据我们所知,他本可以遇到紧急情况,明天再回来
  • @hanshenrik 我有并且我相信有足够的时间重新测试/调试并让我们了解正在发生的事情(或没有发生)。从那以后,我看不到他们的互动,更不用说您的答案被接受或他们以任何方式对此发表评论。时间只能告诉我猜。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多