Проверка размера загружаемого файла.

lapwing

Новичок
Проверка размера загружаемого файла.

Здравствуйте! При отправке почты с несколькими вложенными файлами хочу сделать проверку размера каждого файла с тем, чтобы он не превышал 64 Кб. Попробовал вот так:
PHP:
 $filepath = array();
  $filename = array();
  for( $i = 0; $i < count($_FILES['file']); $i++) {
    if ( !empty( $_FILES['file']['tmp_name'][$i] ) and $_FILES['file']['error'][$i] == 0 ) {
	
      $filepath[] = $_FILES['file']['tmp_name'][$i];
      $filename[] = $_FILES['file']['name'][$i];
	  
// проверка загружаемого файла	  

  $maxsize = 65536;

  $size = filesize ($_FILES['file']['tmp_name'][$i]);
 
  if($size > $maxsize)
  {
     
    echo "Файл больше 64 Кб. Уменьшите размер вашего файла или загрузите другой. <br><a href='' onClick=window.close();>Закрыть окно</a>";
	 
  }
И загрузил фотку 977 Кб. Она прекрасно загрузилась. Вставил echo "$size";.Показывает 4357 ( т.е. я так понимаю~4.3Кб)
Попробовал вместо
PHP:
if($size > $maxsize)
поставить
PHP:
if($_FILES['file']['size'][$i] > $maxsize)
та же непонятка. Как такое может быть? Что я не так делаю?
 

mity

Новичок
1)
PHP:
for( $i = 0; $i < count($_FILES['file']['name']); $i++) {
2)
PHP:
print_r($_FILES);
 

lapwing

Новичок
Вот чего выдал:
Array ( [file] => Array ( [name] => Array ( [0] => DSCN1071.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) ) Array ( [file] => Array ( [name] => Array ( [0] => DSCN1071.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) ) Array ( [file] => Array ( [name] => Array ( [0] => DSCN1071.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) ) Array ( [file] => Array ( [name] => Array ( [0] => DSCN1071.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) ) Array ( [file] => Array ( [name] => Array ( [0] => DSCN1071.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) )
Что это значит? Из всего массива выдается только имя файла? А остальное?
 

mity

Новичок
Когда код выводите из php, особенно из print_r()
заключайте его в теги <pre> текст </pre>

а когда пишите здесь заключайте в BB коды &#091;code&#093; текст &#091;/code&#093;

А то форматирование пропадает и ничего не разобрать
 

lapwing

Новичок
Прошу прощения. Вот:
Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) )
</pre>

-~{}~ 13.06.10 13:53:

Тьфу, поспешил. Вот:
<pre>
Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) )
</pre>

-~{}~ 13.06.10 13:55:

Код:
Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) ) Array ( [name] => Array ( [0] => DSCN1091.JPG [1] => [2] => ) [type] => Array ( [0] => [1] => [2] => ) [tmp_name] => Array ( [0] => [1] => [2] => ) [error] => Array ( [0] => 2 [1] => 4 [2] => 4 ) [size] => Array ( [0] => 0 [1] => 0 [2] => 0 ) )
 

mity

Новичок
Вот о чём шла речь
PHP:
echo "<pre>";
print_r($_FILES);
echo "</pre>";
или
PHP:
echo str_replace("\n","<br>",var_export($_FILES,true));

или смотрите исходный код получившейся html страницы, там вывод print_r() будет "красивым"
 

lapwing

Новичок
Из этого я пока понял, что из трех был загружен один файл с именем DSCN1091.JPG. Вернее , наверно, не загружен, а попытался загрузиться, т.к. в [tmp_name] не пойму что, а в [error] двойка означает, что размер файла превышает значение MAX_FILE_SIZE заданное в форме (так и есть - в форме тоже 65536), а почему дальше в [size] по нулям вообще не пойму.

-~{}~ 13.06.10 14:16:

Я понял
Array
(
[name] => Array
(
[0] => DSCN1071.JPG
[1] =>
[2] =>
)

[type] => Array
(
[0] =>
[1] =>
[2] =>
)

[tmp_name] => Array
(
[0] =>
[1] =>
[2] =>
)

[error] => Array
(
[0] => 2
[1] => 4
[2] => 4
)

[size] => Array
(
[0] => 0
[1] => 0
[2] => 0
)

)
Почему кроме имени файла больше ничего нет?
 

mity

Новичок
А что по вашему должно быть в size?
Часть загруженного файла?

-~{}~ 13.06.10 14:21:

Потому что
error != 0
поэтому ничего и нет
 

lapwing

Новичок
Так как же быть? Получается файл большой, не загрузился, в size 0 и проверка $size > $maxsize ничего не дает (вернее дает что 0 конечно меньше 65536) Как же тогда проверить размер файла? Я кстати эту проверку взял отсюда
http://phpclub.ru/detail/article/upload
только немного упростил. Доупрощал неправильно?

-~{}~ 13.06.10 14:41:

Уф! Убрать проверку в самой форме! Пока получилось. Буду дальше пробовать. СПАСИБО
 

newARTix

Новичок
lapwing
а проверять на error = 0 и size != 0, не? :-/ Как все-таки люди умудряются всё с ног на голову переворачивать... замечаю по себе, когда копаюсь в машине :D
 

lapwing

Новичок
Хотел бы еще заодно спросить: почему в приведенном примере
http://phpclub.ru/detail/article/upload
делается так:
PHP:
$size = filesize ($_FILES['file']['tmp_name'][$i]);

if($size > $maxsize)
   {...
а не так
PHP:
 if($_FILES['file']['size'][$i] > $maxsize)
  {...
Есть ли разница?
 

Вурдалак

Продвинутый новичок
Хреновый пример потому как. Ничем, кроме move_uploaded_file(), «прикасаться» к файлу не стоит. Так что второй вариант предпочтительней.
 
Сверху