Не могу разобраться с кодом. PHP, HTML. загрузка изображения

программирование php html

Как поменять имя картинки? добавил генерацию имени, в папке /imas файл с новым именем формата - 15432558.jpg сохраняется. Но на странице не отображается..



<?php

// Пути загрузки файлов
$path = 'imas/';
$tmp_path = 'tmp/';
// Массив допустимых значений типа файла
$types = array('image/gif', 'image/png', 'image/jpeg');
// Максимальный размер файла
$size = 5024000;

$timedate = time().rand(100,999);




// Обработка запроса
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Проверяем тип файла
if (!in_array($_FILES['picture']['type'], $types))
die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>');

// Проверяем размер файла
if ($_FILES['picture']['size'] > $size)
die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>');



// Функция изменения размера
// Изменяет размер изображения в зависимости от type:
// type = 1 - эскиз
// type = 2 - большое изображение
// rotate - поворот на количество градусов (желательно использовать значение 90, 180, 270)
// quality - качество изображения (по умолчанию 75%)
function resize($file, $type = 1, $rotate = null, $quality = null)
{
global $tmp_path;

// Ограничение по ширине в пикселях
$max_thumb_size = 200;
$max_size = 800;

// Качество изображения по умолчанию
if ($quality == null)
$quality = 100;

// Cоздаём исходное изображение на основе исходного файла
if ($file['type'] == 'image/jpeg')
$source = imagecreatefromjpeg($file['tmp_name']);
elseif ($file['type'] == 'image/png')
$source = imagecreatefrompng($file['tmp_name']);
elseif ($file['type'] == 'image/gif')
$source = imagecreatefromgif($file['tmp_name']);
else
return false;

// Поворачиваем изображение
if ($rotate != null)
$src = imagerotate($source, $rotate, 0);
else
$src = $source;

// Определяем ширину и высоту изображения
$w_src = imagesx($src);
$h_src = imagesy($src);

// В зависимости от типа (эскиз или большое изображение) устанавливаем ограничение по ширине.
if ($type == 1)
$w = $max_thumb_size;
elseif ($type == 2)
$w = $max_size;

// Если ширина больше заданной
if ($w_src > $w)
{
// Вычисление пропорций
$ratio = $w_src/$w;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);

// Создаём пустую картинку
$dest = imagecreatetruecolor($w_dest, $h_dest);

// Копируем старое изображение в новое с изменением параметров
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);

// Вывод картинки и очистка памяти
imagejpeg($dest, $tmp_path . $file['name'], $quality);
imagedestroy($dest);
imagedestroy($src);

return $file['name'];
}
else
{
// Вывод картинки и очистка памяти
imagejpeg($src, $tmp_path . $file['name'], $quality); //imagejpeg($src, $tmp_path . $file['name'], $quality);
imagedestroy($src);

return $file['name'];
}
}

$name = resize($_FILES['picture'], $_POST['file_type'], $_POST['file_rotate']);




// Загрузка файла и вывод сообщения
if (!@copy($tmp_path . $name, $path . $timedate . $types ))
echo '<p>Что-то пошло не так.</p>';
else

echo '<img class="asq" src="' . $path . $timedate . '" id="target">';



// Удаляем временный файл
unlink($tmp_path . $name);
}

?>

Примечание:
С отправкой или ресайзом все ок. Разобрался, вот так все работает:

if (!@copy($tmp_path . $name, $path . $name ))
echo '<p>Что-то пошло не так.</p>';
else
rename($path . $_FILES['picture']['name'], $path . $timedate . '.jpg' );

echo '<img class="asq" src="' . $path . $timedate . '.jpg' . '" id="target">';
Ответы:
А ты скачай файл и посмотри он вообще открывается? В том же пэинте например.
Если нет - файл повреждён операциями при загрузке, редактированием. Отладка кода идёт так - убирается кусок кода, например, убираем операцию resize - может в ней косяк? Если без неё работает, то ищем в ней ошибку, если нет, убираем ещё кусок кода и т.д.
Кинь ещё html форму загрузки.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.