php - getimagesize 找不到文件时处理错误

标签 php try-catch getimagesize

当我尝试 getimagesize($img) 而图像不存在时,我得到一个错误。我不想先检查文件是否存在,只是处理错误。

我不确定 try catch 是如何工作的,但我想做类似的事情:

try: getimagesize($img) $works = true
catch: $works = flase

最佳答案

如您所说,如果在不存在的文件上使用,getimagesize 会生成警告:

这段代码:

if ($data = getimagesize('not-existing.png')) {
    echo "OK";
} else {
    echo "NOT OK";
}

会给你一个

Warning: getimagesize(not-existing.png) [function.getimagesize]: 
  failed to open stream: No such file or directory 


一种解决方案是使用 @ operator , 以掩盖该错误:

if ($data = @getimagesize('not-existing.png')) {
    echo "OK";
} else {
    echo "NOT OK";
}

由于文件不存在,$data 仍然是 false ;但不会显示警告。


另一种解决方案是 check if the file exists , 在使用 getimagesize 之前;像这样的事情会做:

if (file_exists('not-existing.png') && 
    ($data = getimagesize('not-existing.png'))
   ) {
    echo "OK";
} else {
    echo "NOT OK";
}

如果文件不存在,则不会调用 getimagesize——这意味着没有警告

不过,对于位于另一台服务器上并通过 HTTP 访问(如果您在这种情况下)的图像,您不应该使用此解决方案,因为它意味着对远程服务器的两个请求。

我想,对于本地镜像,这就可以了;我看到的唯一问题是当读取错误未被屏蔽时生成的通知。


最后:

  • 我会允许在您的开发服务器上显示错误,
  • 并且不会在您的生产服务器上显示这些内容 -- 请参阅 display_errors , 关于那个 ;-)

关于php - getimagesize 找不到文件时处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1363876/

相关文章:

php - 如何使用 PHPExcel_Reader_HTML 设置 Excel 单元格格式

java - 捕获 OutOfMemoryError 是个坏主意吗?

laravel - 如何获取使用 Laravel 中的存储外观访问的 AWS S3 中图像的尺寸?

php - 抑制 Composer dump-autoload -o 上的 "Ambiguous class resolution"警告

php - 站点地图生成器超时,超过 60 秒的最长执行时间

javascript - 尝试使用 preg_match_all 使用 php 动态创建菜单到我的服务器 php 文档

c# - 如何将引发的异常从C#类传递到C#表单

java - 抛出异常时会发生什么?

PHP getimagesize - 无法打开流。错误的请求

php - 使用 PHP 函数自动将宽度和高度属性添加到 <img> 标签