|
|
|
| Ниже приведенный скрипт успешно загружает файлы на сервер , но проблема в том что мне нужно чтобы он сверял есть ли такое расширение в массиве $extentions = array(".gif",".jpg",".jpeg"); , если да, то разрешаем загрузку, в противном случае нет.
<?
$extentions = array(".gif",".jpg",".jpeg");
if (!empty($_FILES['image']['tmp_name']))
{
if(in_array(strrchr($_FILES['attach']['name'], "."),$extentions))
{
// Определяем расширение файла
$ext = strrchr($_FILES['image']['name'], ".");
// Формируем путь к файлу
$image = "bns/".date("YmdHis",time())."$ext";
if (copy($_FILES['image']['tmp_name'], "../".$image))
{
// Уничтожаем файл во временной директории
unlink($_FILES['image']['tmp_name']);
// Изменяем права доступа к файлу
chmod("../".$image, 0644);
}
echo "Фотография успешно загружена";
} else echo "Файл имеет недопустимое расширение!";
} else echo "Фотография не загружена</br>"
?>
|
В чем может моя ошибка? | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 17:15)
| | В том, что Вы проверяете расширение у файла attach, а не image. | |
|
|
|
|
|
|
|
для: BinLaden
(24.08.2008 в 17:16)
| | Мда...Из учебника скопировал, лень было проверить внимательнее. Спасиба большое! | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 17:30)
| | Обычно для отслеживая таких ошибок существуют Notice. Вам их там в учебнике случаем не советуют вырубить? | |
|
|
|
|
|
|
|
для: BinLaden
(24.08.2008 в 17:32)
| | Вообще-то я и не выставлял уровень ошибок, если Вы это имеете ввиду | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 17:30)
| | Из учебника скопировал, лень было проверить
Дальше так будете продолжать "в минуса" уйдёте... | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 17:15)
| | Совсем недавно "махали кулаками" по этому поводу и опять... Ну уж, если проверять, доверяя браузеру, то уж хотя бы по $_FILES['image']['type'], но никак по тому, что там после точки написано. Все-ли браузеры передают корректно тип изображения, стоит-ли доверять им, сказать не могу, но, если есть способ проверить это иным путем, более надежным, то почему не использовать. Не верьте тому, что стоит после точки. | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 18:10)
| | Не совсем понял о чем Вы. Имеете ввиду что данный способ на допустимость расширений является ненадежным? | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 18:19)
| | А вы считаете надежным? А что мне мешает "обматерить" любой файл расширением, например, .jpg? Ваша проверка по тому, что "за точкой", без проблем его пропустит, не так ли? | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 18:21)
| | Ну да впринципе Вы правы. Ну если даже файл img.php переименовать в img.jpg, залить его на сервер и с графическим расширением его разве можно как-то исполнить? | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 18:27)
| | Напрямую нельзя, имея "помощника", можно. И вообще - вам мусор на сайте нужен?
PS. А вот по поводу применения функции copy() при загрузке, смотрим здесь http://softtime.ru/forum/read.php?id_forum=1&id_theme=57057&page=2 | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 18:10)
| | А еще лучше, после закачки перепроверить с помощью mime_content_type | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 18:10)
| | Верить тому, что после точки - нельзя!
Доверять типу МIМЕ-файла, согласно информации клиента - ненадежно...
Как проверить расширение? | |
|
|
|
|
|
|
|
для: mehelson
(24.08.2008 в 18:36)
| | Да, именно!
to Sim, конечно мусор ненужен. просто нужно убедиться что пользователь закачивает графический файл, а не текстовый | |
|
|
|
|
|
|
|
для: mehelson
(24.08.2008 в 18:36)
| | Для изображений getimagesize() или exif_imagetype(), которая работает быстрее первой. | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 18:49)
| | С изображениями замечательно!
A как быть с архивами, например?
Как-то здесь, на форуме, проскакивала мысль: считать содержимое файла и проверить наличие определенного набора символов в начале, jрg - JFIF, ziр - РК
:) | |
|
|
|
|
|
|
|
для: mehelson
(24.08.2008 в 19:08)
| | Да, и не только мысль, но и, вроде бы, пример разбирался. | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 20:22)
| | Так насколько я помню к консенсусу не пришли!?
Не напомните страницу обсуждения? | |
|
|
|
|
|
|
|
для: mehelson
(24.08.2008 в 20:53)
| | Консенсус - это призрачность общей точки зрения, при твердой уверенности в правоте собственной :) Нет, не помню. | |
|
|
|
|
|
|
|
для: sim5
(24.08.2008 в 21:33)
| | Красиво :)
а Ваше мнение, имеет ли право на существование file_get_cоntеnts('filenаmе', FАLSЕ, NULL, 0, 20); | |
|
|
|
|
|
|
|
для: mehelson
(24.08.2008 в 22:06)
| | И что же Вам это даст? | |
|
|
|
|
|
|
|
для: ddhvvn
(24.08.2008 в 23:03)
| | Считать несколько первых байт файла и искать наличие символов, соответствующих одному из заранее заготовленного списка "маркеров" что ли (не знаю как это можно назвать)...
Не я это придумал, мой пост чуть выше (в память врезалось)...
И в общем-то это я спрашиваю :) - а даст это мне что-нибудь? | |
|
|
|
|
|
|
|
для: mehelson
(25.08.2008 в 02:50)
| | Все типы файлов, которые имеют идентификатор типа в заголовке, можно определить таким способом. | |
|
|
|
|
|
|
|
для: ols
(24.08.2008 в 17:15)
| | Всем здрасте! Перечитал пару раз ветку, но вопрос остался: A как же всё таки быть с архивами, например? Дебаты - это хорошо, но может кто знает готовое и безопасноене решение? | |
|
|
|