
Очень часто разработчикам приходится сталкиваться с задачей, загрузки изображений на сервер. И под рукой должный быть, всегда, надежные инструменты.
Хочу представить один из таких классов.
Очень удобный и быстрый класс для безопасной загрузки изображения на сервер.
файл класса: gallery.class.php
- <?php
- Class Gallery {
- // Путь для хранения
- var $imgDir = './img/';
- var $thumbDir = './img/thumb/';
- // Размер маленьких изображений
- var $imgWidth = 130;
- var $imgHeight = 120;
- //Размер большого изображения
- var $imgWidthB = 320;
- var $imgHeightB = 300;
- var $imgName = '';
- var $msg = array();
- // Разрешенные форматы изображений
- var $exts = array(1 => 'gif',
- 2 => 'jpg',
- 3 => 'png');
- var $extList = array('image/gif', 'image/jpeg', 'image/png');
- function __construct() {
- if(!($this->imgDir) || !($this->tmpDir)) {
- $msg[] = 'Указаной директории не существует!';
- }
- }
- // Проверка изображения
- private function checkImg($img) {
- if(!($img['tmp_name'])) die('3');
- $data = ($img['tmp_name']);
- $filesize = ($img['tmp_name']);
- $format = ('.',$img['name']);
- if(!($format[($format)-1], $this->exts)) die('4');
- if($filesize == 0) die('6');
- if($data[ 0] != $this->imgWidthB || $data[1] != $this->imgHeightB) die('5');
- if(!isset($this->exts[$data[2]])) die('8');
- if(!($img['type'], $this->extList) || !($data['mime'], $this->extList)) die('7');
- $result = array('width' => $data[ 0],
- 'height' => $data[1],
- 'extension' => $this->exts[$data[2]],
- 'size' => $filesize);
- return $result;
- }
- public function loadImg($img) {
- $data = $this->checkImg($img);
- if(!($data)) die('1');
- $this->imgName = $this->imgNewName($data['extension']);
- if(!($img['tmp_name'], $this->imgDir.$this->imgName)) die('2');
- $this->creatThumb($data['extension'], $this->imgName);
- return $this->imgName;
- }
- private function creatThumb($type, $name) {
- switch($type) {
- case 'gif':
- $src_img = ($this->imgDir.$name);
- break;
- case 'jpg':
- $src_img = ($this->imgDir.$name);
- break;
- case 'png':
- $src_img = ($this->imgDir.$name);
- break;
- }
- $old_w = ($src_img);
- $old_h = ($src_img);
- $ratio1 = $old_w/$this->imgWidth;
- $ratio2 = $old_h/$this->imgHeight;
- if($ratio1>$ratio2) {
- $thumb_w=$this->imgWidth;
- $thumb_h=$old_h/$ratio1;
- }
- else {
- $thumb_h=$this->imgHeight;
- $thumb_w=$old_w/$ratio2;
- }
- $im = imagecreatetruecolor($thumb_w, $thumb_h);
- imagecopyresampled($im,$src_img, 0, 0, 0, 0,$thumb_w,$thumb_h,$old_w,$old_h)
- ;
- switch($type) {
- case 'gif':
- ($im, $this->thumbDir.$name);
- break;
- case 'jpg':
- ($im, $this->thumbDir.$name);
- break;
- case 'png':
- ($im, $this->thumbDir.$name);
- break;
- }
- }
- // Метод для генерации названий
- private function imgNewName($type) {
- $imgName = (0000,9999).'_'.(00,99).'.'.$type;
- if(($this->imgDir.$imgName)) {
- $imgName = $this->imgNewName();
- }
- return $imgName;
- }
- }
- ?>
теперь применим класс в действии: index.php
- <?php
- require_once('./gallery.class.php');
- $img = new Gallery();
- if(isset($_FILES['file'])) {
- if($img->loadImg($_FILES['file'])) {
- echo 'ok';
- }
- else echo 'error';
- }
- ?>
- <form enctype="multipart/form-data" method="post" action="">
- <input type="file" name="file" />
- <input type="submit" name="Submit" value="Submit" />
- </form>
Буду рад, вашим отзывам…
Rus
25.02.2010 at 13:20
Привет, ошибки в основном вылезают под номерами: 2,5,4.
Это с чем связано?
fuzaylov
25.02.2010 at 14:47
Ошибка №1 – Переданные данные(изображение) не корректны!
Ошибка №2 – Ошибка записи изображения на сервер
Ошибка №3 – Ошибка записи изображения на сервер
Ошибка №4 – Формат изображения не соответствует прописным в параметрах
Ошибка №5 – Размер изображения не соответствует прописным в параметрах
Ошибка №6 – Файл не является изображением
Ошибка №7 – Файл не является изображением
Ошибка №8 – Формат изображения не соответствует прописным в параметрах
linex
25.02.2010 at 15:48
А как можно сделать удаленную загрузку фоток?
fuzaylov
25.02.2010 at 16:18
Можно попробовать с помощью