ошибочный пункт для file_put_contents

Предполагая, что упомянутая вами проблема 62273 точно решает вашу проблему и необходима для ее решения, вам придется выполнить обновление до Apache Tomcat 9.0.8.

Apache Tomcat 9 changelog утверждает, что это исправлено в версии 9.0.8 и выше. Надеюсь, это поможет.

Редактировать: Это также указано @MarkThomas в текстовом комментарии к дискуссии об ошибке , которая, по моему мнению, настолько почетна, что я хотел бы привести ее здесь полностью:

Добавление дополнительного кода в Tomcat для учета несоответствия спецификации других компонентов является неправильным решением. Правильное решение - это выявить ошибки в несовместимых компонентах. К сожалению, в этом случае все остальные компоненты являются основными поставщиками браузеров, и они не признают, что их поведение некорректно. Мне еще предстоит увидеть убедительный аргумент о том, почему браузеры не должны реализовывать RFC 7230 и RFC 3986.

Работа с несоответствующим спецификации поведением браузера просто побуждает поставщиков продолжать игнорировать спецификации и приводит к более серьезным проблемам совместимости в долгосрочной перспективе. Тем не менее, альтернатива состоит в том, чтобы сломать множество приложений для большого количества пользователей. Поэтому с сожалением я реализовал это усовершенствование для всех поддерживаемых в настоящее время версий Tomcat.

Исправлено:

  • магистраль для 9.0.8 и далее
  • 8.5.x для 8.5.31 и далее
  • 8.0.x для 8.0.52 и далее [ 114]
  • 7.0.x для 7.0.87 и далее

blockquote>

8
задан Joshxtothe4 6 February 2009 в 11:26
поделиться

4 ответа

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

$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);
11
ответ дан 5 December 2019 в 12:13
поделиться

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

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

1
ответ дан 5 December 2019 в 12:13
поделиться

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

<?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
ответ дан 5 December 2019 в 12:13
поделиться

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

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

0
ответ дан 5 December 2019 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: