getimagesize 找不到文件时的处理错误
2022-08-30 18:47:51
当我尝试并且图像不存在时,我收到错误。我不想先检查文件是否存在,只需处理错误即可。getimagesize($img)
我不确定是如何工作的,但我想做这样的事情:try catch
try: getimagesize($img) $works = true
catch: $works = flase
当我尝试并且图像不存在时,我收到错误。我不想先检查文件是否存在,只需处理错误即可。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
一个解决方案是使用@ 运算符来掩盖该错误:
if ($data = @getimagesize('not-existing.png')) {
echo "OK";
} else {
echo "NOT OK";
}
由于该文件不存在,$data仍将是假的;但不显示任何警告。
另一种解决方案是在使用getimagesize之前检查文件是否存在;像这样的东西会做:
if (file_exists('not-existing.png') &&
($data = getimagesize('not-existing.png'))
) {
echo "OK";
} else {
echo "NOT OK";
}
如果该文件不存在,则不会调用 getimagesize -- 这意味着没有警告
不过,此解决方案不是您应该用于另一台服务器上的图像,并且通过HTTP访问的解决方案(在这种情况下,如果您是这样),因为它意味着对远程服务器的两个请求。
对于本地图像,我想那将完全可以;我看到的唯一问题是,当有读取错误未被屏蔽时生成的通知。
最后:
display_errors
,关于这一点;-)称我为肮脏的黑客僵尸,他将下地狱,但我通常通过将警告输出捕获到输出缓冲区中,然后检查缓冲区来解决此问题。试试这个:
ob_start();
$data = getimagesize('not-existing.png');
$resize_warning = ob_get_clean();
if(!empty($resize_warning)) {
print "NOT OK";
# We could even print out the warning here, just as PHP would do
print "$resize_warning";
} else {
print "OK"
}
就像我说的,不是在程序员的天堂里获得一个舒适的地方的方法,但是当涉及到功能失调的错误处理时,一个人必须做一个男人必须做的事情。