Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
1

Проверка на загружаемые данные

21.07.2012, 14:27. Показов 1971. Ответов 21
Метки нет (Все метки)

Вот код php обработчика:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    if(isset($_POST['step']) == 2)
    {
        if($_FILES["filename"]["size"] > 1024*3*1024)
        {
            echo "Размер файла превышает три мегабайта";
            exit();
        }
        if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
        {
            move_uploaded_file($_FILES["filename"]["tmp_name"], "img/".$_FILES["filename"]["name"]);
        } 
        else 
        {
            echo "Ошибка загрузки файла";
        }
    }
Вопрос: Как в данном коде можно сделать проверку, загружается ли картинка или что-либо другое?Например картинку с форматом .JPEG/.PNG?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.07.2012, 14:27
Ответы с готовыми решениями:

Исчезают загружаемые файлы
Господа знатоки, подскажите куда могут исчезать файлы, загружаемые в Mozila? Компьютер абсолютно...

Где хранятся загружаемые файлы?
Здравствуйте. Я новичок в этом деле и прошу сильно не пинать. Вопрос такого рода: Где физически...

Загружаемые в инфоблок картинки конвертируются в PNG
Кратко: загружаемые в инфоблок картинки конвертируются в PNG, а хотелось бы оставить формат как...

Как привести загружаемые картинки к единому размеру?
Задача такая, работники предприятия выполняют определенную работу, а затем в качестве подтверждения...

21
18 / 8 / 2
Регистрация: 12.02.2010
Сообщений: 200
21.07.2012, 14:44 2
Создаешь функцию:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function upload() {   
if ($_FILES[filename]){
 
  switch ($_FILES[filename][type]) {
    case 'image/gif':
      $sExt = 'gif';
      break;
    case 'image/jpeg':
      $sExt = 'jpg';
      break;
    case 'image/png':
      $sExt = 'png';
      break;
    default:
      echo  "Error: Недопустимое расширение файла. Допускаеться загружать только форматы gif, jpg, png.";
      return; }
 
     move_uploaded_file($_FILES["filename"]["tmp_name"], $outlink);
 
 
}
И вызываешь ее:
PHP
1
upload();
, если не эти форматы файла функция дальше проверки не пойдет.
1
Эксперт PHP
5164 / 3805 / 1330
Регистрация: 06.01.2011
Сообщений: 10,561
21.07.2012, 14:46 3
Я делаю так:
PHP
1
2
3
4
if( !preg_match( "/\.jpe?g|png|gif$/i", $_FILES["filename"]["name"] ) )
{
    echo "Неверное расширение файла!";
}
1
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
21.07.2012, 14:54  [ТС] 4
Lyodik, спасибо

Добавлено через 4 минуты
Lyodik,
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    if(isset($_POST['step']) == 2)
    {
        if($_FILES["filename"]["size"] > 1024*3*1024)
        {
            echo "Размер файла превышает три мегабайта";
            exit();
        }
        if( !preg_match("/\.jpeg|png|jpg|gif$/i", $_FILES["filename"]["name"]))
        {
            echo "Неверное расширение файла!";
        }
        if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
        {
            move_uploaded_file($_FILES["filename"]["tmp_name"], "img/new_rasp1.JPG");
        } 
        else 
        {
            echo "Ошибка загрузки файла";
        }
    }
Почему здесь не срабатывает?
0
Эксперт PHP
5164 / 3805 / 1330
Регистрация: 06.01.2011
Сообщений: 10,561
21.07.2012, 15:01 5
Vitorrio, а MIME-типы в браузере можно подделать). Так что оптимальный вариант - проверять присутствие в конце имени определённого окончания (расширения).

Добавлено через 4 минуты
Цитата Сообщение от Linked Посмотреть сообщение
Почему здесь не срабатывает?
Т.е. не срабатывает? Какие симптомы ?
0
KOPOJI
21.07.2012, 15:35
  #6

Не по теме:

Цитата Сообщение от Lyodik Посмотреть сообщение
Какие симптомы ?
чихает, кашляет и матерится :D

0
Para bellum
21.07.2012, 15:45
  #7

Не по теме:


Цитата Сообщение от KOPOJI Посмотреть сообщение
чихает, кашляет и матерится
Плохо, обследовать нужно :D

0
91 / 91 / 13
Регистрация: 14.07.2012
Сообщений: 539
21.07.2012, 20:21 8
Припоминается какой-то пост не помню где там предполагалось проверять само тело файла, а расширение можно и любое поставить.
0
Рождён удивлять
53 / 56 / 9
Регистрация: 08.08.2011
Сообщений: 438
22.07.2012, 01:20 9
у него в примере написано так
/\.jpe?g
а у вас так /\.jpeg
разницу чувствуете?
0
Эксперт PHP
5164 / 3805 / 1330
Регистрация: 06.01.2011
Сообщений: 10,561
22.07.2012, 07:42 10
Цитата Сообщение от vixa Посмотреть сообщение
у него в примере написано так
/\.jpe?g
а у вас так /\.jpeg
разницу чувствуете?
Да не, разницы нет, т.к. он написал и jpeg и jpg, а "jpe?g" включало в себя и jpg и jpeg одновременно.
1
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
22.07.2012, 15:53  [ТС] 11
Lyodik, симптом нету..Ни ошибок - ни чего другого...Просто не загружается файл.Загружаю файл с расширением .jpg

Добавлено через 1 минуту
*меня немного смущает вот это: $_FILES["filename"]["name"]
тут точно всё правильно?не tmp_name?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16831 / 6709 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.07.2012, 15:58 12
Цитата Сообщение от Linked Посмотреть сообщение
не tmp_name?
tmp_name - Это имя, которое присваивается файлу при загрузке на сервер
name - Это имя, как он назывался на компе у того кто его заливал

Добавлено через 3 минуты
вообще должно работать - все верно.
Цитата Сообщение от Linked Посмотреть сообщение
PHP
1
if( !preg_match("/\.jpeg|png|jpg|gif$/i", $_FILES["filename"]["name"]))
если (не (.jpeg(.jpg) или .png или .gif , независимо от регистра)) - то ...
0
21 / 21 / 6
Регистрация: 12.12.2010
Сообщений: 677
22.07.2012, 16:00  [ТС] 13
Нашёл причину.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    if(isset($_POST['step']) == 2)
    {
        if($_FILES["filename"]["size"] > 1024*3*1024)
        {
            echo "Размер файла превышает три мегабайта";
            exit();
        }
        if(!preg_match("/\.jpeg|png|jpg|gif$/i", $_FILES["filename"]["name"]))
        {
            echo "Неверное расширение файла!";
            exit();
        }
        if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
        {
            move_uploaded_file($_FILES["filename"]["tmp_name"], "img/new_rasp1.jpg");
        } 
        else 
        {
            echo "Ошибка загрузки файла";
        }
    }
move_uploaded_file($_FILES["filename"]["tmp_name"], "img/new_rasp1.jpg"); - было new_rasp.JPG, оказалось регистрозависимым...Я заливал в .JPG выводил походу в .JPG, а загружаемые картинки были в .jpg.Походу в этом была причина.Сейчас всё отлично работает.
0
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
22.07.2012, 16:00 14
Имя файла, которое было у клиента [name], может быть абсолютно любым. Нельзя на него полагаться и свято ему верить.
0
Эксперт PHP
5164 / 3805 / 1330
Регистрация: 06.01.2011
Сообщений: 10,561
22.07.2012, 17:38 15
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Имя файла, которое было у клиента [name], может быть абсолютно любым. Нельзя на него полагаться и свято ему верить.
И что предлагаете?
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16831 / 6709 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.07.2012, 17:44 16
http://www.php.net/manual/ru/f... e-type.php

Добавлено через 1 минуту
и http://www.php.net/manual/ru/f... getype.php
1
13201 / 6588 / 1040
Регистрация: 10.01.2008
Сообщений: 15,069
22.07.2012, 17:45 17
Например, getimagesize() из GD возвращает тип и размеры изображения, если оно является изображением известных типов.
2
KOPOJI
22.07.2012, 17:47
  #18

Не по теме:

Цитата Сообщение от Vovan-VE Посмотреть сообщение
Например, getimagesize() из GD
exif_imagetype() побыстрее работает (так написано на офф сайте)
Возвращаемое значение то же, что и во втором аргументе при возврате из функции getimagesize(), однако exif_imagetype() значительно быстрее.

3
18 / 8 / 2
Регистрация: 12.02.2010
Сообщений: 200
22.07.2012, 19:02 19
Цитата Сообщение от Lyodik Посмотреть сообщение
а MIME-типы в браузере можно подделать). Так что оптимальный вариант - проверять присутствие в конце имени определённого окончания (расширения).
Каким образом? в [type] как раз таки записывается тип файла по расширению, ты попробуй любой файл переименовать и загрузить, он тебе [type] выдаст по расширению, а не по реальному типу.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16831 / 6709 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
22.07.2012, 19:16 20
Цитата Сообщение от Vitorrio Посмотреть сообщение
Каким образом?
PHP
1
2
3
<?php header("Content-type: image/jpeg");
echo "Hello, world";
?>
сохраняешь с расширением .jpeg и вуаля.

Добавлено через 6 минут
даже не обязательно хедер слать вроде
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2012, 19:16

На компе на работаю загружаемые локально ASP, содержащие 'post'
у меняя на компе на работаю загружаемые локально ASP, содержащие 'post'... в чем дело?

Заставить Worksheet_Change отслеживать изменения в ячейках, загружаемые c DDE-сервера
Может кто сталкивался с проблемой: задача заставить Worksheet_Change отслеживать изменения в...

После удаления вируса в Windows 7 блокируются все файлы загружаемые из интернета
Удалил Вирус троян теперь не закчиваются файлы из интернета, выдаёт ошибку: &quot;Этот файл...

Проверка на вводимые данные
Имеется html страница с внедренным js скриптом, проблема заключается в следующем: при вводе нового...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru