file_put_contents的错误子句
我正在使用此行从URL获取并保存图像。file_put_contents的错误子句
file_put_contents("./images/".$pk.".jpg", file_get_contents($PIC_URL))
我不确定什么是处理错误的最佳方法。目前它失败了,因为没有许可,很快就会得到补救,但我希望它能够处理PIC_URL为空或不是图像的情况。我应该死在这个级别的错误(可能是更好的权限相关的事情),或者我应该检查更高,如果PIC_URL是空的,或两者?
哪种方法最好?
我不是声称这是最好的方法足够的天赋,但我只想沿途测试:
$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);
你可能也想检查从file_put_contents() – 2009-02-06 11:46:21
我会用is_writable(),它传递的文件夹名称,如果没有按图像在您尝试写入图像之前,它已经存在,或者文件名是否存在。
两个,据我的关注。特别是对于那些危险的文件处理功能,双重检查不会造成伤害。 ($pk
来自哪里?)
通常,请检查较高级别以获得更好的用户反馈,并在执行安全性检查之前进行检查。仅在低水平检查时,很难给用户提供良好的反馈。另一方面,很难在高级和通用级别检查所有可能的错误(如那些文件系统权限)。
试着为此做一个功能。
<?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;
}
?>
嗯不能也只是做
file_put_contents($file, $str) or die("Unable to write file!");
我会成为这里唯一的评论是,如果allow_fopen_url =关设置你的服务器的php.ini(因为它可能是在一些共享主机上下文中),上面的代码将失败。 – 2009-02-06 11:34:20