Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Прошу помощи)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: теряеться расширение файла при загрузки на сайт картинок
sir1006
Отправлено: 19 Февраля, 2015 - 13:05:24
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4.  
  5. //Загрузка фоток
  6.  
  7.  
  8. $uploaddir = 'uploads/'; // Папка куда закачивать файлы
  9. $extentions = array(".BMP",".bmp",".GIF",".gif",".JPEG",".jpeg",".JPG",".jpg",".JPE",".PNG",".png"); // Массив разрешенных форматов файлов
  10. $userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
  11. $maxfilesize = 20000000; // Максимально допустимый размер файла
  12.  
  13. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
  14.  
  15.  if((in_array(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
  16.   {
  17.     // Если копирование произведено удачно, выводим сообщения
  18.     if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
  19.       {
  20.         $fname = md5($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной
  21.         echo "Ваш файл: <a href='../uploads/$fname'>$fname</a>";
  22.       }
  23.     else
  24.       {
  25.         echo ("<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");
  26.         echo ("<script language=\"javascript\">history.back();</script>");
  27.       }
  28.   }
  29.    // Если превышен максимальный размер файла
  30.  elseif ($maxfilesize < $userfilesize)
  31.   {
  32.     echo ("<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");
  33.     echo ("<script language=\"javascript\">history.back();</script>");
  34.   }
  35.  else
  36.   {
  37.     // Если расширение файла имеет недопустимое расширение
  38.     echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");
  39.     echo ("<script language=\"javascript\">history.back();</script>");
  40.     exit();
  41.   }
  42.  
  43. # переадресация на
  44.  
  45. echo '<script type="text/javascript">
  46.  
  47. window.location = "wiv.php"
  48.  
  49. </script>';
  50.  
  51.  
  52. //Показ фоток
  53.  
  54.  
  55. ?>




Проблема такова что ни как не могу добиться того, чтоб при изменении basename на md5 получаеться что имена берутся из хэша картинки и так он их сохраняет на сайте, но проблема в том, что теряется расширения.


Как искоренить эту ошибку??

или посоветуйте готовое решение:

1)загрузка картинки
2)переименование ее (чтоб имена не повторялись)
3)сохранялось расширение
4)загружалась на сайт
 
 Top
exlant
Отправлено: 19 Февраля, 2015 - 14:38:16
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




это если по быстрому написать исходя из вашего кода,
PHP:
скопировать код в буфер обмена
  1.  
  2. $uploaddir = 'uploads/'; // Папка куда закачивать файлы
  3. $extentions = array(".BMP",".bmp",".GIF",".gif",".JPEG",".jpeg",".JPG",".jpg",".JPE",".PNG",".png"); // Массив разрешенных форматов файлов
  4. $userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
  5. $maxfilesize = 20000000; // Максимально допустимый размер файла
  6. if(($format = array_search(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
  7.   {
  8.     // Если копирование произведено удачно, выводим сообщения
  9.      $fname = md5($_FILES['userfile']['name']);
  10.      $uploadfile = $uploaddir.$fname.$extentions[$format];
  11.      
  12.     if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
  13.       {
  14.        
  15.         echo "Ваш файл: <a href='../uploads/",$fname,$extentions[$format],"'>",$fname,$extentions[$format],"</a>";
  16.       }
  17.     else
  18.       {
  19.         echo ("<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");
  20.         echo ("<script language=\"javascript\">history.back();</script>");
  21.       }
  22.   }
  23.    // Если превышен максимальный размер файла
  24.  elseif ($maxfilesize < $userfilesize)
  25.   {
  26.     echo ("<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");
  27.     echo ("<script language=\"javascript\">history.back();</script>");
  28.   }
  29.  else
  30.   {
  31.     // Если расширение файла имеет недопустимое расширение
  32.     echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");
  33.     </script>");
  34.    echo ("<script language=\"javascript\">history.back();</script>");
  35.     exit();
  36.   }
  37.  
  38. # переадресация на
  39.  
  40. echo '<script type="text/javascript">
  41.  
  42. window.location = "wiv.php"
  43.  
  44. </script>';
  45.  
  46.  
  47. //Показ фоток
  48.  


у вас изначально ошибка в коде, вы с начало переносите файл к себе в папку сайта, и сохраняете с его же именем
PHP:
скопировать код в буфер обмена
  1.  
  2. move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)
  3.  

а потом хешируете его название функцией md5, и пытаетесь вызвать этот хеш, как какой то файл, а его вообще не существует!
PHP:
скопировать код в буфер обмена
  1. $fname = md5($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной
  2.         echo "Ваш файл: <a href='../uploads/$fname'>$fname</a>";

функция md5 не вычисляет никакого имени файла! читайте доки! она хеширует, и в конце хеша не будет никакого формата/разрешения, если его туда явно не указать

Цитата:

2)переименование ее (чтоб имена не повторялись)

md5 будет одинаковый для одинакового названия файла, другими словам он не будет уникален,

упс немного урезал, поправил

(Отредактировано автором: 19 Февраля, 2015 - 14:41:28)

 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 15:38:11
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




exlant спасибо, но выдает ошибку
Parse error: syntax error, unexpected end of file in /home/srv/www/upload.php on line 89

мол код php не закрыт
(Добавление)
sir1006 пишет:
exlant спасибо, но выдает ошибку
Parse error: syntax error, unexpected end of file in /home/srv/www/upload.php on line 89

мол код php не закрыт


точнее говоря закрывать не хочет всегда теперь винит последнию строку

(Отредактировано автором: 19 Февраля, 2015 - 15:40:42)

 
 Top
GoDr
Отправлено: 19 Февраля, 2015 - 15:59:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


Помог: 17 раз(а)




sir1006, посмотри стройку 33.. видимо она лишняя Улыбка (код который привёл exlant)


-----
Система управления веб-содержимым Lotos CMS
 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 16:20:29
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




GoDr пишет:
sir1006, посмотри стройку 33.. видимо она лишняя Улыбка (код который привёл exlant)
пасиб дружищеееееее)
 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 18:27:44
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




последний вопрос как к этому аплодер с таким связать:

CODE (html):
скопировать код в буфер обмена
  1. <form action='upload.php' method='post' enctype='multipart/form-data'>
  2. <input name='file[]' type='file' multiple='true' min='1' max='20'/>
  3. <input type='submit' value='Загрузить' />
  4. </form>


(мульти загрузку а то ссылаеться на неверное разширение)

с одиночной то все гуд))
 
 Top
exlant
Отправлено: 19 Февраля, 2015 - 20:53:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




вы же к загруженному файлу обращаетесь как

где
userfile - и есть имя отсылаемого инпута, значит и имя у него должно быть
PHP:
скопировать код в буфер обмена
  1.  
  2. <input name='userfile' type='file' multiple='true' min='1' max='20'/>
  3.  
 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 22:51:44
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




exlant пишет:
вы же к загруженному файлу обращаетесь как

где
userfile - и есть имя отсылаемого инпута, значит и имя у него должно быть
PHP:
скопировать код в буфер обмена
  1.  
  2. <input name='userfile' type='file' multiple='true' min='1' max='20'/>
  3.  


Ваши решения верны но не работоспособны пишет ошибка при загрузки
 
 Top
exlant
Отправлено: 19 Февраля, 2015 - 22:59:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




а можно текст ошибки тогда?
(Добавление)
и вот код который у меня на сервере работал
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <form action="" method="post" enctype="multipart/form-data">
  3.     <input type="file" name="userfile">
  4.     <input type="submit" value="go">
  5.    
  6. </form>
  7.  

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4.  
  5. //Загрузка фоток
  6.  
  7.  
  8. $uploaddir = 'uploads/'; // Папка куда закачивать файлы
  9. $extentions = array(".BMP",".bmp",".GIF",".gif",".JPEG",".jpeg",".JPG",".jpg",".JPE",".PNG",".png"); // Массив разрешенных форматов файлов
  10. $userfilesize = $_FILES['userfile']['size']; // Вычисление размера загружаемого файла
  11. $maxfilesize = 20000000; // Максимально допустимый размер файла
  12.  
  13.  
  14.  
  15.  if(($format = array_search(strrchr($_FILES['userfile']['name'], "."),$extentions)) && ($maxfilesize >= $userfilesize)) //
  16.   {
  17.     // Если копирование произведено удачно, выводим сообщения
  18.      $fname = md5($_FILES['userfile']['name']);
  19.      $uploadfile = $uploaddir.$fname.$extentions[$format];
  20.      
  21.     if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) //
  22.       {
  23.         $fname = md5($_FILES['userfile']['name']); // Вычисление имени файла и присвоение переменной
  24.         echo "Ваш файл: <a href='../uploads/",$fname,$extentions[$format],"'>",$fname,$extentions[$format],"</a>";
  25.       }
  26.     else
  27.       {
  28.         echo ("<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");
  29.         echo ("<script language=\"javascript\">history.back();</script>");
  30.       }
  31.   }
  32.    // Если превышен максимальный размер файла
  33.  elseif ($maxfilesize < $userfilesize)
  34.   {
  35.     echo ("<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");
  36.     echo ("<script language=\"javascript\">history.back();</script>");
  37.   }
  38.  else
  39.   {
  40.     // Если расширение файла имеет недопустимое расширение
  41.     echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");
  42.    
  43.   }
  44.  
  45.  
  46. ?>
  47.  


это все один файл

(Отредактировано автором: 19 Февраля, 2015 - 23:02:01)

 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 23:15:37
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




exlant в одиночном то тоже работает все но мульти лоад как организовать?
 
 Top
exlant
Отправлено: 19 Февраля, 2015 - 23:25:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




а для этого циклы нужно будет использовать, ладно сейчас напишу
 
 Top
sir1006
Отправлено: 19 Февраля, 2015 - 23:48:13
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




exlant
заранее пасип, просто уже немогу болею и вот решил пхп изучать а лучшее изучение наставление и практика для меня
 
 Top
exlant
Отправлено: 20 Февраля, 2015 - 00:01:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




во так должен работать
PHP:
скопировать код в буфер обмена
  1.  
  2. <form action="" method="post" enctype="multipart/form-data">
  3.     <input type="file" name="userfile[]" multiple="true">
  4.     <input type="submit" value="go">
  5.    
  6. </form>
  7. <?PHP
  8. function generatestring($len=32){ // можно выбрать количество генерируемых символов
  9.         $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPRQSTUVWXYZ0123456789'; //строка с символами для генерации строки
  10.         $str_len = strlen($str)-1;
  11.         $text = '';
  12.         while(strlen($text)<$len)
  13.             $text.=$str[mt_rand (0, $str_len)];
  14.        
  15.        
  16.         return $text;
  17.     }
  18.  
  19. //Загрузка фоток
  20.  
  21. if(is_array($_FILES['userfile'])){
  22.     $uploaddir = 'uploads/'; // Папка куда закачивать файлы
  23.     $extentions = array(".BMP",".bmp",".GIF",".gif",".JPEG",".jpeg",".JPG",".jpg",".JPE",".PNG",".png"); // Массив разрешенных форматов файлов
  24.     $maxfilesize = 20000000; // Максимально допустимый размер файла
  25.     $userfile = $_FILES['userfile'];
  26.    
  27.     $num = count($userfile['name']);
  28.     for($a=0; $a<$num; $a++){
  29.         $format[$a] = strrchr($userfile['name'][$a], ".");  
  30.         if(!in_array($format[$a], $extentions)){
  31.             // Если расширение файла имеет недопустимое расширение
  32.             echo ("<script language=\"javascript\">alert('Файл имеет недопустимое расширение!');</script>");
  33.             echo ("<script language=\"javascript\">history.back();</script>");
  34.             exit();
  35.         }
  36.         if($userfile['size'][$a]>=$userfile){
  37.             // Если превышен максимальный размер файла
  38.             echo ("<script language=\"javascript\">alert(\"Превышен максимальный размер файла!\");</script>");
  39.             echo ("<script language=\"javascript\">history.back();</script>");
  40.             exit();
  41.         }
  42.     }
  43.     for($a=0; $a<$num; $a++){
  44.         $new_file_name[$a] = generatestring().$format[$a];   // имена файлов так будут уникальнее, меньше шансов на совпадение
  45.         $uploadfile[$a] = $uploaddir.$new_file_name[$a];
  46.        
  47.         if(move_uploaded_file($_FILES['userfile']['tmp_name'][$a], $uploadfile[$a])){
  48.             // Если копирование произведено удачно, выводим сообщения
  49.             echo "Ваш файл: <a href='../uploads/",$new_file_name[$a],"' target='_blank'>",$new_file_name[$a],"</a><br>";
  50.         }else {
  51.             echo ("<script language=\"javascript\">alert(\"Ошибка при передаче файла на сервер!\");</script>");
  52.             echo ("<script language=\"javascript\">history.back();</script>");
  53.         }  
  54.     }
  55. }
  56. ?>
  57.  

я тоже учусь)) практика как говориться)

(Отредактировано автором: 20 Февраля, 2015 - 00:32:09)

 
 Top
sir1006
Отправлено: 20 Февраля, 2015 - 01:00:02
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




exlant Превосходно пасииииип
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB