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]   

> Описание: тип размера и тип файла
Shtorm_sai
Отправлено: 24 Января, 2011 - 23:34:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




Здрасте. Ребят подскажите пожалуйста как перобразовать байты в килобайты, килобайты в мегабайты и т.д. и опять же как созадть разрешённые типы файлов.
В общем задача. Есть форма загрузки файлов:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <form enctype="multipart/form-data" action="upload.php" method="post">
  2.  Отправить этот файл: <input name="upfile" type="file" />
  3.  <input type="submit" value="Загрузить" />
  4. </form>
  5.  


и собственно сам скрипт обработчик:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. $file_up_dir = "Z:\home\localhost\www\upload\up_files\ ";
  4.  
  5. $file_error = $_FILES['upfile']['error'];
  6. $file_tmp = $_FILES['upfile']['tmp_name'];
  7. $file_name = $_FILES['upfile']['name'];
  8. $file_type = $_FILES['upfile']['type'];
  9. $file_size = $_FILES['upfile']['size'];
  10. $file_max_size = 52428800;
  11.  
  12. if ($file_size <= $file_max_size)
  13. {
  14. copy($file_tmp, $file_up_dir.$file_name);
  15. echo "Файл успешно загружен!<br>Имя файла: $file_name<br>Тип файла: $file_type<br>Размер файла: $file_size";
  16. }
  17. else {
  18. echo "Файл привышает допустимый размер!<br>$file_error";
  19. }
  20. ?>
  21.  


Здесь нужно разрешить определённые типы файлов и размер файла при выводе писать в мегабайтах. Буду рад помощи... Улыбка

Да и ещё тип файла прописывается например как: audio/mpeg
Я ни чего не придумал кроме как преобразовать его так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. if ($file_type == "audio/mpeg") {$file_type = "mp3";}


Может есть какие то другие способы?

(Отредактировано автором: 24 Января, 2011 - 23:47:43)

 
 Top
OverNik
Отправлено: 24 Января, 2011 - 23:50:22
Post Id



Частый гость


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


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




0. http://php.su/forum/topic.php?fo...=35&topic=70
1. советую Copy(); заменить на move_upload_file(); http://php.su/functions/?move-uploaded-file
2. Так же советую давать имя переменой без всяких _ и так далее, что бы количество символов в имени не превышало 8.
 
 Top
Shtorm_sai
Отправлено: 25 Января, 2011 - 00:02:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




Спасибо.

Не могу только понять как эту функцию прикрутить к своему скрипту.

За советы отдельное спасибо Улыбка
 
 Top
OverNik
Отправлено: 25 Января, 2011 - 00:37:29
Post Id



Частый гость


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


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




файл function.php
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. function f_bafsize($size, $type) {
  5.  
  6. //устанавливаем конфигурацию вывода приставок, надеюсь разберетесь
  7.  
  8. if ($loc == 0) {
  9.  
  10. $iec = array('байт', 'Килобайт', 'Мегабайт', 'Гигабайт', 'Терабайт', 'Петабайт', 'Эксабайт');
  11.  
  12. }
  13.  
  14. if ($loc == 1) {
  15.  
  16. $iec = array('б', 'Кб', 'Мб', 'Гб', 'Тб', 'Пб', 'Эб');
  17.  
  18. }
  19.  
  20. if ($loc == 2) {
  21.  
  22. $iec = array('B','KB','MB','GB','TB','PB','EB');
  23.  
  24. }
  25.  
  26. $i = 0;
  27.  
  28. while (($size/1024)>1) {
  29.  
  30. $size = $size/1024;
  31.  
  32. $i++;
  33.  
  34. }
  35.  
  36. //Определяем какую приставку надо ставить
  37.  
  38. $iec = strpos($iec, '.');//Убираем все после плавающей запятой
  39.  
  40. $echo = $size.' '.$iec;//Формируем вывод
  41.  
  42. return $echo;
  43.  
  44. }
  45.  
  46. echo f_bafsize(1024, 1);//Выведет 1 Кб
  47.  
  48. echo f_bafsize(1024, 0);//Выведет 1 Килобайт
  49.  
  50. echo f_bafsize(1024, 2);//Выведет 1 KB
  51.  
  52. ?>
  53.  

скрипт обработчик:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $file_up_dir = "Z:\home\localhost\www\upload\up_files\ ";
  4.  
  5. $file_error = $_FILES['upfile']['error'];
  6. $file_tmp = $_FILES['upfile']['tmp_name'];
  7. $file_name = $_FILES['upfile']['name'];
  8. $file_type = $_FILES['upfile']['type'];
  9. $file_size = $_FILES['upfile']['size'];
  10. $file_max_size = 52428800;
  11.  
  12. if ($file_size <= $file_max_size)
  13. {
  14. copy($file_tmp, $file_up_dir.$file_name);
  15. include("function.php");
  16. echo "Файл успешно загружен!<br>Имя файла: $file_name<br>Тип файла:
  17. $file_type<br>
  18. Размер файла:".f_bafsize($file_size, 1)." кб";
  19. }
  20. else {
  21. echo "Файл привышает допустимый размер!<br>$file_error";
  22. }
  23. ?>
  24.  
 
 Top
Shtorm_sai
Отправлено: 25 Января, 2011 - 00:45:14
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




Спасибо Улыбка
 
 Top
OrmaJever
Отправлено: 25 Января, 2011 - 00:55:33
Post Id



Активный участник


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


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




PHP:
скопировать код в буфер обмена
  1. ... 'Терабайт', 'Петабайт', 'Эксабайт');

Ха-ха Это кто такие файлы будет загружать? Ха-ха
А вобще масиву $_FILES доверять нельзя. Даные можно подвенить (в масиве будет тип картинки а на самом деле будет скрипт.)
mime_content_type()


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Shtorm_sai
Отправлено: 25 Января, 2011 - 01:06:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




Не знаю правильно ли но сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $file_type = mime_content_type($_FILES['upfile']['type']);

Пишет ошибку:
Fatal error: Call to undefined function mime_content_type() in
 
 Top
OverNik
Отправлено: 25 Января, 2011 - 18:23:00
Post Id



Частый гость


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


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




PHP:
скопировать код в буфер обмена
  1. $file_type = mime_content_type($_FILES['upfile']['tmp_name']);
 
 Top
Uchkuma
Отправлено: 25 Января, 2011 - 18:47:30
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


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




OverNik
Shtorm_sai пишет:
Call to undefined function

Вообще, эта функция вроде как Deprecated. И вроде как для этой цели нужно использовать PECL расширение Fileinfo.
 
 Top
broshurkaplus
Отправлено: 25 Января, 2011 - 19:28:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 354
Дата рег-ции: Янв. 2011  
Откуда: Пружаны Бресткая обл. Беларусь


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




я новичок сам долго разбирался но сделал проверку на типы файлов так
CODE (htmlphp):
скопировать код в буфер обмена
  1. $file_types = array("image/jpeg" => "jpg","image/pjpeg" => "jpg","image/gif" => "gif","image/png" => "png",);
  2. $width=null;
  3. $img_info = getimagesize($_FILES['FILE']['tmp_name']);
  4. $img_type = $img_info["mime"];
  5. list($width, $height, $t, $attr)=$img_info;
  6. if(!$file_types[$img_type]) {
  7. die("Просим прощения, но картинка должна быть в jpeg, jpg, gif или png формате. Пожалуйста, попробуйте ещё раз.");
  8. }
  9. else
  10. {$file_suffix=$file_types[$img_type];}


у меня работает эти типы загружает, а например .txt .doc нет
 
 Top
Shtorm_sai
Отправлено: 26 Января, 2011 - 04:19:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




Ну я проще сделал пока. В отдельный файл вынес массив такого вида:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. $typefiles = array (
  3.                         'application/x-tar' => 'rar',
  4.                         'application/x-zip-compressed' => 'zip',
  5.                         'video/x-ms-wmv' => 'wmv',
  6.                         'audio/mid' => 'midi',
  7.                         'audio/mpeg' => 'mp3',
  8.                         'audio/x-wav ' => 'wav',
  9.                         'audio/x-ms-wma' => 'wma',
  10.                         'video/avi' => 'avi',
  11.                         'video/x-msvideo' => 'avi',
  12.                         'video/mpeg' => 'mpeg',
  13.                         'video/quicktime' => 'mov',
  14.                         'image/bmp' => 'bmp',
  15.                         'image/gif' => 'gif',
  16.                         'image/jpeg' => 'jpeg',
  17.                         'image/png' => 'png',
  18.                         'application/futuresplash' => 'swf',
  19.                         'application/pdf' => 'pdf',
  20.                         'application/x-msexcel' => 'xls',
  21.                         'application/msword' => 'doc',
  22.                         'text/plain' => 'txt',
  23.                         'application/x-msdownload' => 'exe'
  24. );
  25. ?>


В upload.php проинклудил файл с массивом и на вывод расширения сделал так.
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. move_uploaded_file($file_tmp, $file_up_dir.$file_name);
  3. echo "Файл успешно загружен!<br>Имя файла: $file_name<br>Тип файла: ".$typefiles[$file_type]."<br>Размер файла: $file_size<br><br>Ссылка для скачивания: <a href='http://localhost/upload/up_files/%20$file_name'>http://localhost/upload/up_files/%20$file_name</a>";
  4.  


Это именно на определение файла. А вот до проверки ещё не допетрил) Сейчас буду думать Улыбка Нужно функции научиться писать Улыбка
(Добавление)
broshurkaplus пишет:
я новичок сам долго разбирался но сделал проверку на типы файлов так
CODE (htmlphp):
скопировать код в буфер обмена
  1. $file_types = array("image/jpeg" => "jpg","image/pjpeg" => "jpg","image/gif" => "gif","image/png" => "png",);
  2. $width=null;
  3. $img_info = getimagesize($_FILES['FILE']['tmp_name']);
  4. $img_type = $img_info["mime"];
  5. list($width, $height, $t, $attr)=$img_info;
  6. if(!$file_types[$img_type]) {
  7. die("Просим прощения, но картинка должна быть в jpeg, jpg, gif или png формате. Пожалуйста, попробуйте ещё раз.");
  8. }
  9. else
  10. {$file_suffix=$file_types[$img_type];}


у меня работает эти типы загружает, а например .txt .doc нет


В общем сделал так.

Вытягиваем все ключи из массива typefiles
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $typefiles2 = array_keys($typefiles);
  3.  

И сравниваем входящиий тип файла с типом из ключа что в массиве:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. if (in_array($filetype, $typefiles2)) {
  3. if ($filesize <= $filemaxsize)
  4. {
  5. ...
  6.  


Не знаю правильно или нет. Но всё работает)
 
 Top
Volt
Отправлено: 28 Января, 2011 - 11:33:25
Post Id


Гость


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


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




Цитата:
Ну я проще сделал пока. В отдельный файл вынес массив такого вида:
CODE (htmlphp):
скопировать код в буфер обмена
<?php
$typefiles = array (
'application/x-tar' => 'rar',
'application/x-zip-compressed' => 'zip',
'video/x-ms-wmv' => 'wmv',
'audio/mid' => 'midi',
'audio/mpeg' => 'mp3',
'audio/x-wav ' => 'wav',
'audio/x-ms-wma' => 'wma',
'video/avi' => 'avi',
'video/x-msvideo' => 'avi',
'video/mpeg' => 'mpeg',
'video/quicktime' => 'mov',
'image/bmp' => 'bmp',
'image/gif' => 'gif',
'image/jpeg' => 'jpeg',
'image/png' => 'png',
'application/futuresplash' => 'swf',
'application/pdf' => 'pdf',
'application/x-msexcel' => 'xls',
'application/msword' => 'doc',
'text/plain' => 'txt',
'application/x-msdownload' => 'exe'
);
?>
парни я а я могу добавить свои типы расширения??например 'application/http' => 'www',?
 
 Top
Shtorm_sai
Отправлено: 28 Января, 2011 - 13:36:36
Post Id



Частый гость


Покинул форум
Сообщений всего: 135
Дата рег-ции: Янв. 2011  
Откуда: Новосибирск, Россия


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




 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB