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]   

> Без описания
shkarbatov
Отправлено: 14 Августа, 2011 - 15:02:31
Post Id



Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Июль 2011  


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




Подскажите пожалуйста, как в 3 случае, узнать размер файла, или хотя бы то, что файл больше upload_max_filesize, если загружаемый файл превышает upload_max_filesize?

Заранее благодарен!

CODE (html):
скопировать код в буфер обмена
  1. <form id="form1" action="send_email.php" method="post" enctype="multipart/form-data">
  2.      <input type="file" name="filename">
  3.      <input type="button" value="Загрузить" onClick="tr();">
  4.  </form>


PHP:
скопировать код в буфер обмена
  1. if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
  2.  {
  3.      if ($_FILES["filename"]["size"] < 1024*20*1024)
  4.      {
  5.          if($type == "jpg")
  6.          {
  7.              if (copy($_FILES['filename']['tmp_name'], $uploadfile))
  8.              {
  9.                  echo "<p>Файл успешно загружен на сервер</p>";
  10.                  $message .= "Файл успешно загружен на сервер.";
  11.                  mail($to, $subject, $message, $headers);
  12.              }
  13.              else
  14.              {
  15.                  echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
  16.                  $message .= "Файл загрузить на сервер не удалось.";                      
  17.                  mail($to, $subject, $message, $headers);
  18.              }
  19.          }
  20.          else
  21.          {
  22.              echo ("Файл не соответствует разрешенному формату");
  23.              $message .= "Файл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
  24.              mail($to, $subject, $message, $headers);
  25.          }
  26.      }
  27.      else
  28.      {
  29.          echo ("Размер файла превышает 20 мегабайт");
  30.          $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 20 МБ.";  
  31.          mail($to, $subject, $message, $headers);
  32.      }
  33.  }
  34.  else
  35.  {
  36.      $message .= "Файл не был выбран.";
  37.      mail($to, $subject, $message, $headers);
  38.  }
  39.  

-------------------------------- ---------------

1) до 2 Мб - работает правильно
post_max_size = 2M

2) до 8 Мб - загружает файлы, но работает не правильно
upload_max_filesize = 8M

3) больше 8 Мб - не работает вообще

-------------------------------- ----------------
1) Если я пробую загрузить файлы < 2 Мб, тогда все работает корректно (печатаю содержимое массива $_FILES):

Array
(
[filename] => Array
(
[name] => AIPort.dll
[type] => application/x-msdownload
[tmp_name] => Z:\tmp\php17C.tmp
[error] => 0
[size] => 258048
)
)
-------------------------------- ----------------
2) Если я пробую загрузить файлы от 2 Мб до 8 Мб, тогда я получаю вот такое вот (печатаю содержимое массива $_FILES), понятно что появляются ошибка из-за того, что post_max_size = 2M, в принципе можно в таком случае сравнивать с кодом ошибки, и если код ошибки равен 1, тогда писать письмо, что не удалось загрузить файл, так как он слишком большой, с этим понятно, но вот с 3 пунктом:

Array
(
[filename] => Array
(
[name] => EAGLES - hotel california.mp3
[type] =>
[tmp_name] =>
[error] => 1
[size] => 0
)
)
-------------------------------- ----------------
3) Если же я пробую загружать файлы больше 8 Мб, тогда я получаю следующее (печатаю содержимое массива $_FILES), из-за того, что upload_max_filesize = 8M, это тоже понятно, но как в таком случае мне узнать размер файла, ведь даже кода ошибки не выводится, и письмо с текстом, мол файл сшиком большой тоже не сформировать:

Array
(
)
 
 Top
illy
Отправлено: 14 Августа, 2011 - 16:03:43
Post Id



Участник


Покинул форум
Сообщений всего: 1117
Дата рег-ции: Июль 2011  
Откуда: от верблюда)


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




Пиши заранее чтоб не грузили больше 8 мб. Улыбка


-----
Всё гениальное - просто
И ещё проще, если ты - индиго
 
 Top
shkarbatov
Отправлено: 14 Августа, 2011 - 16:11:15
Post Id



Новичок


Покинул форум
Сообщений всего: 47
Дата рег-ции: Июль 2011  


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




Решил проблему путем добавления hidden поля в html форму, а далее анализирую $_FILES["filename"]["error"]
Может пригодиться кому-то еще.

Спасибо всем за помощь и консультирование!

CODE (html):
скопировать код в буфер обмена
  1. <input type="hidden" name="MAX_FILE_SIZE" value="15728640" />
  2. <input type="file" name="filename">
  3. <input type="button" value="Загрузить">


PHP:
скопировать код в буфер обмена
  1. if(isset($_FILES["filename"]["tmp_name"]) && is_uploaded_file($_FILES["filename"]["tmp_name"]))
  2. {
  3.         if ($_FILES["filename"]["error"] == 0)
  4.         {
  5.                 if($type == "jpg")
  6.                 {
  7.                         if (copy($_FILES['filename']['tmp_name'], $uploadfile))
  8.                         {
  9.                                 echo "<p>Файл успешно загружен на сервер</p>";
  10.                                 $message .= "Файл успешно загружен на сервер.";
  11.                                 $asd = mail($to, $subject, $message, $headers);
  12.                         }
  13.                         else  
  14.                         {
  15.                                 echo("<p>Ошибка! Не удалось загрузить файл на сервер, попробуйте повторить попытку позже!</p>");
  16.                                 $message .= "Файл загрузить на сервер не удалось.";                                            
  17.                                 mail($to, $subject, $message, $headers);
  18.                         }
  19.                 }
  20.                 else
  21.                 {
  22.                         echo ("Файл не соответствует разрешенному формату");
  23.                         $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось, так как он не соответствует разрешенному формату.";
  24.                         mail($to, $subject, $message, $headers);
  25.                 }
  26.     }
  27.         elseif ($_FILES["filename"]["error"] == 1 || 2)
  28.         {
  29.                 echo ("Размер файла превышает 15 мегабайт");
  30.                 $message .= "Файл загрузить на сервер не удалось, так как он превышает допустимый размер - 15 МБ.";    
  31.                 mail($to, $subject, $message, $headers);
  32.     }
  33.         elseif ($_FILES["filename"]["error"] == 3)
  34.         {
  35.                 $message .= "\r\n\r\n\r\nФайл загружен на сервер частично.";   
  36.                 mail($to, $subject, $message, $headers);
  37.     }  
  38.         else
  39.         {
  40.                 $message .= "\r\n\r\n\r\nФайл загрузить на сервер не удалось.";        
  41.                 mail($to, $subject, $message, $headers);
  42.         }
  43. }
  44. else
  45. {
  46.         mail($to, $subject, $message, $headers);
  47. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB