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]   

> Без описания
alexpebody
Отправлено: 03 Июня, 2016 - 11:04:09
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




Доброго всем времени.

Подскажите, что то никак найти зацепку не могу, есть код (куском):

index.html
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <input type="file" size="32" name="xtt[]">
  3.  


Выглядит вот так (кто не понял о чем я):


upload.php
PHP:
скопировать код в буфер обмена
  1.  
  2. if($_FILES['xtt']['size'][0] > 1024*1024*1024) exit();
  3.  


Но прикол в том, что $_FILES['xtt']['size'][0] определяет только вхождение и размер первого файла в массиве $_FILES, соответственно считывает размер только первого файла, к примеру: 1й файл который мы загружаем в форме = 1МБ, 2й = 1000МБ, в итоге ограничение не сработает, тк $_FILES['xtt']['size'][0] видит только 1МБ первого файла.

Как показать размер всех файлов в массиве, чтобы узнать размер каждого и если размер любого больше 1ГБ, то exit();

Заранее СПАСИБО!


З.Ы. Искал всяко, но кроме функций на $_FILES ничего толком.
Прикреплено изображение (Нажмите для увеличения)
BoxImg.png

(Отредактировано автором: 03 Июня, 2016 - 12:37:54)

 
 Top
OrmaJever Модератор
Отправлено: 03 Июня, 2016 - 11:06:39
Post Id



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


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


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




alexpebody пишет:
$_FILES['xtt']['size'][0]

вы точно ничего не напутали? по-моему должно быть так
$_FILES['xtt'][0]['size']
а по сути дела
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt'] as $file) {
  2.    if($file['size'] > 1024*1024*1024) exit();
  3. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 11:07:37
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




OrmaJever пишет:
вы точно ничего не напутали?


Проверил, не показывает размера совсем не видит:
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt'] as $file) {
  2.         echo $file['size'];
  3. }


Дает ошибку: Notice: Undefined index: size

, не видит элементов в массиве $_FILES['xtt'], дело в том, что загружается пачка файлов, мне нужно проверить размер каждого файла в этом массиве, как пока не соображу. Может что то путаю, подскажите? Спасибо!

Т.е.: $_FILES['xtt']['size'][0] только так начинает видить 1й файл и его размер, вот так $_FILES['xtt']['size'] - не видит размера вообще (

Еще конкретнее постараюсь задать вопрос: Как узнать размер каждого файла в массиве $_FILES, при MultiPart загрузке файлов и соответственно проверить условием?

OrmaJever пишет:
$_FILES['xtt'][0]['size']

Так, тоже не видит размера совсем, те пусто в переменной.

(Отредактировано автором: 03 Июня, 2016 - 11:32:31)

 
 Top
OrmaJever Модератор
Отправлено: 03 Июня, 2016 - 11:33:58
Post Id



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


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


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




может я ошибся, и вправду должно быть $_FILES['xtt']['size'][0], тогда будет так
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt']['size'] as $size) {
  2.    if($size > 1024*1024*1024) exit();
  3. }


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 11:37:04
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt']['size'] as $size) {
  2. echo $size;
  3. }


Показывает только 1е вхождение, те считает только 1й файл также как и у меня. А мне нужно как то показать размер каждого файла? Как это можно сделать?

Если выбирается 1й файл = 10МБ, а второй скажем 50МБ, скрипт считает только 1й, соответственно условие будет ложным, тк считает и смотрит только на 1й файл.

Вот пример отображения:

Загружаю 2 разных файла, но размер показывает один и тот же, те размер первого файла.

З.Ы. В идеале, условие такое: если любой из файлов в массиве больше 1ГБ, тогда exit();

Глупо конечно, но может смотреть на сессию в папку: $_FILES['userfile']['tmp_name'] но это через чур как по мне. Есть хоть какие то идеи?
Прикреплено изображение (Нажмите для увеличения)
BoxImg2.png

(Отредактировано автором: 03 Июня, 2016 - 12:38:28)

 
 Top
andrewkard
Отправлено: 03 Июня, 2016 - 11:47:25
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


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




alexpebody
Что тут приходит?
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 11:49:21
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




andrewkard пишет:
Что тут приходит?


Array ( [xtt] => Array ( [name] => Array ( [0] => EverlastingSummer.jpg [1] => InetPrivozMap.png ) [type] => Array ( [0] => image/jpeg [1] => image/png ) [tmp_name] => Array ( [0] => ...temp\php16DC.tmp [1] => ...temp\php16FC.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 301522 [1] => 264833 ) ) )
...files/nx99jueverlastingsummer .jpg
Array ( [xtt] => Array ( [name] => Array ( [0] => EverlastingSummer.jpg [1] => InetPrivozMap.png ) [type] => Array ( [0] => image/jpeg [1] => image/png ) [tmp_name] => Array ( [0] => ...temp\php16DC.tmp [1] => ...temp\php16FC.tmp ) [error] => Array ( [0] => 0 [1] => 0 ) [size] => Array ( [0] => 301522 [1] => 264833 ) ) )
...files/a4av85inetprivozmap.png

з.ы. Загружаю 2 файла разного размера:
EverlastingSummer.jpg
InetPrivozMap.png

Через MultiPart

(Отредактировано автором: 03 Июня, 2016 - 11:50:34)

 
 Top
Viper
Отправлено: 03 Июня, 2016 - 11:50:22
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




alexpebody пишет:
при MultiPart загрузке файлов
шта? Может всё же chunked?
И приведите уже HTML-код формы, а не одного инпута.
PHP:
скопировать код в буфер обмена
  1. echo '<pre>';
  2. print_r($_FILES);
  3. echo '</pre>';
помогает перестать фантазировать.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 11:54:00
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




Viper пишет:
помогает перестать фантазировать.


Viper пишет:
И приведите уже HTML-код формы, а не одного инпута.

Конечно, если нужно:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form action="upload.php" method="post" name="form" ENCTYPE="multipart/form-data">
  3. <input type="file" size="32" name="xtt[]">
  4. <input name="" type="submit" onclick="this.disabled='disabled'; document.forms.item(0).submit();" onmousedown="openbox('box')"; value="Нажмите для загрузки файлов на сервер"></p></form>

PHP:
скопировать код в буфер обмена
  1. move_uploaded_file($_FILES['xtt']['tmp_name'], $uploadfile);
  2.  


Вот по сути весь код операции, очень простой. Но суть проблемы узнать размер каждого файла в массиве MultiPart, а показывает в лучшем случае только первый. (

З.Ы. Из картинки приведенной выше, я вижу вхождение как и должно быть: [0] = 1й файл, [1] = 2й файл, но как написать условие? Может кто то подсказать? Как показать все размеры всех файлов в массиве, ведь сколько их загрузит пользователь мы не знаем (( те надо как то проверять длину массива ( не совсем понимаю...

Как бы я не пробовал и так:
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt']['size'] as $fname){
  2. echo $fname;
  3. }

и так:
PHP:
скопировать код в буфер обмена
  1. echo $_FILES['xtt']['size'][0];
  2. echo $_FILES['xtt']['size'][1];


Показывает размер только первого файла в массиве Огорчение
Прикреплено изображение (Нажмите для увеличения)
BoxImg3.png

(Отредактировано автором: 03 Июня, 2016 - 12:38:50)

 
 Top
Viper
Отправлено: 03 Июня, 2016 - 12:34:15
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




alexpebody не заливайте картинки на говнокал.сру! Он не у всех работает(да и желания нет). Прикрепляйте к посту!


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 12:35:21
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




Viper пишет:
alexpebody не заливайте картинки на говнокал.сру! Он не у всех работает(да и желания нет). Прикрепляйте к посту!

Без проблем, сейчас переделаю. Привычка.

PHP 5.5 на хосте:
PHP:
скопировать код в буфер обмена
  1. echo $_FILES['xtt']['size'][0];
  2. echo $_FILES['xtt']['size'][1];


Начал показывать:
301522
264833
...files/sol174everlastingsummer .jpg
301522
264833
...files/3ye4i7inetprivozmap.png

Кто может, подскажите, как написать условие: если хотя бы один файл в массиве превышает 1ГБ, то exit(); ?

(Отредактировано автором: 03 Июня, 2016 - 12:44:01)

 
 Top
Viper
Отправлено: 03 Июня, 2016 - 12:46:55
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




multiple инпуту допишите


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 12:48:45
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




Viper пишет:
multiple инпуту допишите

Ок, сделано, а как написать условие: если хотя бы один файл в массиве превышает 1ГБ, то exit();
 
 Top
Viper
Отправлено: 03 Июня, 2016 - 12:51:00
Post Id



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


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


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




http://php.net/manual/en/functio...esize.php#115792 функция для проверки размера. Желательно её, т.к. у вас по виду могут большое файло заливать.

http://forum.php.su/topic.php?fo...42838#1464942838 уже готово.


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
alexpebody
Отправлено: 03 Июня, 2016 - 12:53:39
Post Id


Новичок


Покинул форум
Сообщений всего: 53
Дата рег-ции: Апр. 2013  


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




Большое спасибо, если сделать вот так:
PHP:
скопировать код в буфер обмена
  1. foreach($_FILES['xtt']['size'] as $size) {
  2.    if($size > 1024*1024*1024) exit();
  3. }


Вроде работает! Радость

(Отредактировано автором: 03 Июня, 2016 - 13:07:03)

 
 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