Ошибка с imagefilter () из GD (нет файла?) - PullRequest
1 голос
/ 04 августа 2011

Я получаю следующие ошибки:

/ private / var / tmp / phpl3E3lq Предупреждение: imagecreatefromjpeg (/ private / var / tmp / phpl3E3lq) [function.imagecreatefromjpeg]: не удалось открыть поток: Нет такого файла или каталога в /sites/uploadresults.php в строке 10 Преобразование не удалось Предупреждение: imagedestroy () ожидает, что параметр 1 будет ресурсом, логическое значение указано в /sites/uploadresults.php в строке 22 * ​​1004 *

<?php
move_uploaded_file ($_FILES['Image']['tmp_name'], "/sites/".$_FILES['Image']['name']) or die ('Could not upload');

echo $_FILES['Image']['tmp_name']

 ?>


<?php
$img = imagecreatefromjpeg($_FILES['Image']['tmp_name'])
?>

<?php
if($img && imagefilter($img, IMG_FILTER_PIXELATE, 3))
{
echo $img;
}
else
{

echo 'Conversion failed';
imagedestroy($img);

}

?>

<img src="http://localhost/<?php echo $_FILES['Image']['name'] ?>" />

Я не уверен, что происходит.Кажется, что $ img не берет jpeg, который я пытаюсь преобразовать в пиксельную форму.Я новичок в этом, так что это может быть мой синтаксис или что-то.

Ответы [ 2 ]

1 голос
/ 04 августа 2011

Вы переместили файл из местоположения ['tmp_name'], ДО того, как вы сделаете вызов создания изображения.Поэтому, когда вы снова вызываете imagecreate () с этим именем tmp, файла больше нет.

Либо выполните обработку изображения перед тем, как переместить файл, либо используйте имя файла в качестве конечного получателя в качестве вашего изображенияАргумент.

Также: обратите внимание, что параметр ['name'] загрузки файла является предоставленными пользователем данными и МОЖЕТ содержать информацию о пути.Вы слепо используете его в качестве имени файла назначения в вызове перемещения, что означает, что пользователь может выгружать свои файлы в любом месте на вашем сервере, где веб-сервер имеет разрешения на запись.Рассмотрим случай, когда они злонамеренно называют свой файл ../../../../../etc/passwd.

0 голосов
/ 04 августа 2011

Вам нужно использовать новое имя файла, а не оригинальное, перед тем как вы его переместили:

$img = imagecreatefromjpeg("/sites/".$_FILES['Image']['name']);
...