Перейти к содержанию
Посмотреть в приложении

A better way to browse. Learn more.

Форум Академгородка, Новосибирск

A full-screen app on your home screen with push notifications, badges and more.

Чтобы установить это приложение на iOS и iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
Чтобы установить это приложение на Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

upload файлов

Опубликовано
вопрос в следующем как проверять расширение файла на то что он должен быть изображением, не смог найти такой информации в литературе! и когда надо проверять при загрузке на сервер или при выводе на веб страницу? или в обоих случаях! спасибо.
  • Ответов 41
  • Просмотры 2,9 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Рекомендуемые сообщения

Опубликовано

QUOTE (zO_om @ Mar 11 2007, 09:57)

Не совсем хороший код... Скажем так если у вас картинка не image будет, то варнинг будет - обращение к несуществующему индексу массива...

Опубликовано

QUOTE (Rusan @ Mar 14 2007, 22:47)

Не совсем хороший код... Скажем так если у вас картинка не image будет, то варнинг будет - обращение к несуществующему индексу массива...

Без варнингов оно конечно круто. Но когда система мощная, все уже проверено на XSS и т.д., то как правило забивают на такую ерунду. Ставят only error и вперед.

 

Варнингов стоит опасаться только если нет внешней защитной оболочки. А если мы уверены в приходимых данных, то есть мы уже их сами проверили, то к черту это все.

 

К тому же варнинг в данном примере ничего плохого не сделает.

 

https://academ.club/html/emoticons/_tomato_.gif

Опубликовано

QUOTE (АНТ0Н @ Mar 15 2007, 00:22)
Без варнингов оно конечно круто. Но когда система мощная, все уже проверено на XSS и т.д., то как правило забивают на такую ерунду. Ставят only error и вперед.

Варнингов стоит опасаться только если нет внешней защитной оболочки. А если мы уверены в приходимых данных, то есть мы уже их сами проверили, то к черту это все.

К тому же варнинг в данном примере ничего плохого не сделает.

https://academ.club/html/emoticons/_tomato_.gif

Не круто, а нормально и естественно!!!

 

Просто некрасиво если что-то не корректно работает, уж проще получить то что getimagesize возвращает false. Зачем еще preg городить????

 

ЛЮБОЙ WARNING в программе плохо и вообще показывать что вы никудышний программист!!! Если вы тем более надеятесь на всекие error_reporting = off

Опубликовано

QUOTE (Rusan @ Mar 14 2007, 22:47)
Не совсем хороший код... Скажем так если у вас картинка не image будет, то варнинг будет - обращение к несуществующему индексу массива...

Не понял ошибки, если картинка будет не image, я поменяю индекс. Он зависит от названия картинки в форме.

<input type="file" name="somename">

$_FILES['somename']

Опубликовано

QUOTE (zO_om @ Mar 17 2007, 08:42)
QUOTE (Rusan @ Mar 14 2007, 22:47)
Не совсем хороший код... Скажем так если у вас картинка не image будет, то варнинг будет - обращение к несуществующему индексу массива...

Не понял ошибки, если картинка будет не image, я поменяю индекс. Он зависит от названия картинки в форме.

$info=@getimagesize($_FILES['image']['tmp_name']);
...
preg_match('{image/(.*)}is', $info['mime'], $p)

 

Если у вас $_FILES['image']['tmp_name'] не image, то переменная $info будет false. В принципе варнинг который должен выскочить если мы делаем getimagesize не image мы уже заглушили, но вот если мы попытаемся обратиться к индексу mime булевой переменной, вам выдаст варнинг. Понятно?

Опубликовано

QUOTE (Rusan @ Mar 17 2007, 09:58)
если мы попытаемся обратиться к индексу mime булевой переменной, вам выдаст варнинг.

Неправда, просто не сработает рега.

Если не верите - возьмите строчку, вбейте в проверку и посмотрите результат. У меня если файл не имага всё корректно работает без варнингов.

Опубликовано
Всё... прогнал... извините... булеановские переменные без варнинга обращаются к несуществующим ключам массива...

Изменено пользователем Гость

Опубликовано
А я тут подумал.. А ведь может и такое сработать:
//Взято с php.net: If accessing the filename image is impossible, or if it isn't a valid picture, getimagesize() will generate an error of level E_WARNING.
//Можно попробовать просто проверить $info на "не false" :
//ЗЫ: Это просто домыслы, хотя сейчас, наверное, попробую.

if($info=@getimagesize($_FILES['image']['tmp_name'])) {
   echo("это каритнка");
}
else {
   echo("это не картинка");
}

Опубликовано

QUOTE (zO_om @ Mar 17 2007, 13:34)
А я тут подумал.. А ведь может и такое сработать:

Ну да!!! А я что писал?

 

QUOTE

Просто некрасиво если что-то не корректно работает, уж проще получить то что getimagesize возвращает false. Зачем еще preg городить????
Опубликовано

QUOTE (Rusan @ Mar 16 2007, 23:41)
проще получить то что getimagesize возвращает false. Зачем еще preg городить?

Честно говоря, этой строчки просто не заметил...

Две функции прега в моём коде - проверка на изображение и вытаскивание расширения.

Первая задача отпадает, т.к. мы проверяем проверкой значения getimagesize(), а вторая решается гораздо более быстрым explode()'ом:

 

if($info=@getimagesize($_FILES['image']['tmp_name'])) {
   $exp_type=explode(".", $_FILES['image]['name']);
   echo("это каритнка, ещё расширение: ".$exp_type[count($exp_type)-1]);
}
else {
   echo("это не картинка");
}

Ну что, господа, вешаем в факу как окончательный и самый правильный вариант? ;)

Опубликовано

QUOTE (zO_om @ Mar 17 2007, 15:04)
Две функции прега в моём коде - проверка на изображение и вытаскивание расширения.
Первая задача отпадает, т.к. мы проверяем проверкой значения getimagesize(), а вторая решается гораздо более быстрым explode()'ом:


Ну что, господа, вешаем в факу как окончательный и самый правильный вариант? ;)

а если я тебе подсуну гиф а у файла будет разрешение jpg??? И у тебя будет не правильное расширение. Так что правильнее будет создать массивчик вроде

$extensions = array('', 'gif', 'jpg', 'png'...);

$imageInfo = @getimagesize($imagename);
$extension = $extension[$imageInfo[2]];

 

Вот так надо примерно делать - тогда у вас и будет правильное расширение, а не та фигня что вам подсунул пользователь.

Опубликовано

QUOTE (Rusan @ Mar 16 2007, 23:41)

ЛЮБОЙ WARNING в программе плохо и вообще показывать что вы никудышний программист!!! Если вы тем более надеятесь на всекие error_reporting = off

Неправда ваша. https://academ.club/html/emoticons/smile.gif

Не "error_reporting = off", а "error_reporting = only_error". Еще раз повторюсь. В многомодульной системе с несколькими тысячами файлов ваш подход не верен. Размер кода вырастет в разы. Вам оно надо?

Для гостевой пойдет.

Опубликовано

QUOTE (АНТ0Н @ Mar 17 2007, 18:03)
QUOTE (Rusan @ Mar 16 2007, 23:41)

ЛЮБОЙ WARNING в программе плохо и вообще показывать что вы никудышний программист!!! Если вы тем более надеятесь на всекие error_reporting = off

Неправда ваша. https://academ.club/html/emoticons/smile.gif

Не "error_reporting = off", а "error_reporting = only_error". Еще раз повторюсь. В многомодульной системе с несколькими тысячами файлов ваш подход не верен. Размер кода вырастет в разы. Вам оно надо?

Для гостевой пойдет.

Вы мне будете рассказывать? Ой я вас умоляю - пишите сами гостевухи! Я уважаю ваше количество сообщений в форуме, но сейчас вы говорите полную чушь - любой варнинг = потенциальная ошибка, а если писать правильно, то и варнингов не будет.

 

Главное, что бы мне за вами потом не пришлось исправлять!!!

Опубликовано

QUOTE (Rusan @ Mar 17 2007, 18:38)
Главное, что бы мне за вами потом не пришлось исправлять!!!

Блин, очередной холивар и фалометрия.

Rusan, а вы знаете как написать программу без ошибок?

Опубликовано

QUOTE (Rusan @ Mar 17 2007, 18:38)
Главное, что бы мне за вами потом не пришлось исправлять!!!

Это исключенно абсолютно. С вами мы не пересекемся нигде и никогда. Религия не позволит.

И просьба - не пишите столько восклицательных знаков. Очень раздражает меня в русском языке так же как вас warning'и в РНР.

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Аккаунт

Навигация

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.