Предполагая, что упомянутая вами проблема 62273 точно решает вашу проблему и необходима для ее решения, вам придется выполнить обновление до Apache Tomcat 9.0.8.
Apache Tomcat 9 changelog утверждает, что это исправлено в версии 9.0.8 и выше. Надеюсь, это поможет.
Редактировать: Это также указано @MarkThomas в текстовом комментарии к дискуссии об ошибке , которая, по моему мнению, настолько почетна, что я хотел бы привести ее здесь полностью:
Добавление дополнительного кода в Tomcat для учета несоответствия спецификации других компонентов является неправильным решением. Правильное решение - это выявить ошибки в несовместимых компонентах. К сожалению, в этом случае все остальные компоненты являются основными поставщиками браузеров, и они не признают, что их поведение некорректно. Мне еще предстоит увидеть убедительный аргумент о том, почему браузеры не должны реализовывать RFC 7230 и RFC 3986.
Работа с несоответствующим спецификации поведением браузера просто побуждает поставщиков продолжать игнорировать спецификации и приводит к более серьезным проблемам совместимости в долгосрочной перспективе. Тем не менее, альтернатива состоит в том, чтобы сломать множество приложений для большого количества пользователей. Поэтому с сожалением я реализовал это усовершенствование для всех поддерживаемых в настоящее время версий Tomcat.
Исправлено:
blockquote>
Я не достаточно талантлив, чтобы утверждать, что это - лучший метод, но я просто протестировал бы по пути:
$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);
Я использовал бы is_writable (), передавая его имя папки, если изображение уже не существует, или имя файла, если это делает, прежде чем Вы попытаетесь записать изображение.
попытайтесь делать функцию для этого.
<?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;
}
?>
Оба, насколько я - беспокойство. Особенно с теми опасными функциями обработки файла, перепроверка не причиняет боль. (Где делает $pk
произойти из?)
Обычно проверьте выше на более хорошую обратную связь пользователю и проверке прямо перед выполнением для безопасности. Его твердое, чтобы дать достойную обратную связь пользователю, только проверяя на низком уровне. С другой стороны, трудно проверить на все возможные ошибки (как те полномочия файловой системы) на высоком и универсальном уровне.