file_put_contents的错误子句

时间:2009-02-06 11:26:31

标签: php error-handling

我正在使用此行来获取并保存网址中的图片。

file_put_contents("./images/".$pk.".jpg", file_get_contents($PIC_URL))

我不确定处理错误的最佳方法是什么。目前它失败了,因为没有许可,很快就会得到补救,但我希望它能够处理PIC_URL为空或不是图像的情况。我应该死在这个级别的错误(可能对于权限相关的事情更好)或者我应该检查更高的PIC_URL是否为空,或两者都是?

哪种方法最好?

5 个答案:

答案 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(),如果图像不存在则传递文件夹名称,或者在尝试编写图像之前传递文件名。

http://uk3.php.net/manual/en/function.is-writable.php

答案 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来自哪里?)

通常,检查更高的位置以获得更好的用户反馈,并在执行安全性之前进行检查。仅在低级别检查时很难给用户提供良好的反馈。另一方面,很难在高级和通用级别上检查所有可能的错误(例如那些文件系统权限)。