[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс для работы с закачкой изобр. Гляньте...
m4a1fox
Итак. Как сказал могучий neadekvat.... Пусть разнесут в пух и прах, но это мой класс (ну не совсем :) ) Итак:

class DownloadImage {

public $abc = 'qwertyyuioasdfghjkl;zxcvbn';
static protected $path = 'img/';
public $ok = '<b>Image is download correct.</b>';
//public $ar = _1;

public function CheckIsUploadedFile() {
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
return true;
}
}


public function MoveImage($t) {
move_uploaded_file($_FILES["filename"]["tmp_name"], "".self::$path."".$t);
$true = $this->ok;
return $true;
}

public function ImageShow($t) {
$true = '<br /><a href="'.M4A1_HOST.self::$path.$t.'">
<img src="'
.M4A1_HOST.self::$path.$t.'" width="40px" height="40px"></a>';
return $true;
}

public function PathToFileShow($t) {
$true = '<br /><b>File path to image:</b> '.self::$path.$t;
return $true;
}

public function TypeOfImageShow() {
$true = '<br /><b>Type of Image:</b> '.$this->TypeOfImage();
return $true;
}

public function NameOfImageShow($t) {
$true = '<br /><b>Name of Image:</b> <font color="green">'.$t.'</font>';
return $true;
}

public function TypeOfImage(){
return pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);
}

public function CorFormatOfImage(){
$arr = array("image/png", "image/jpeg", "image/gif");
$type = $_FILES["filename"]["type"];
if(in_array($type, $arr)) {
return true;
}
}


public function MistakeTypeImage() {
if(!$this->CorFormatOfImage()){
return '<font color="red">Uncorrect type of image</font>';
}
}


public function MistakeEmptyFielsForm() {
if(!$this->CheckIsUploadedFile()) {
return '<font color="red">Empty form field</font>';
}
}


public function ScanDirForImage() {
$scan = scandir(self::$path);
for ($i=0; $i<count($scan); $i++) {
if($scan[$i] != '.' && $scan[$i] != '..') {
$true[] = $scan[$i];
}
}

return $true;
}

function troo() {
$str = substr(str_shuffle($this->abc), 0, 12).'.'.$this->TypeOfImage();
return $str;
}
}


$upload = new DownloadImage;

Применяю его вот так:

if(isset($_POST['download'])) {
$t = $upload->troo();
if($upload->CheckIsUploadedFile()){
if($upload->CorFormatOfImage()) {
echo $upload->MoveImage($t);
echo $upload->ImageShow($t);
echo $upload->NameOfImageShow($t);
echo $upload->PathToFileShow($t);
echo $upload->TypeOfImageShow();
}else {
echo $upload->MistakeTypeImage();
}
}
else {
echo $upload->MistakeEmptyFielsForm();
}

Замечания, предложения, гнобение (не хотелось бы) :) принимаются.... Спасибо кто не пожелев своего времени, посмотрит это....



Спустя 22 минуты, 59 секунд (20.07.2011 - 19:11) Winston написал(а):
Цитата (m4a1fox @ 20.07.2011 - 18:48)
class DownloadImage extends connect_Db

Интересно сколько раз neadekvat тебе уже говорил за эту строчку ? biggrin.gif

Спустя 3 минуты, 12 секунд (20.07.2011 - 19:14) mzcoding написал(а):
Вообще чем меньше html в классе тем лучше)
Инкапсуляцию соблюдать нужно, свойства тоже желательно скрывать если они из вне не вызываются .
Зачем ты наследуешь connect_Db(как понимаю соединение с БД)

Спустя 2 минуты, 19 секунд (20.07.2011 - 19:16) Winston написал(а):
И выяснить действительно ли юзер грузит картинку, а не скрипт с расширением jpg|png может только ф-я getimagesize (я так думаю).

Создай какой нибудь текстовый файл и дай ему расширение jpg
И эта проверка
public function CorFormatOfImage(){
$arr = array("image/png", "image/jpeg", "image/gif");
$type = $_FILES["filename"]["type"];
if(in_array($type, $arr)) {
return true;
}

Его спокойно пропустит, а вот getimagesize - хрен :)

Спустя 9 минут, 29 секунд (20.07.2011 - 19:26) m4a1fox написал(а):
PHPprogrammer
Цитата
а вот getimagesize - хрен smile.gif

Спасибо! Не знал!

И да, насчет
Цитата
class DownloadImage extends connect_Db

Это тут не к месту! Согласен! Просто расчитываю на дальшейшее развитей класса, и добавления путей в таьлицу в БД.

И согласен, neadekvat уже стопитьсот раз об этом наследовании говорил. Но я не представляю как от нее избавить, если так судить, то, тогда любой класс, кот. будет рабтать с БД, должен будет созд. своё отдельное подключение.

Спустя 3 минуты, 17 секунд (20.07.2011 - 19:29) inpost написал(а):
m4a1fox
А зачем наследовать класс, если можно обращаться к независимому статичному классу?

Спустя 2 минуты, 26 секунд (20.07.2011 - 19:31) Winston написал(а):
Цитата (inpost @ 20.07.2011 - 19:29)
А зачем наследовать класс, если можно обращаться к независимому статичному классу

Что neadekvat ему и объясняет в каждой теме smile.gif

Спустя 16 минут, 9 секунд (20.07.2011 - 19:48) m4a1fox написал(а):
:)
Цитата
Что neadekvat ему и объясняет в каждой теме

Это что то типа такого????

class connectDb() {
//тут пишется про соеденение сБД
}

class SomeClass() {
connectDb::method
}

Спустя 39 секунд (20.07.2011 - 19:48) Winston написал(а):
m4a1fox
Оно

Спустя 41 секунда (20.07.2011 - 19:49) inpost написал(а):
m4a1fox
Когда имя класса короткое, то у меня выглядит так: DB::_()->method

Спустя 2 минуты, 34 секунды (20.07.2011 - 19:52) m4a1fox написал(а):
Все! Теперь точно запомнил! а то и правда, neadekvat готов просто прибить!

Спустя 1 минута, 51 секунда (20.07.2011 - 19:53) m4a1fox написал(а):
Меня если честно смущает вот это.....
if(isset($_POST['download'])) {
$t = $upload->troo();
if($upload->CheckIsUploadedFile()){
if($upload->CorFormatOfImage()) {
echo $upload->MoveImage($t);
echo $upload->ImageShow($t);
echo $upload->NameOfImageShow($t);
echo $upload->PathToFileShow($t);
echo $upload->TypeOfImageShow();
}else {
echo $upload->MistakeTypeImage();
}
}
else {
echo $upload->MistakeEmptyFielsForm();
}


неужели в слассе это нельзя сделать????? просто если это сделать в классе, то тогда с именем файла магия какая-то твориться!

Спустя 20 минут, 52 секунды (20.07.2011 - 20:14) neadekvat написал(а):
http://phpforum.ru/index.php?showtopic=0&v...dpost&p=1284610
*открыл шампанское*

В остальном - блин, насоветуют же люди. И зачем столько методов? На каждый чих буквально.
На самом деле выделение метода определяется не тем, сколько в нем строк, а своей задачей.
Например, у меня в классе парсера был метод логирования всего в пару строк - но это потому что было экономнее и понятнее было вызывать $this->log(), чем писать постоянно эти две строки.
А у тебя код наоборот, стал запутаннее. Большую часть методов можно упразднить.

И, да, избавляйся нафиг от html в классах.

Спустя 31 минута, 42 секунды (20.07.2011 - 20:46) Winston написал(а):
m4a1fox
Если интересно, можешь покурить

Спустя 2 часа, 33 минуты, 5 секунд (20.07.2011 - 23:19) m4a1fox написал(а):
neadekvat
Цитата
*открыл шампанское*

Я старался smile.gif
Цитата

И, да, избавляйся нафиг от html в классах.

Считаете..... Жаль так красиво все было. Значит буду убирать.

Спустя 10 минут, 46 секунд (20.07.2011 - 23:30) alex12060 написал(а):
m4a1fox

Я б оптимизацией еще занялся.

А вообще, весь этот дикий ужас можно свернуть в пару методов.
|
\/

if(isset($_POST['download'])) {
$t = $upload->troo();
if($upload->CheckIsUploadedFile()){
if($upload->CorFormatOfImage()) {
echo $upload->MoveImage($t);
echo $upload->ImageShow($t);
echo $upload->NameOfImageShow($t);
echo $upload->PathToFileShow($t);
echo $upload->TypeOfImageShow();
}else {
echo $upload->MistakeTypeImage();
}
}
else {
echo $upload->MistakeEmptyFielsForm();
}

Спустя 19 минут, 5 секунд (20.07.2011 - 23:49) neadekvat написал(а):
Цитата (m4a1fox @ 21.07.2011 - 00:19)
Считаете..... Жаль так красиво все было. Значит буду убирать.

http://phpforum.su/index.php?showtopic=0&v...dpost&p=1283597
Т.е. только "думал", но к сведению не принял. Печально.

Спустя 36 минут, 51 секунда (21.07.2011 - 00:26) m4a1fox написал(а):
Так вроде пути относительны. А насчет кода, убираю его... Так что это еше не конец.
alex12060
Цитата

А вообще, весь этот дикий ужас можно свернуть в пару методов.

Да, можно. Но мне хотелось как можно детальнее все сделать.

Спустя 9 часов, 36 минут, 27 секунд (21.07.2011 - 10:02) m4a1fox написал(а):
PHPprogrammer
Цитата
только ф-я getimagesize

А можно поподробнее.....

Спустя 2 часа, 7 минут, 52 секунды (21.07.2011 - 12:10) m4a1fox написал(а):
Итак, продолжаем! Вот собственно поправил.... Как теперь Вам?

class DownloadImage {

public $abc = 'abcdefghijklmnopqrstuvwxyzABSCDEFGHIJKLMNOPQRSTUVWXYZ';
public $path = 'file/';
public $ok = '<b>Image is download correct.</b>';

public function CheckIsUploadedFile() {
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
return true;
}
}


public function MoveImage($t) {
move_uploaded_file($_FILES["filename"]["tmp_name"], "".$this->path."".$t);
$true = $this->ok;
return $true;
}

public function ImageShow($t) {
return M4A1_HOST.$this->path.$t;
}

public function TypeOfImage(){
return pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);
}

public function NameFile() {
return $this->ChangeNameOfImage(strtolower($_FILES["filename"]["name"]));
}


public function CorFormatOfImage(){
$arr = array("image/png", "image/jpeg", "image/gif");
$type = $_FILES["filename"]["type"];
if(in_array($type, $arr)) {
return true;
}
}


public function ScanDirForImage() {
$scan = scandir($this->path);
for ($i=0; $i<count($scan); $i++) {
if($scan[$i] != '.' && $scan[$i] != '..') {
$true[] = $scan[$i];
}
}

return $true;
}

function RandomNameToImage() {
$str = substr(str_shuffle($this->abc), 0, 12).'.'.$this->TypeOfImage();
//$str = $this->NameFile();
return $str;
}

public function DeleteFile($file) {
unlink($this->path.$file);
return true;
}
}


$upload = new DownloadImage;
?>

Спустя 6 часов, 20 минут, 32 секунды (21.07.2011 - 18:31) inpost написал(а):
Тебе же уже ответили по поводу getimagesize smile.gif

Спустя 5 минут, 11 секунд (21.07.2011 - 18:36) m4a1fox написал(а):
inpost
Да, ответили! Вот только не знаю как его использовать..... Пробую!



Спустя 33 минуты, 11 секунд m4a1fox написал(а):
Есть один ступор! Функция getimagesize проверяет картинку кот. уже закачена. Не получается у меня задать ей параметр проверки файлаб еще не загруженного, может надо использовать так

getimagesize($_FILES["filename"]["tmp_name"])
???



Спустя 3 минуты, 10 секунд m4a1fox написал(а):
Нет! Так тоже не получается!



Спустя 50 минут, 22 секунды m4a1fox написал(а):
Прошу помощи, так как уже теряюсь

$image_info = getimagesize($upload->path.$t);
echo $image_info['mime'];

Говорит что файла нет, хотя он в папке присутствует!

Конкретнее, вот такая ошибка

Warning: getimagesize(file/MxkNjAyOwYdB.JPG) [function.getimagesize]:
failed to open stream: No such file or directory in
Y:\home\localhost\www\oop\modules\download\show.php on line 10

Хотя файл, стопитьсот процентов наместе! Что не так?
А не так то - что я проверяю еще не закаченный файл!

Спустя 56 минут, 6 секунд (21.07.2011 - 19:32) Winston написал(а):
m4a1fox
На, короче посмотри мой код, проверки файла, я повыдирал из разных файлов наиболее важные моменты

Свернутый текст

$image = isset($_FILES['image']) ? $_FILES['image'] : NULL; // Изображение которое загружается на главной
$allowType = Array('image/jpeg', 'image/jpg', 'image/png', 'image/gif'); // Типы изображений доступны для загрузки
class validate
{
private $maxFSize; // MAX размер файла
private $allowType = Array(); // Разрешенные типы
private $file = Array(); // Загруженый файл

function __construct($allowType, $file)
{
$this -> maxFSize = defined('IMAGE_MAX_FILE_SIZE') ? IMAGE_MAX_FILE_SIZE : 2 * (1024 * 1024);
$this -> allowType = $allowType;
$this -> file = $file;
}

/**
* Запускаем проверку
*/

public function run($file = NULL)
{
$this -> file = $file == NULL ? $this -> file : $file; // Если аргумент пуст, берем файл из свойства, иначе из переданного аргумента

$typeImage = explode('/', $this -> file['type']); // Получаем image из типа файла. Например image/png

if(empty($this -> file['tmp_name'])) // Если файл не передан
$this -> setError('Вы должны выбрать файл !');

elseif($this -> file['size'] > $this -> maxFSize) // Проверяем размер файла
$this -> setError('Размер файла не должен превыать: ' . round(($this -> maxFSize / 1024) / 1024) . ' Мб'); // Округляем размер до Мб

elseif($typeImage[0] == 'image') // Если в type image
{
if(!@getimagesize($this -> file['tmp_name']) || !in_array($this -> file['type'], $this -> allowType)) // Проверяем, изображение ли это, и если Да то проверяем, разрешено ли оно в массиве разрешенных типов
$this -> setError('Не похоже на изображение !');
}

elseif(!in_array($this -> file['type'], $this -> allowType)) // Если тип файла не разрешен, выдаем ошибку
$this -> setError('Недопустимый тип файла !');

return true;
}
}

$validate = new validate($allowType, $image); // Передаем доступные типы и изображение
//Ну и проверка в конце

if($add)
{
if($validate -> run())
{
.........
}
else
die('На сервере возникли ошибки !');
}

Свернутый текст
Ай-я-яй... я краснею от стыда, user posted image.
И меня в придачу разнесите в пух и прах за мой гов..о-ооп




Спустя 2 минуты, 54 секунды PHPprogrammer написал(а):
Цитата (m4a1fox @ 21.07.2011 - 18:36)
$image_info = getimagesize($upload->path.$t);

Вместо этого, надо так писать
$image_info = getimagesize($this -> file['tmp_name'])

Спустя 4 минуты, 55 секунд (21.07.2011 - 19:37) m4a1fox написал(а):
PHPprogrammer
Сейчас разбираюсь! Спасибо! Буду изучать!



Спустя 16 минут, 17 секунд m4a1fox написал(а):
Все! Вроде разобрался! Спасибо что помогли! Конечно грубовато получилось, но... получилось!

Спустя 21 минута, 24 секунды (21.07.2011 - 19:58) Winston написал(а):
Цитата (m4a1fox @ 21.07.2011 - 19:53)
Конечно грубовато получилось, но... получилось

Главное не тормози... сникерсни © biggrin.gif

Спустя 13 часов, 35 минут, 24 секунды (22.07.2011 - 09:34) m4a1fox написал(а):
Может конечно и троллингом занимаюсь, но все же.... Вот класс
Добавил метод про уменьшение картинки. Честно - скопирован со стороннего сайта

class DownloadImage extends showLogin {

public $abc = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
public $path = 'file/';
public $ok = '<b>Image is download correct.</b>';
public $allowType = array('image/jpeg', 'image/jpg', 'image/png', 'image/gif');
public $onlyType = array('jpeg', 'jpg', 'png', 'gif');

public function CheckIsUploadedFile() {
if(is_uploaded_file($_FILES["filename"]["tmp_name"])) {
return true;
}
}


public function MoveImage($t) {
move_uploaded_file($_FILES["filename"]["tmp_name"], "".$this->path."".$t);
$true = $this->ok;
return $true;
}

public function ImageShow($t) {
$true = M4A1_HOST.$this->path.$t;
return $true;
}

public function TypeOfImage(){
return pathinfo($_FILES['filename']['name'], PATHINFO_EXTENSION);
}

public function ChangeNameOfImage($str) {
$str = str_replace(" ", "_", $str);
$str = str_replace("-", "_", $str);
return $str;
}

public function NameFile() {
$name_s = $this->ChangeNameOfImage(strtolower($_FILES["filename"]["name"]));
return $name_s;
}


public function CorFormatOfImage(){
$arr = array("image/png", "image/jpeg", "image/gif");
$type = $_FILES["filename"]["type"];
if(in_array($type, $arr)) {
return true;
}
}


public function GetImageSize() {
if(!empty($_FILES["filename"]["name"])){
$type = getimagesize($_FILES['filename']['tmp_name']);
if(in_array($type['mime'], $this->allowType)){
return true;
}
}

else
return
false;
}

public function ScanDirForImage() {
$scan = scandir($this->path);
for ($i=0; $i<count($scan); $i++) {
if($scan[$i] != '.' && $scan[$i] != '..') {
$true[] = $scan[$i];
}
}

return $true;
}

function RandomNameToImage() {
$str = substr(str_shuffle($this->abc), 0, 12).'.'.$this->TypeOfImage();
return $str;
}

public function DeleteFile($file) {
$true = $this->onlyType;
for($i=0; $i<count($true); $i++){
unlink($this->path.$file.'.'.$true[$i]);
}

return true;
}

////////////////////////////////////////////////////////////////////////
public function ResizeImage($filename, $w, $h)
{
// Имя файла с масштабируемым изображением
$filename = $filename;
// определим коэффициент сжатия изображения, которое будем генерить
$ratio = $w/$h;
// получим размеры исходного изображения
$size_img = getimagesize($filename);
// Если размеры меньше, то масштабирования не нужно
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
// получим коэффициент сжатия исходного изображения
$src_ratio=$size_img[0]/$size_img[1];

// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
// пропорции исходного изображения

if ($ratio<$src_ratio)
{
$h = $w/$src_ratio;
}
else
{
$w = $h*$src_ratio;
}
// создадим пустое изображение по заданным размерам
$dest_img = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($dest_img, 255, 255, 255);
if ($size_img[2]==2) $src_img = imagecreatefromjpeg($filename);
else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);
else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename);

// масштабируем изображение функцией imagecopyresampled()
// $dest_img - уменьшенная копия
// $src_img - исходной изображение
// $w - ширина уменьшенной копии
// $h - высота уменьшенной копии
// $size_img[0] - ширина исходного изображения
// $size_img[1] - высота исходного изображения

imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
// сохраняем уменьшенную копию в файл
if ($size_img[2]==2) imagejpeg($dest_img, $filename);
else if ($size_img[2]==1) imagegif($dest_img, $filename);
else if ($size_img[2]==3) imagepng($dest_img, $filename);
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
}

$upload = new DownloadImage;

Спустя 11 часов, 22 минуты, 14 секунд (22.07.2011 - 20:56) Winston написал(а):
Цитата (m4a1fox @ 22.07.2011 - 09:34)
скопирован со стороннего сайта

Копипаст не хорошо.
Ты случайно этот класс не для соцсети пишешь ?

Спустя 1 день, 11 часов, 30 минут, 31 секунда (24.07.2011 - 08:26) m4a1fox написал(а):
PHPprogrammer
Пишу его для интереса! Для соц сети - это топорно будет.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.