当我尝试 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/