[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Класс загрузки файлов на сайт
m4a1fox
Господа, доброго времени суток, натолкните на мысль... Хочется написать класс самому(что бы понять) для загрузки файлов (картинок) на сайт, что бы пути к ним заносились в БД. Подскажите с чего начать???



Спустя 17 минут, 16 секунд (18.07.2011 - 14:38) bulgakov написал(а):
Бери бумажку и ручку и пиши подробно что ты хочеш делать с помощью этого класса, какие методы и свойства.



Спустя 3 минуты, 43 секунды bulgakov написал(а):
Например конструктор класса у тебя должен принимать путь к файлу который нужно загрузить и присваивать его свойству класса, потом какой-то метод класса проверяет файл и если это картинка загружает в какую-то директорию одновременно занося в базу путь этого файла.

Спустя 52 минуты, 26 секунд (18.07.2011 - 15:30) m4a1fox написал(а):
Так-с бумажку и ручку взял. Сейчас напишу.



Спустя 3 минуты, 2 секунды m4a1fox написал(а):
Ну в принципе, не много-то и пунктов. Всего 3
  • 1. Загрузка изображения в папку.
  • 2. Создание уменьшенной копии
  • 3. Добавление путей в таблицу

Пока что хватит и этого... Дальше будет виднее.



Спустя 16 минут, 16 секунд m4a1fox написал(а):
Даже не знаю с чего начать......

Спустя 20 минут, 28 секунд (18.07.2011 - 15:51) neadekvat написал(а):
Для начала закрыть форум. Правда. Хватит уже тут торчать - бери и делай. Хоть что-нибудь. Пусть потом этот класс разнесут в пух и прах - но он будет твой.

Спустя 8 минут, 24 секунды (18.07.2011 - 15:59) m4a1fox написал(а):
neadekvat
Убедительно!

Спустя 1 час, 51 минута, 23 секунды (18.07.2011 - 17:50) m4a1fox написал(а):
neadekvat и все все все... Как и общали, давайте в пух и прах. Итак.

class DownloadImage extends connect_Db {
static private $path = 'img/';

function MoveFile($file) {
if(is_uploaded_file($file["filename"]["tmp_name"]))
{
move_uploaded_file($file["filename"]["tmp_name"],
"".self::$path."/".$file["filename"]["name"]);
$true = 'Image is download sucsessful.<br />
<a href="'
.self::$path.'/'.$file["filename"]["name"].'">
<img src="'
.self::$path.'/'.$file["filename"]["name"].'" width="20px" height="20px"></a>';
} else {
$true = 'wrong';
}
return $true;
}
}


$upload = new DownloadImage;


Банальщина - это понятно. Простая загрузка без каких либо проверок. Собственно интересует вот что.
вот тут

$file["filename"]["tmp_name"]

Наверняка можно избавиться от ["filename"]["tmp_name"], заменив их неким образом. Не могу сообразить каким? Не подскажите?????

Спустя 2 часа, 2 минуты, 45 секунд (18.07.2011 - 19:53) neadekvat написал(а):
1. Про свое отношение к extends connect_Db я уже говорил. Резко отрицательное.

2.
static private $path = 'img/';

Зачем static?
Плюс советовал бы использовать protected, а не private, иначе свойства не будут доступны при наследовании, а ООП собственно ради наследования создавался.

3. Почему у метода не указан модификатор доступа? Если по умолчанию - public, это еще не значит, что можно опускать ключевое слово.

4. Подход неверный: обычная процедурка, обернутая в класс. Пусть класс лучше возвращает имя загруженного файла или false в случаи неудачи, а уже код, который использует класс - пусть как хочет с этим работает.

5. Возвращаемый адрес должен быть позиционирован абслютно, а не относительно.

6. В метод лучше передавать не массив _FILES, а только имя индекса в этом массиве, раз уж все равно класс завязан на нем:
function MoveFile($index)
{
echo $_FILES[$index]['name'];
}

7. При загрузке имя файла лучше менять на какой-нибудь рандомный набор цифр и букв, при этом не забыв убедиться, что такого файла не существует.

Спустя 29 минут, 33 секунды (18.07.2011 - 20:23) Haotarez написал(а):
Цитата
$true = 'Image is download sucsessful.<br />
<a href="'.self::$path.'/'.$file["filename"]["name"].'">
<img src="'.self::$path.'/'.$file["filename"]["name"].'" width="20px" height="20px"></a>';


Аж глаз дёргается когда я вижу в php классе html

Спустя 17 часов, 45 минут, 45 секунд (19.07.2011 - 14:09) m4a1fox написал(а):
neadekvat
Цитата
5. Возвращаемый адрес должен быть позиционирован абслютно, а не относительно.

не понятно как это....

Спустя 7 минут, 40 секунд (19.07.2011 - 14:16) alex12060 написал(а):
m4a1fox

Опять 1 метод в классе smile.gif
Смотри как надо - http://code.google.com/p/proquiz/source/br...d.class.php?r=4

Шучу smile.gif
Тут слишком много понтов.
Если ты не можешь логику собрать для себя, то поищи в гугле вот по такому запросу:

inurl:upload.class.php

Спустя 12 минут, 36 секунд (19.07.2011 - 14:29) m4a1fox написал(а):
alex12060
Не не не не.... ну не могу я сразу их все написать. Помаленьку надо!

Спустя 1 минута, 18 секунд (19.07.2011 - 14:30) m4a1fox написал(а):
alex12060
Цитата
Смотри как надо - http://code.google.com/p/proquiz/source/br...d.class.php?r=4

Круто однако! Слишком много кода.....)

Спустя 4 часа, 13 минут, 57 секунд (19.07.2011 - 18:44) neadekvat написал(а):
Цитата (m4a1fox @ 19.07.2011 - 15:09)
не понятно как это....

А все остальное было понятно?

Относительный путь: src="img/pic.png"
Абсолютный: src="/img/pic.png" - от корня сайта, src="http://example.com/pic.png" - с адресом сайта.

Спустя 53 секунды (19.07.2011 - 18:45) m4a1fox написал(а):
neadekvat
А! Черт! теперь понятно! Просто что то сначала даже и не подумал что вы об этом!

Спустя 1 минута, 16 секунд (19.07.2011 - 18:46) m4a1fox написал(а):
neadekvat
Цитата
А все остальное было понятно?

Впринципе - да! только от пункта №4 решил отказаться!

Цитата
4. Подход неверный: обычная процедурка, обернутая в класс. Пусть класс лучше возвращает имя загруженного файла или false в случаи неудачи, а уже код, который использует класс - пусть как хочет с этим работает.


Спустя 1 час, 19 минут, 17 секунд (19.07.2011 - 20:05) neadekvat написал(а):
Цитата (m4a1fox @ 19.07.2011 - 19:46)
только от пункта №4 решил отказаться!

Да бляха муха, что значит "решил октазаться"?! Это вообще по сути самое главное!
То, что ты делаешь - полный бред, это не ООП, это процедурка в классе. Класс, возвращающий html - это просто абзац.
Я уже не раз говорил - либо берись всерьез, либо не берись: не твое значит, раз сложно, непонятно, лень и прочее.

Спустя 13 часов, 1 минута, 59 секунд (20.07.2011 - 09:07) m4a1fox написал(а):
Тогда сам смысл в классе пропадает, если он будет возвращать только название файла, а работа с файлом будет в другой части... Не легче все совместить. Я не совсем понимаю. Смысл же классов, это общие методы для работы с неким объектом. В моем случае - объект - картинка, в классе в методах идет проверка на пустоту, на корректность форматов, на изменение имени и так далее, и затем в том же классе - метод добавления картинки в папку... А вы предлагаете метод именно с закачкой картинки вынести в файл с применением класса... Вот что мне не понятно!

Спустя 3 часа, 3 минуты, 56 секунд (20.07.2011 - 12:11) neadekvat написал(а):
m4a1fox, нет, я говорю, что класс (т.е. все входящие в него методы) не должны возвращать html-код.

Вместо
$true = 'Image is download sucsessful.<br />
<a href="'
.self::$path.'/'.$file["filename"]["name"].'">
<img src="'
.self::$path.'/'.$file["filename"]["name"].'" width="20px" height="20px"></a>';

return $true;

должно быть что-то такое:
$addr = $this->path .'/'. $file["filename"]["name"];
return $addr;

А уж код, который получит это, пусть хоть что с этим делает - хоть в базу, хоть на экран выводит, хоть тупо проигнорирует, уже не важно.

Спустя 15 минут, 11 секунд (20.07.2011 - 12:27) m4a1fox написал(а):
neadekvat
да так и думал! спасибо за направление!
Быстрый ответ:

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