За последние 24 часа нас посетили 15163 программиста и 1671 робот. Сейчас ищут 986 программистов ...

Создание превью изображения

Тема в разделе "PHP для новичков", создана пользователем Magnum, 2 авг 2016.

  1. Magnum

    Magnum Активный пользователь

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Привет мастера. Я написал функцию создания превью изображения маленького размера, и сравнительно низкого качества. Внедрил и использовал данную функцию в 2 скриптах. В первом скрипте добавляется файл, и к нему скриншот. Так вот я создаю превью к скриншоту, и тут всё проходит нормально.
    А второй скрипт, делаю создание заметок, и к ним добавляется неограниченное количество файлов, при загрузке - 4. И тут возникли сложности с массивом загружаемых файлов. Не проходит создание превью изображения

    PHP:
    1. function image_upload($image, $dir, $name, $quality=NULL, $max_width) {
    2.     if ($image['type'] == 'image/jpeg') {
    3.         $img = imagecreatefromjpeg($image['tmp_name']);
    4.     } elseif ($image['type'] == 'image/png') {
    5.         $img = imagecreatefrompng($image['tmp_name']);
    6.     } elseif ($image['type'] == 'image/bmp') {
    7.         $img = imagecreatefromwbmp($image['tmp_name']);
    8.     } elseif ($image['type'] == 'image/gif') {
    9.         $img = imagecreatefromgif($image['tmp_name']);
    10.     } else return false;
    11.  
    12.     //качество изображения
    13.     if ($quality == NULL) {
    14.         $quality = '75';
    15.     }
    16.  
    17.     //ширина и высота загружаемого изображения
    18.     $w_img = imagesx($img);
    19.     $h_img = imagesy($img);
    20.  
    21.     //максимальные значения высоты и ширины
    22.     $max_width = '300';
    23.     //$max_height = '300';
    24.  
    25.     if ($w_img >= $max_width){
    26.         //преобразовывываем картинку
    27.         //вычисляем пропорцию
    28.         $ratio = $w_img / $max_width;
    29.         $w_dest = round($w_img / $ratio);
    30.         $h_dest = round($h_img / $ratio);
    31.  
    32.         //создаем новое изображение заданного размера
    33.         $dest = imagecreatetruecolor($w_dest, $h_dest);
    34.  
    35.         imagecopyresampled($dest, $img, 0, 0, 0, 0, $w_dest, $h_dest, $w_img, $h_img);
    36.         imagejpeg($dest, $dir . $name, $quality);
    37.         imagedestroy($dest);
    38.         imagedestroy($img);
    39.     } else {
    40.         imagejpeg($img, $dir . $image['name'], $quality);
    41.         imagedesroy($img);
    42.         return $image['name'];
    43.     }
    44. }
    код внутри первого скрипта:
    PHP:
    1. image_upload($_FILES['img'], $dir = '../works/prev/', $filename, 30, 300);
    второй скрипт, в котором возникла ошибка:
    PHP:
    1. if (empty($error)) {
    2.         $name = $db -> real_escape_string($_POST['name']);
    3.         $note = $db -> real_escape_string($_POST['note']);
    4.         $add = $db -> real_escape_string($_POST['add']);
    5.         $res = $db -> query("INSERT INTO `notes`(`name`, `note`, `add`, `date`) VALUES('$name', '$note', '$add', '". time() ."')");
    6.         echo 'Заметка добавлена<br>';
    7.         $last_id = $db -> insert_id;
    8.  
    9.         if ($res && !empty($_FILES['file']) && $_FILES['file']['size'][0] > '0') {
    10.             $uploaddir = 'files/';
    11.  
    12.             foreach ($_FILES['file']['name'] as $key => $value) {
    13.                 if ($value == '') continue;
    14.                 $extension = pathinfo($_FILES['file']['name'][$key], PATHINFO_EXTENSION);
    15.                 $filename = $last_id . '_' . my_random(20) . '.' . $extension;
    16.  
    17.                 //если это картинка то создаем превью
    18.                 $img_types = array('gif', 'jpg', 'bmp', 'png');
    19.                 if (in_array($extension, $img_types)) {
    20.                     $lo = image_upload($_FILES['file'][$key], $dir = 'prev/', $filename, 30, 300);
    21.                     }
    22.                 }
    23.                 //exit;
    24.                 //сюда выполнение скрипта не доходит(
    25.  
    26.                 $uploadfile = move_uploaded_file($_FILES['file']['tmp_name'][$key], $uploaddir . $filename);;
    27.                 $insertdb = $db -> query("INSERT INTO `notes_files`(note_id, name) VALUES('$last_id', '$filename')");
    28.             }
    29.             if ($uploadfile && $insertdb) {
    30.                 header('Location: note.php?id=' . $last_id);
    31.                 exit;
    32.             }
    33.         } header('Location: note.php?id=' . $last_id);
    34.     }
    Подскажите пожалуйста
     
  2. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    Какие ошибки показывает debug php?
    --- Добавлено ---
    PHP:
    1. if ($res && !empty($_FILES['file']) && $_FILES['file']['size'][0] > '0')
    Проходит ли это условие
     
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  4. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    а вообще что такое

    PHP:
    1. if($res)
    Объясни что в твоём понимании оно должно делать...

    и что ещё за

    PHP:
    1. if ($value == '') continue;
    А где иначе, что оно должно делать?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    определит как true, значит там всё хорошо, потому что обычно надо смотреть в документацию, так как если что-то пошло не так, то вернулся бы false и if не прошёл.
     
  6. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    @denis01 а у него дебаг стоит он увидит false ?
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @pinokio это был вопрос автору?
     
  8. pinokio

    pinokio Новичок

    С нами с:
    25 июл 2016
    Сообщения:
    160
    Симпатии:
    6
    @denis01 ну и да и нет... хз... не помню :D, а это был ответ на твой пост, вопросом. Ну понятное дело, что не тебе ты то не знаешь, надо было, чёрт, поставить там ник автора :D тупанул.
     
  9. Magnum

    Magnum Активный пользователь

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    У есть форма на странице create_work.php
    форма имеет поля:
    -имя
    -описание
    -4 поля загрузки файлов
    Даже если файлы не выбраны, то все равно данные в массиве создаются, и он при проверке выдает true, и тогда в таблицу works_dcreen добавляется 4 значения, и если файлы не выбраны, то просто создаются пустые поля.
    А так, если значение равно пустой строке (если файл не выбран) то пропускается добавление в бд этой строки.
    PHP:
    1. if ($value == '') continue;
    вот сама форма:
    HTML:
    1. <div class="maint">
    2. <form method="POST" action="add.php" enctype="multipart/form-data">
    3. <pre>
    4. Название (2-30)*:
    5. <input type="text" name="name">
    6. Заметка (2-1024)**:
    7. <textarea name="note" cols="20" rows="5"></textarea>
    8. Дополнительная информация(ссылки и т.п.):
    9. <input type="text" name="add">
    10.  
    11. Файлы:
    12. <input type="file" name="file[]"><br>
    13. <input type="file" name="file[]"><br>
    14. <input type="file" name="file[]"><br>
    15. <input type="file" name="file[]"><br>
    16.  
    17. <input type="submit" value="Добавить запись">
    18. </pre>
    19. </form>
    20. * - поля обязатиельные для заполнениея
    21. </div>
    --- Добавлено ---
    или лучше создавать форму не как массив с неопределенным количеством файлов: file[]
    а сделать примерно вот так:
    file['one']
    file['two']
    и тд. и потом просто проверять каждый файл отдельно?
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Смотри структуру массива $_FILES, там есть ключ error вот и проверяй когда он соответствует нормально загруженному файлу
    https://secure.php.net/manual/ru/features.file-upload.errors.php
     
  11. Magnum

    Magnum Активный пользователь

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    в том то и проблема, что файл загружается нормально. Это похоже проблема при сохранении файла миниатюры моей функцией. Вот только не могу понять в чём то собственно и проблема(
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    так нужно всё перепроверить используя отладку, каждую строчку кода, так найдёшь проблемное место, это довольно много работы, по этому мало кто за тебя её будет делать, а если что-то не получается, то тут подскажут
     
    Magnum нравится это.