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
Форумы портала PHP.SU :: Версия для печати :: Вопрос по загрузке файлов
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Вопрос по загрузке файлов

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

1. Shtorm_sai - 24 Января, 2011 - 23:34:29 - перейти к сообщению
Здрасте. Ребят подскажите пожалуйста как перобразовать байты в килобайты, килобайты в мегабайты и т.д. и опять же как созадть разрешённые типы файлов.
В общем задача. Есть форма загрузки файлов:
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";}


Может есть какие то другие способы?
2. OverNik - 24 Января, 2011 - 23:50:22 - перейти к сообщению
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.
3. Shtorm_sai - 25 Января, 2011 - 00:02:39 - перейти к сообщению
Спасибо.

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

За советы отдельное спасибо Улыбка
4. OverNik - 25 Января, 2011 - 00:37:29 - перейти к сообщению
файл 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.  
5. Shtorm_sai - 25 Января, 2011 - 00:45:14 - перейти к сообщению
Спасибо Улыбка
6. OrmaJever - 25 Января, 2011 - 00:55:33 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. ... 'Терабайт', 'Петабайт', 'Эксабайт');

Ха-ха Это кто такие файлы будет загружать? Ха-ха
А вобще масиву $_FILES доверять нельзя. Даные можно подвенить (в масиве будет тип картинки а на самом деле будет скрипт.)
mime_content_type()
7. Shtorm_sai - 25 Января, 2011 - 01:06:32 - перейти к сообщению
Не знаю правильно ли но сделал так:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $file_type = mime_content_type($_FILES['upfile']['type']);

Пишет ошибку:
Fatal error: Call to undefined function mime_content_type() in
8. OverNik - 25 Января, 2011 - 18:23:00 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $file_type = mime_content_type($_FILES['upfile']['tmp_name']);
9. Uchkuma - 25 Января, 2011 - 18:47:30 - перейти к сообщению
OverNik
Shtorm_sai пишет:
Call to undefined function

Вообще, эта функция вроде как Deprecated. И вроде как для этой цели нужно использовать PECL расширение Fileinfo.
10. broshurkaplus - 25 Января, 2011 - 19:28:08 - перейти к сообщению
я новичок сам долго разбирался но сделал проверку на типы файлов так
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 нет
11. Shtorm_sai - 26 Января, 2011 - 04:19:04 - перейти к сообщению
Ну я проще сделал пока. В отдельный файл вынес массив такого вида:
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.  


Не знаю правильно или нет. Но всё работает)
12. Volt - 28 Января, 2011 - 11:33:25 - перейти к сообщению
Цитата:
Ну я проще сделал пока. В отдельный файл вынес массив такого вида:
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',?
13. Shtorm_sai - 28 Января, 2011 - 13:36:36 - перейти к сообщению
http://www[dot]spravkaweb[dot]ru/php/pril/mime

 

Powered by ExBB FM 1.0 RC1