我正在使用此行来获取并保存网址中的图片。
file_put_contents("./images/".$pk.".jpg", file_get_contents($PIC_URL))
我不确定处理错误的最佳方法是什么。目前它失败了,因为没有许可,很快就会得到补救,但我希望它能够处理PIC_URL为空或不是图像的情况。我应该死在这个级别的错误(可能对于权限相关的事情更好)或者我应该检查更高的PIC_URL是否为空,或两者都是?
哪种方法最好?
答案 0 :(得分:8)
我没有足够的天赋来宣称这是最好的方法,但我会一路测试:
$imageDir = "/path/to/images/dir/";
$imagePath = "$imageDir$pk.jpg";
if (!is_dir($imageDir) or !is_writable($imageDir)) {
// Error if directory doesn't exist or isn't writable.
} elseif (is_file($imagePath) and !is_writable($imagePath)) {
// Error if the file exists and isn't writable.
}
$image = file_get_contents(urlencode($PIC_URL));
if (empty($image)) {
// Error if the image is empty/not accessible.
exit;
}
file_put_contents($imagePath, $image);
答案 1 :(得分:1)
我会使用is_writable(),如果图像不存在则传递文件夹名称,或者在尝试编写图像之前传递文件名。
答案 2 :(得分:1)
尝试为此制作一个功能。
<?php
define('OK', 0);
deinfe('URL_EMPTY', 1);
define('WRITING_PROBLEMS',2);
define('OTHER_PROBLEM', 3);
function save_pic($pic_url) {
$imageDir = '/path/to/images/dir/';
if (!strlen($pic_url))
return URL_EMPTY;
if (!is_dir($imageDir) || !is_writable($imageDir)) {
return WRITING_PROBLEMS;
}
$image = file_get_contents(urlencode($pic_url));
$pk = time(); // or whatever you want as key
$r = file_put_contents($imagePath.$pk.".jpg", $pic_url);
if ($r)
return OK;
else
return OTHER_PROBLEM;
}
?>
答案 3 :(得分:1)
嗯,你也不能这样做
file_put_contents($file, $str) or die("Unable to write file!");
答案 4 :(得分:0)
就我而言,两者都是。特别是对于那些危险的文件处理功能,双重检查不会造成伤害。 ($pk
来自哪里?)
通常,检查更高的位置以获得更好的用户反馈,并在执行安全性之前进行检查。仅在低级别检查时很难给用户提供良好的反馈。另一方面,很难在高级和通用级别上检查所有可能的错误(例如那些文件系统权限)。