Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с определнием формата файла 
:(
    Опции темы
yngwie19
Дата 3.2.2010, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



здравствуйте у меня есть форма регистрации, в которой добавлен type=file для загрузки аватара изображения. В скрипте который проверяет правильность заполнения формы регистрации присутствует проверка формата загружаемого изображения:
Код

if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name']))
{
...
}
else
{
   exit("плохой формат");
}

Когда пробую загрузить например  какой-нибудь левый файл типа .zip объемом 2 mb, то проверка срабатывает и выдается сообщение "плохой формат", а если пробую загрузить zip. к примеру 120mb, то он не доходит до этой проверки а останавливается раньше, там где у меня проверка:
Код

if (isset($_POST['login'])) {$login = $_POST['login'];if ($login == ''){ unset($login);}} 
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password ==''){ unset($password);}}

/*Если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт*/
if (empty($login) or empty($password)) 
    exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");

Подскажите почему так?
PM MAIL   Вверх
Veve
Дата 3.2.2010, 11:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 1.1.2005
Где: Латвия, Рига

Репутация: 3
Всего: 13



Что означает: 
Цитата

он не доходит до этой проверки а останавливается раньше


Какое сообщение об ошибке? Или как ты узнаешь, что он там останавливается?

Скорее всего в настройках указан размер файла для upload < 120mb
PM MAIL ICQ Skype MSN   Вверх
yngwie19
Дата 3.2.2010, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Veve, вот скрипт который проверяет регистрационные данные пользователя:
Код

<?php
if (isset($_POST['login'])) {$login = $_POST['login'];if ($login == ''){ unset($login);}} 
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password ==''){ unset($password);}}

/*Если пользователь не ввел логин или пароль, то выдаем ошибку и останавливаем скрипт*/
if (empty($login) or empty($password)) 
    exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");

if(preg_match('/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/',$_FILES['fupload']['name'])) //проверка формата исходного изображения
{
     .. //загрузка изображения на сервер
}
else
{
    exit ("Аватар должен быть в формате <strong>JPG,GIF или PNG</strong>");
}


если загружаю zip файл размером 9 kb, получаю сообщение  "Аватар должен быть в формате <strong>JPG,GIF или PNG",
а если загружаю zip файл размером 120 mb, то получаю сообщение Вы ввели не всю информацию, вернитесь назад и заполните все поля!.
Т.е во втором случае скрипт не доходит до проверки формата изображения, а говорит что якобы не введены логин и пароль (хотя все введено).
PM MAIL   Вверх
IgorIV
Дата 3.2.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



В самом начале поставь.
Код

$sizeallfiles=120000;    
if ($_SERVER ['CONTENT_LENGTH'] > $sizeallfiles)
{
    echo 'Слишком большое изображение';
}

А если архив .zip переименновать в .jpg и загрузить?
PM MAIL   Вверх
yngwie19
Дата 3.2.2010, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



IgorIV, к сожалению $_SERVER ['CONTENT_LENGTH'] > $sizeallfiles не помогло, та же самая ошибка.

Цитата(IgorIV @  3.2.2010,  20:41 Найти цитируемый пост)
А если архив .zip переименновать в .jpg и загрузить? 

тоже самое.

Может все дело в том что Я тестирую на локальном компе на денвире?
PM MAIL   Вверх
IgorIV
Дата 3.2.2010, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Да нет же, я неправильно объяснил. Если ты попытаешся загрузить 9 кб файл, с графическим расширением, но с любым содержанием, твой скрипт его пропустит.
Цитата(yngwie19 @  3.2.2010,  18:34 Найти цитируемый пост)
а говорит что якобы не введены логин и пароль (хотя все введено).

На сервер ты послал, а он-то принял? Проверяй.
Цитата(yngwie19 @  3.2.2010,  20:57 Найти цитируемый пост)
IgorIV, к сожалению $_SERVER ['CONTENT_LENGTH'] > $sizeallfiles не помогло, та же самая ошибка.

Разумеется, exit -то нет. Сообщение появилось?
PM MAIL   Вверх
yngwie19
Дата 3.2.2010, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 829
Регистрация: 15.6.2008
Где: Новгород

Репутация: нет
Всего: нет



Цитата(IgorIV @  3.2.2010,  21:58 Найти цитируемый пост)
Да нет же, я неправильно объяснил. Если ты попытаешся загрузить 9 кб файл, с графическим расширением, но с любым содержанием, твой скрипт его пропустит.

да но как пропускает, он по крайней мере говорит, что файл не того формата.

Цитата(IgorIV @  3.2.2010,  21:58 Найти цитируемый пост)
На сервер ты послал, а он-то принял? Проверяй.

не доходит до этой строчки.
PM MAIL   Вверх
IgorIV
Дата 4.2.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 642
Регистрация: 7.9.2009

Репутация: 2
Всего: 8



Цитата(yngwie19 @  3.2.2010,  22:21 Найти цитируемый пост)
не доходит до этой строчки.

 smile 
var_dump($_POST);
Тебя никто не заставляет писать exit. Естественно после него ничего не выводится, скрипт прекращает работу.
По сути, твои 120 мб больше разрешённых. Сервер обрывает передачу и никаких данных нет.
PM MAIL   Вверх
capitan
Дата 5.2.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: 9
Всего: 13



yngwie19,  Кто же так проверяет допустимые расширения? Может не стоит с самого начала писать дырявый скрипт?

Можно посмотреть в такую сторону:
Код

if($_FILES['fupload']['type'] != "image/gif") {
   echo "Sorry, we only allow uploading GIF images";
   exit;
 }


Но эту проверку тоже можно обойти, но уже сложнее. Немного погуглив можно найти правильное решение.



Это сообщение отредактировал(а) capitan - 5.2.2010, 15:07
PM MAIL WWW ICQ   Вверх
TName
Дата 7.2.2010, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 16.3.2008

Репутация: нет
Всего: нет



если сильно напрягает, что ошибка не та вылазит, когда файл большой, то иди в php.ini и там
Код

upload_max_filesize = какой_тебе_надо_размер;

А вобще вот здесь всё понятно расписано откуда ноги растут.

P.S. С английским надо дружить. Хотя бы читать.
PM MAIL   Вверх
Photon
Дата 11.2.2010, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Злобный программер
**


Профиль
Группа: Участник
Сообщений: 282
Регистрация: 27.2.2009
Где: Таганрог

Репутация: 10
Всего: 12



А может проще вообще использовать js-скрипт, который будет проверять это еще на клиенте?
Например jQuery MultiFile - удобная штука

А в данном случае всё происходит от того, что веб-сервер сначала получает полностью все загружаемые данные, а потом передаёт их в PHP для обработки. Если размер файла больше, чем максимальный размер POST-данных, разрешённый у PHP (там есть два параметра: upload_max_filesize и post_max_size), то PHP считает, что ему вообще ничего не пришло (в том числе и логин с паролем).

Это сообщение отредактировал(а) Photon - 11.2.2010, 00:11


--------------------
With best regards..
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.