file_put_contents için hata fıkra

4 Cevap php

Ben bir URL'den bir görüntü elde etmek ve kaydetmek için bu hattı kullanıyorum.

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

Ben bir hata ile başa çıkmak için en iyi yolu nedir emin değilim. Orada kısa bir süre giderilmiş olacaktır izni yok, ama ben bu PIC_URL bir görüntü boş olup durumlarla başa çıkabilmek istiyorum çünkü şu anda o başarısız oluyor. Ölü bu düzeyde hata ile (muhtemelen izni ilgili şeyler için iyidir) Should veya PIC_URL boş, ya da her ikisi olup olmadığını daha yukarı kontrol etmelisiniz?

Hangi en iyi yaklaşım nedir?

4 Cevap

Ben bu en iyi yöntem olduğunu iddia etmek kadar yetenekli değilim, ama sadece yol boyunca test olacaktır:

$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);

Ben görüntü zaten yoksa o klasör adını geçirerek, () is_writable kullanın veya dosya görüntüyü yazmaya çalışmadan önce, eğer. Olur

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

Hem bildiğim kadarıyla endişe duyuyorum. Özellikle bu tehlikeli dosya işleme fonksiyonları ile, çift kontrol zarar vermez. (Nerede $pk nereden geliyor?)

Genellikle, kullanıcıya güzel geribildirim için daha yukarı kontrol ve güvenlik için çalıştırmadan önce doğru kontrol edin. Sadece düşük seviyede kontrol ederken kullanıcıya iyi geribildirim vermek zor. Diğer yandan, yüksek ve genel düzeyde (bu dosya sistemi izinleri gibi) tüm olası hataları denetlemek için zordur.

Bunun için bir işlev yapmayı deneyin.

<?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;

}
?>