如果在if子句中用作测试条件时,如何防止file_get_contents创建空文件?
无论如何都会创建一个空文件,这会导致后续调用另一种方法使getimagesize()失败。
问题是,当我进行代码设置时,第一次调用它将决定保存图像或显示先前保存的图像。这部分取决于文件的存在。由于创建了一个空文件,因此在以后调用我的代码时会出现问题。
如果文件存在并且大于0,是添加检查的最简单方法吗?
无论我的代码是否有效,file_get_contents仍会输出错误。这个错误被解释和处理(通过我的if条件),所以我想避免错误中断我的应用程序的输出,如果可能的话。有没有办法在不隐藏实际错误的情况下关闭它?
if (file_put_contents($imageDir . $pk . '.jpg', file_get_contents($pic_url)))
{
return $imageDir . $pk . '.jpg';
}
else
{
return 'removed.jpg';
}
答案 0 :(得分:3)
使用file_exists
检查文件是否存在:
if (file_exists($pic_url)) {
$contents = file_get_contents($pic_url);
if (!empty($contents)) {
file_put_contents($imageDir . $pk . '.jpg', $contents);
return $imageDir . $pk . '.jpg';
}
}
return 'removed.jpg';
答案 1 :(得分:1)
创建空文件的不是file_get_contents(),而是file_put_contents()。
即使第二个参数为空,file_put_contents()也会创建一个文件。因此,空文件。
您需要先检查文件是否存在。
最简单的解决方法是在条件内移动file_put_contents(),这样只有在有内容时才会创建文件。
if (($filecontents = file_get_contents($pic_url)) !== false)
{
file_put_contents($imageDir . $pk . '.jpg', $filecontents);
return $imageDir . $pk . '.jpg';
}
else
{
return 'removed.jpg';
}
现在,这仍然会给你留下一堆问题。