PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 08 Мая, 2019 - 08:15:40
Post Id


Гость


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


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




PHP:
скопировать код в буфер обмена
  1.  if(0==$_FILES['picture']['error']){
  2.  
  3.         $fileext = substr(strrchr($_FILES['picture']['name'], "."), 1);
  4.         if('jpg'!= $fileext&&'gif'!= $fileext&&'png'!= $fileext){
  5.             $err = 'The file extention is not allowed.<br>';
  6.         }
  7.         else
  8.             move_uploaded_file($_FILES['picture']['tmp_name'], $_SERVER['DOCUMENT_ROOT'].$path.$_FILES['picture']['name']);
  9.         header("Location: ".$_SERVER['REQUEST_URI']);
  10.     }

Далее, в разметке вывод переменной:


Если через сессионную переменную - работает, если через обычную переменную $err - не выводится на экран. Почему? Обычный echo в этом месте работал, но я добавил переадресацию, а перед отправкой заголовков выводить на экран ничего нельзя.. Попробовал записывать в обычную переменную $-err - не выводится на экран. Попробовал через сессионную переменную - работает.
Ну и попутно вопросы - как более адекватно(коротко, просто) записать конструкцию if(isset($_err)) echo $_err;? Через тернарный оператор есть варианты? NULL объединение тут вроде не подходит?

Ну и я так понимаю, что так проверять тип файлов не совсем корректно, Есть стандартные средства проверить какого типа файл? gif, txt, jpg и т.п.
 
 Top
Строитель Модератор
Отправлено: 08 Мая, 2019 - 08:31:37
Post Id



Участник


Просматривает форум
Сообщений всего: 1444
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Perun пишет:
Если через сессионную переменную - работает, если через обычную переменную $err - не выводится на экран. Почему? Обычный echo в этом месте работал, но я добавил переадресацию, а перед отправкой заголовков выводить на экран ничего нельзя..

$err и $_err - разные переменные, но причина даже не в этом, а именно в редиректе. Если использовать header("Location: ".$_SERVER['REQUEST_URI']);, и хотеть видеть текст ошибки, то без сессий не обойтись, т.к. после переадресации скрипт обнуляет post-переменные, а сессионные переменные будут сохранены до принудительного удаления (или до закрытия браузера).
Perun пишет:
Ну и попутно вопросы - как более адекватно(коротко, просто) записать конструкцию if(isset($_err)) echo $_err;? Через тернарный оператор есть варианты? NULL объединение тут вроде не подходит?
Если только для вывода значения переменной, то можно так
Но если в зависимости от значения переменной $_err нужно выполнять какие-то действия (код в несколько строк), то оператор if () {} тут как раз и нужен.
(Добавление)
И ещё - для определения расширения есть штатные инструменты:
PHP:
скопировать код в буфер обмена
  1. $fileExt = pathinfo($_FILES['picture']['name'], PATHINFO_EXTENSION);


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
Perun
Отправлено: 08 Мая, 2019 - 08:44:09
Post Id


Гость


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


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




С подчеркиванием-опечатки. Действительно, проблема не в этом. И ведь рассматривал же вариант обнуления переменных. Опять по невнимательности упустил из виду..

Про запись в тернарном операторе пустых кавычек, помню где то ругали за такую запись, что это типа не корректно. Я так делал раньше.
 
 Top
Perun
Отправлено: 08 Мая, 2019 - 15:52:18
Post Id


Гость


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


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




Строитель пишет:
для определения расширения

Да, это проще, чем разбирать имя/расширение через строковые функции, но кроме этого, больше вопрос в том, чтобы проверить, реально ли допустим файл с расширением jpg - картинка. Можно же любому файлу дать любое расширение.

(Отредактировано автором: 08 Мая, 2019 - 15:54:15)

 
 Top
Строитель Модератор
Отправлено: 08 Мая, 2019 - 17:59:22
Post Id



Участник


Просматривает форум
Сообщений всего: 1444
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




Perun пишет:
вопрос в том, чтобы проверить, реально ли допустим файл с расширением jpg - картинка. Можно же любому файлу дать любое расширение.
Кроме расширения нужно проверять mime-тип файла. В штатном наборе есть пара (а может и больше) функций:
mime_content_type()
finfo_open


-----
~ PHP-7 & REGEXP - This is a really powerful kit ~
****************************************
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB