предложение об ошибке для file_put_contents - PullRequest
6 голосов
/ 06 февраля 2009

Я использую эту строку для получения и сохранения изображения из URL.

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

Я не уверен, что лучший способ справиться с ошибкой. На данный момент это происходит сбой, потому что нет разрешения, которое будет исправлено в ближайшее время, но я бы хотел, чтобы он мог иметь дело с ситуациями, когда PIC_URL пустое или не изображение Должен ли я умереть с ошибкой на этом уровне (вероятно, это лучше для вещей, связанных с разрешениями) или я должен проверить выше, если PIC_URL пуст, или оба?

Какой подход лучше?

Ответы [ 5 ]

8 голосов
/ 06 февраля 2009

Я недостаточно талантлив, чтобы утверждать, что это лучший метод, но я бы просто проверил:

$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 голос
/ 13 мая 2016

Хм, а ты не мог просто сделать

file_put_contents($file, $str) or die("Unable to write file!");

1 голос
/ 06 февраля 2009

попробуйте сделать функцию для этого.

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

}
?>
1 голос
/ 06 февраля 2009

Я бы использовал is_writable (), передавая ему имя папки, если изображение еще не существует, или имя файла, если оно существует, до того, как вы попытаетесь написать изображение.

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

0 голосов
/ 06 февраля 2009

Обе, насколько я понимаю. Особенно с этими опасными функциями обработки файлов, двойная проверка не повредит. (Откуда берется $pk?)

Как правило, проверьте выше для более приятной обратной связи с пользователем и проверьте прямо перед выполнением для безопасности. Трудно дать достойную обратную связь пользователю, проверяя только на низком уровне. С другой стороны, сложно проверить все возможные ошибки (например, разрешения файловой системы) на высоком и общем уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...