Ответить
1
Загрузка картинки
Отправлено: 15 Июн 2010#1
В этой теме я расскажу как загружать изображения на сервер и проводить необходимые проверки. Многие могут сказать, что нет ничего проще, но тут я могу поспорить, так как не раз видел, как даже опытные программисты, допускают ошибки. А ошибки эти довольно тривиальны - проверяем размер и расширение и, если все ОК, заливаем. Вроде, все класс, но подумайте что произойдет, если в дальнейшем, Вам надо выводить картинку в натуральную величину ( а так, за частую и происходит ) на страницах сайта. "Ну мы же проверили размер" - скажете Вы. Постойте, мы проверили вес картинки - память, которую она занимает, но мы не проверили ее размер. Ыч, вот вам и лажа. Я например могу сделать картинку, которая будет иметь гиганский размер в пикселях и при этом весить понты. Ну что же, раз сомнений в том, что загрузка картинки не такое уж и плевое дело, не осталось, погнали....
Приведу сразу код, да в нем наме.. птьфу ты.. комментарии...
Вы, наверное, заметили, что я копировал картинку во временное хранилище. Это делалось, потому, что узнать ее размер в пикселях, нельзя иначе. Может именно по этому многие не делают этой проверки
Ну вот, в принципе, и все. Думаю доработать этот скрипт Вам не составит труда. Например можно сделать автоматическое изменение размера и тогда Вам будет по барабану какую картинку Вам суют - она все равно уменьшиться до нужных размеров. А можно еще немного по гемороиться и сделать это уменьшение пропорциональным и тогда картинка при уменьшении не будет расплываться и коситься.
Приведу сразу код, да в нем наме.. птьфу ты.. комментарии...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?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('Неопределенная ошибка при обработке картинки.');
}
}
//копируем картинку в постоянную директорию
if (copy('tmp/' . $tmp_key . '.jpg', 'img/' . $_FILES['image']['name'] . '.jpg')) {
//не забываем поставить права
chmod('img/' . $_FILES['image']['name'] . '.jpg', 0644 );
}
//удаляем временную картинку
unlink('tmp/' . $tmp_key . '.jpg');?>
Вы, наверное, заметили, что я копировал картинку во временное хранилище. Это делалось, потому, что узнать ее размер в пикселях, нельзя иначе. Может именно по этому многие не делают этой проверки

Ну вот, в принципе, и все. Думаю доработать этот скрипт Вам не составит труда. Например можно сделать автоматическое изменение размера и тогда Вам будет по барабану какую картинку Вам суют - она все равно уменьшиться до нужных размеров. А можно еще немного по гемороиться и сделать это уменьшение пропорциональным и тогда картинка при уменьшении не будет расплываться и коситься.
Отредактировано автором 15 Июн 2010
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 9 Янв 2011#2
Дрюнь. А как вывести картинки? Ну в плане, я загрузил на сервер 5 картинок и мне нужно выводить их в галерее. Что надо сделать?
Отправлено: 10 Янв 2011#3
Ну вообще самый простой способ это тегом IMG
<img src="путь к картинке" />
<img src="путь к картинке" />
Я горжусь тем, что создал . И люблю нашу команду)
Отправлено: 11 Янв 2011#5
ну можно чисто пыхой вывести. Послать заголовок и затем просто выдать содержимое файла картинки.
Добавлено 2011.01.11 11-58
но тогда на экран нельзя будет выести больше ничего. Тоесть каждую картинку выводим так, но по отдельности. И остальной контент тоже отдельно.
1
2
<?php Header('Content-Type: image/jpeg');
echo file_get_contents('путь');?>
Добавлено 2011.01.11 11-58
но тогда на экран нельзя будет выести больше ничего. Тоесть каждую картинку выводим так, но по отдельности. И остальной контент тоже отдельно.
Я горжусь тем, что создал . И люблю нашу команду)
1
Зарегистрируйтесь или авторизуйтесь что бы писать
Сейчас online: 11. Зарегистрированных: 0. Гостей: 11.

