В этой теме я расскажу как загружать изображения на сервер и проводить необходимые проверки. Многие могут сказать, что нет ничего проще, но тут я могу поспорить, так как не раз видел, как даже опытные программисты, допускают ошибки. А ошибки эти довольно тривиальны - проверяем размер и расширение и, если все ОК, заливаем. Вроде, все класс, но подумайте что произойдет, если в дальнейшем, Вам надо выводить картинку в натуральную величину ( а так, за частую и происходит ) на страницах сайта. "Ну мы же проверили размер" - скажете Вы. Постойте, мы проверили вес картинки - память, которую она занимает, но мы не проверили ее размер. Ыч, вот вам и лажа. Я например могу сделать картинку, которая будет иметь гиганский размер в пикселях и при этом весить понты. Ну что же, раз сомнений в том, что загрузка картинки не такое уж и плевое дело, не осталось, погнали....
Приведу сразу код, да в нем наме.. птьфу ты.. комментарии...
<?php //проверяем есть ли вообще файл в пост данных
if (!empty($_FILES['image']['name'])) {
//выковыриваем расширение файла
$ext = strrchr( $_FILES['image']['name'], "." );
//массив допустимых расширений
$extensions = array( ".jpg", ".gif", ".bmp", ".png" );
//если расширение файла не входит в список допустимых выдаем ошибку
if (!in_array($ext, $extensions)) {
die('недопустимый формат файла картинки');
}
//Размер файла не должен превышать 100000 байт. Вы можете установить любой размер
if ($_FILES['image']['size'] > 100000) {
die('размер файла аватора больше 100 Кб');
}
//генерируем случайный ключ, который будет именем нашего временного файла
$tmp_key = rand(0, 9999999);
//копируем полученный в посте файл во временную директорию
if (move_uploaded_file($_FILES['image']['tmp_name'], 'tmp/' . $tmp_key . '.jpg')) {
//устанавливаем права на файл для работы с ним
chmod('tmp/' . $tmp_key . '.jpg', 0644);
//получаем размеры файла в пикселях. собака для того чтобы юзер если что не так не увидел ошибки
@$sizes = getimagesize('tmp/' . $tmp_key . '.jpg');
if ($sizes) {
//если одна из сторон больше чем 100px выдаем ошибку. Вы можете установить любые размеры
if ($sizes[0] > 100 || $sizes[1] > 100) {
die('Размер картинки превышает 100х100 px.');
}
} else {
//если мы не смогли получить размер значит что то с картинкой не так - это тоже приравниваем к ошибке
die('Неопределенная ошибка при обработке картинки.');
}
} else {
//и если мы ее не смогли скопировать - то же
die('Неопределенная ошибка при обработке картинки.');
}
}
Вы, наверное, заметили, что я копировал картинку во временное хранилище. Это делалось, потому, что узнать ее размер в пикселях, нельзя иначе. Может именно по этому многие не делают этой проверки
Ну вот, в принципе, и все. Думаю доработать этот скрипт Вам не составит труда. Например можно сделать автоматическое изменение размера и тогда Вам будет по барабану какую картинку Вам суют - она все равно уменьшиться до нужных размеров. А можно еще немного по гемороиться и сделать это уменьшение пропорциональным и тогда картинка при уменьшении не будет расплываться и коситься.