За последние 24 часа нас посетили 30550 программистов и 1754 робота. Сейчас ищут 973 программиста ...

Ошибка при сохранении файлов на сервер. Нужна ваша помощь!

Тема в разделе "PHP для новичков", создана пользователем dhorh, 22 дек 2012.

  1. dhorh

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

    С нами с:
    19 июл 2012
    Сообщения:
    39
    Симпатии:
    0
    Доброго времени суток. Несколько дней я работаю над загрузкой фалов, раньше у меня сё работало, но когда стал всё "переносить" - скрипт почему-то отказался работать...

    У меня обычная загрузка фоток, не считая всякой всячины, которая делается между загрузкой и сохранением.

    Я убрал всё лишнее, оставив только загрузку и сохранение фото - ничего лишнего.

    При выводе массива $_FILE через var_dump или print_r, получаю следующие результаты:

    Код (Text):
    1. Array ( [picture] => Array ( [name] => Скрин паспорта.jpg [type] => image/jpeg [tmp_name] => W:\userdata\temp\phpD95D.tmp [error] => 0 [size] => 151974 ) )
    , где "Скрин паспорта.jpg" - это изначальное имя загружаемой фотографии,
    а W:\userdata\temp\phpD95D.tmp - я так понимаю - это это локальное, временное местонахождения фала.
    [error] - он правильно показывает эту ошибку, так как этого файла попусту не существует, если, к примеру, руками набрать в проводнике.
    P.S. Я использую OpenServer в качестве локальной сборки, может быть в нём проблемы?
    P.P.S. Подскажите вероятное решение данной проблемы, с чем она может быть связана?


    Заранее спасибо.

    Добавлено спустя 35 минут 19 секунд:
    Код (Text):
    1. /*РАЗДЕЛ ОБРАБОТКИ ИЗОБРАЖЕНИЯ*/
    2.                 //рандомное имя файлу
    3.             function generatePassword($length = 8){
    4.                 $chars = 'qwertyuiopasdfghjklzxcvbnm2345678923456789';
    5.                 $numChars = strlen($chars);
    6.                 $string = '';
    7.                 for ($i = 0; $i < $length; $i++) {
    8.                     $string .= substr($chars, rand(1, $numChars) - 1, 1);
    9.                 }
    10.                 return $string;
    11.             }
    12.             $namefolder = date("dFY");
    13.             print_r($_FILES);
    14.             mkdir("thumbs/$namefolder", 0777);
    15.  
    16.             // Пути загрузки файлов          
    17.             $path = "thumbs/$namefolder/";
    18.             $pathGlobal ="thumbs/";
    19.            
    20.             $tmp_path = 'static/temp/';                    
    21.             // Массив допустимых значений типа файла
    22.             $types = array('image/gif', 'image/png', 'image/jpeg');
    23.             // Максимальный размер файла
    24.             $size = 5242880;
    25.             // Обработка запроса
    26.              //Проверяем тип файла
    27.                     //if (!in_array($_FILES['picture']['type'], $types))
    28.                         //die('<p>Запрещённый тип файла. <a href="?">Попробовать другой файл?</a></p>');
    29.                
    30.                     // Проверяем размер файла
    31.                     if ($_FILES['picture']['size'] > $size)
    32.                         die('<p>Слишком большой размер файла. <a href="?">Попробовать другой файл?</a></p>');
    33.                
    34.                     // Функция изменения размера
    35.                     // Изменяет размер изображения в зависимости от type:
    36.                     //  type = 1 - эскиз
    37.                     //  type = 2 - большое изображение
    38.                     //  quality - качество изображения (по умолчанию 75%)
    39.                     function resize($file, $type = 1, $quality = null)
    40.                     {
    41.                         global $tmp_path;
    42.                
    43.                         // Ограничение по ширине в пикселях
    44.                         $max_size = 240;
    45.                 $hmax_size = 180;
    46.                    
    47.                         // Качество изображения по умолчанию
    48.                         if ($quality == null)
    49.                             $quality = 100;
    50.                            
    51.                         // Cоздаём исходное изображение на основе исходного файла
    52.                         if ($file['type'] == 'image/jpeg')
    53.                             $source = imagecreatefromjpeg($file['tmp_name']);
    54.                         elseif ($file['type'] == 'image/png')
    55.                             $source = imagecreatefrompng($file['tmp_name']);
    56.                         elseif ($file['type'] == 'image/gif')
    57.                             $source = imagecreatefromgif($file['tmp_name']);
    58.                         else
    59.                             return false;
    60.                         $src = $source;
    61.                         // Определяем ширину и высоту изображения
    62.                         $w_src = imagesx($src);
    63.                         $h_src = imagesy($src);
    64.                         // В зависимости от типа (эскиз или большое изображение) устанавливаем ограничение по ширине.
    65.                             $w = $max_size;
    66.                                         $h = $hmax_size;
    67.                         // Если ширина больше заданной
    68.                         if ($w_src > $w or $h_src > $h)
    69.                         {
    70.                             // Вычисление пропорций
    71.                             $ratio = $w_src/$w;
    72.                                         $ratio = $h_src/$h;
    73.                             $w_dest = round($w_src/$ratio);
    74.                             $h_dest = round($h_src/$ratio);
    75.                             // Создаём пустую картинку
    76.                             $dest = imagecreatetruecolor($w_dest, $h_dest);
    77.                             // Копируем старое изображение в новое с изменением параметров
    78.                             imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
    79.                             // Вывод картинки и очистка памяти
    80.                             imagejpeg($dest, $tmp_path . $file['name'], $quality);
    81.                             imagedestroy($dest);
    82.                             imagedestroy($src);
    83.                             return $file['name'];
    84.                                 }else
    85.                 {
    86.                             // Вывод картинки и очистка памяти
    87.                             imagejpeg($src, $tmp_path . $file['name'], $quality);
    88.                             imagedestroy($src);
    89.                             return $file['name'];
    90.                         }
    91.                         }
    92.                     $name = resize($_FILES['picture']);
    93.                     echo "Переменная name = $name";
    94.                     /* Загрузка файла и вывод сообщения
    95.                     if (!@copy($tmp_path . $name, $path . $name))
    96.                         echo '<p>Что-то пошло не так.</p>';
    97.                     else*/
    98.                    
    99.                     // Переименовываем полученный файл
    100.                     $newName = "a_" . generatePassword(5) . "_". generatePassword(4) . ".jpg";
    101.                     echo "Переменная newName = $newName";
    102.                     rename ("thumbs/$namefolder/$name", "thumbs/$namefolder/$newName");
    103.                        
    104.                     $thumbs = "$namefolder/\$newName";
    105.                     echo "$thumbs";
    106.                        
    107.                     // Удаляем временный файл
    108.                     unlink($tmp_path . $name);
    109.                
    110.                
    111.                 /*КОНЕЦ ОБРАБОТКИ ИЗОБРАЖЕНИЯ*/
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощ

    ну показывай код которым сохраняешь, файл во временную папку у тебя загрузился
     
  3. dhorh

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

    С нами с:
    19 июл 2012
    Сообщения:
    39
    Симпатии:
    0
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощ

    Код (Text):
    1. <div class="f_imulation_wrap">
    2.          <input type="file" name="picture" class="thumbs_input"/>
    3.  </div>
    - это вот, собственно сама форма

    Добавлено спустя 1 минуту 25 секунд:
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощь!
    Где он загрузился-то? - он вроде бы сюда должен быть: "W:\userdata\temp\phpD95D.tmp"?

    Объясните пожалуйста, а то я чего-то понять не могу)
     
  4. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощ

    [error] => 0 - вот тут он загрузился....

    код выше, это и есть *Я убрал всё лишнее, оставив только загрузку и сохранение фото - ничего лишнего.* ???
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощ

    После загрузки файла, PHP-скрипт должен его куда-то скопировать, где уже этот файл будет храниться на сайте. А из папки temp он сразу же удаляется. Т.е. ты отправил файл на сервер, сервер его принял, и дальше уже скрипт должен его проверить и принять решение, что же делать с этим файлом. Если ничего с ним не делать - то он удалится сразу же после того, как был создан.

    php.net/manual/ru/features.file-upload.php
     
  6. dhorh

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

    С нами с:
    19 июл 2012
    Сообщения:
    39
    Симпатии:
    0
    Re: Ошибка при сохранении файлов на сервер. Нужна ваша помощ



    Вот теперь я точно всё убрал и ничего не мешает в коде... Прочитал я тот мануал, из него взял код и вот что получилось:

    Код (Text):
    1. /*РАЗДЕЛ ОБРАБОТКИ ИЗОБРАЖЕНИЯ*/
    2.                
    3.                 // Пути загрузки файлов  
    4.                 $uploaddir = "thumbs/";
    5.                
    6.                 $uploadfile = $uploaddir . basename($_FILES['picture']['name']);
    7.                
    8.                 echo '<pre>';
    9.                 if (move_uploaded_file($_FILES['picture']['tmp_name'],$uploadfile)){
    10.                     echo "Файл корректен и был успешно загружен.\n";
    11.                 }else{
    12.                     echo "Какая-то непонятная ошибка, сука!\n";
    13.                 }
    14.                        
    15.                 echo 'Некоторая отладочная информация:</br>';
    16.                 var_dump($_FILES);
    17.                        
    18.                 print "</pre>";
    19.                        
    20.                 echo "Переменная uploaddir = $uploaddir \n</br>";
    21.                 echo "Переменная uploadfile = $uploadfile \n</br>";
    22.                    
    23.                 /*КОНЕЦ ОБРАБОТКИ ИЗОБРАЖЕНИЯ*/

    В браузере он мне выводит следующее:
    Код (Text):
    1.  
    2. <pre>Файл корректен и был успешно загружен.
    3. Некоторая отладочная информация:</br>array(1) {
    4.   ["picture"]=>
    5.   array(5) {
    6.     ["name"]=>
    7.     string(14) "x_9f2a00b0.jpg"
    8.     ["type"]=>
    9.     string(10) "image/jpeg"
    10.     ["tmp_name"]=>
    11.     string(28) "W:\userdata\temp\php36CF.tmp"
    12.     ["error"]=>
    13.     int(0)
    14.     ["size"]=>
    15.     int(144074)
    16.   }
    17. }
    18. </pre>Переменная uploaddir = thumbs/
    19. </br>Переменная uploadfile = thumbs/x_9f2a00b0.jpg