powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Делать все методы статическими или класс абстрактным?
25 сообщений из 104, страница 2 из 5
Делать все методы статическими или класс абстрактным?
    #38048209
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

вам же сказали в классах не должно быть get/post

Код: php
1.
2.
    public function init()
        switch (данные get/пост) {



замените на

Код: php
1.
2.
    public function init($param)
        switch ($param) {


хотя на самом деле мы прикапываемся к мелочам, в больших проектах или в серьезных фирмах за это бы уши оторвали. и не могли бы вы больше слушать свою любимую музыку.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048344
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок. Заменил. К каким еще мелочам можно прикопаться? Как бы такую штуку построил крутой кодер? А суть штуки в том, чтобы облегчить разработчикам работу с картинками (аватарки, форумы, комментарии, посты в блогах и проч.), открытый же проект делаю, елки-палки :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048412
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Ок. Заменил. К каким еще мелочам можно прикопаться? Как бы такую штуку построил крутой кодер? А суть штуки в том, чтобы облегчить разработчикам работу с картинками (аватарки, форумы, комментарии, посты в блогах и проч.), открытый же проект делаю, елки-палки :)

для меня идеальный подключаемый модуль - это такой класс, который одной строкой инклудится, одной строкой создаётся интерфейс(экземпляр класса для работы), одной строкой оглавляется скрипт в клиентской части, одной строкой скрипта (а то и вообще по селектору css) все выбранные элементы подменяются на нужные мне. К этому всему прилагается файл css для придания нужного внешнего вида.

Всё остальное (размер аватар, размер сохраняемых картинок, исходящий формат, библиотека обработки и т.д.) в конфигах. любой параметр может быть изменён установкой соотвествующего параметра класса.

В данном случае, класс должен просто предусматривать флаги convert, resize, avatar. А функция обработки одна (например make() или process(), понятно дело подгружающая 3 приватных метода). Тогда ресурс вообще хранить не прийдётся. Инициализировал, задал параметры, обработал, удалил.

И Вам легче, и программеру, который юзать бибилиотеку будет.

Я не крутой кодер, но моё видение задачи именно такое :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048457
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Ах да... забыл... ещё он не должен менять обычного поведения скриптов. То есть, не хорошо делать например move_uploaded_file, так как после Вашей обработки картинок, может последовать следующая (уже не Ваша), а это приведёт к ошибке (так как в _FILES будет записано, что такой файл был загружен, а физически он уже не там).
Нельзя жёстко привязывать, что клиентский скрипт должен обязательно отправить данные именно в Ваш серверный скрипт. Просто часто надо до сохранения файлов провести какие-нить валидации и типа того (например когда аватарку может только зареганый пользователь создавать), иначе сервак любой желающий загадить сможет.
Можно было бы выделить отдельный файл для валидации, но если модуль встраивается в Yii например, начнутся проблемы с его подгрузкой.

Но это опять же не критично... а просто хорошо бы.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048510
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр,

Идеальным являеться модуль который как черный ящик. Ему что то передал (чуствуете разницу с "он что то взял") и получил от него что то другое обработаное. И при этом ни мы не можем никак влезть в его внутрености (кроме конфигурации), и ни он не может покинуть свою черную коробку.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048532
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РенатПрограмёр,

Идеальным являеться модуль который как черный ящик. Ему что то передал (чуствуете разницу с "он что то взял") и получил от него что то другое обработаное. И при этом ни мы не можем никак влезть в его внутрености (кроме конфигурации), и ни он не может покинуть свою черную коробку.

В данном случае чёрного ящика не представляю, по выше описанным причинам (например предпроверка картинок). Если бы модуль был только серверный, а сейчас он клиент-сервер. это уже сложнее :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048546
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет «размер аватар, размер сохраняемых картинок, исходящий формат, библиотека обработки и т.д. в конфигах» А если библиотека используется несколько раз с разными целями? Например, для создания аватарок, потом для обработки фоток в комментах, получается конфиги нужно переписывать?

Второе сообщение, вообще, темный лес для меня. Как сделать без move_uploaded_file?

Как тогда лучше настроить отправку из клиентского скрипта? Сейчас возможны такие случаи взаимодействия:
- передача картинки для обработки
- передача картинки вместе с данными (в случае если картинки не загружаются сразу на сервер, а ждут отправки вместе с формой)
- передача данных для обновления
- передача порядка расположения картинок
- передача команды на удаление
- запрос на получение списка картинок

Сейчас все отсылается одному скрипту с управляющими параметрами в GET. Имя скрипта нужно сделать в конфиге js, абсолютно согласен. А как быть с управляющими параметрами? Просто описать их в примечании, чтобы разработчик мог настроить свой скрипт? Лучше GET или POST их передавать?

P.S. Хотелось бы взглянуть на скрипты, приближенные к идеальным (особенно php), а то как-то плаваю сейчас
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048614
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрВ данном случае чёрного ящика не представляю, по выше описанным причинам (например предпроверка картинок). Если бы модуль был только серверный, а сейчас он клиент-сервер. это уже сложнее :)

чето то я текст полностью не читал, о предпроверки где то видимо упустил =)
может я конечно не то понял, но черный ящик может все сам проверить и плюнуть exception в случае чего. Аргуент у него - имя темп файла (черному ящику то какая разница, тем файл с картинкой или нет? едиснвтено его надо проверить до черного ящика реально ли он загружен)

Shitbox2,

откройте для себя фреймворки и mvc.
Современые фреймворки: Yii, Zend, Symfony etc делают занимаются роутингом автоматически. Единствено вам при отправке надо будет поменять адрес: http:.....ru/avatar/upload к примеру что запустит автоматически uploadAction у класса AvatarController.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048640
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Насчет «размер аватар, размер сохраняемых картинок, исходящий формат, библиотека обработки и т.д. в конфигах» А если библиотека используется несколько раз с разными целями? Например, для создания аватарок, потом для обработки фоток в комментах, получается конфиги нужно переписывать?

Второе сообщение, вообще, темный лес для меня. Как сделать без move_uploaded_file?

Как тогда лучше настроить отправку из клиентского скрипта? Сейчас возможны такие случаи взаимодействия:
- передача картинки для обработки
- передача картинки вместе с данными (в случае если картинки не загружаются сразу на сервер, а ждут отправки вместе с формой)
- передача данных для обновления
- передача порядка расположения картинок
- передача команды на удаление
- запрос на получение списка картинок

Сейчас все отсылается одному скрипту с управляющими параметрами в GET. Имя скрипта нужно сделать в конфиге js, абсолютно согласен. А как быть с управляющими параметрами? Просто описать их в примечании, чтобы разработчик мог настроить свой скрипт? Лучше GET или POST их передавать?

P.S. Хотелось бы взглянуть на скрипты, приближенные к идеальным (особенно php), а то как-то плаваю сейчас

1. Поэтому и говорю, должна быть возможность менять поведение модуля заданием нужных атрибутов экземпляру класса... + в таком случае можно как-то покрутому соорудить загрузку конфигов (хотя не знаю. 10 конфигов - это как-то не круто). Ещё при этом (при возможности менять поведение) хорошо бы пакетную обработку сделать (или метод, который позволил бы эту картинку выгрузить и следующую картинку загрузить в этот же экземпляр для обработки).
2. Можно использовать например какую-нить copy.
3. Всё лучше отправлять одним методом (или пост или гет). В данном случае наверное POST (ведь файлы отправляются).
4. По поводу идеальных скриптов, даже не знаю что сказать... Под рукой таких нету :) Хотя в принципе любая модульная хорошая система так работает (только более глобально). Например тот же fckeditor (только js часть): строка инклуда, файл настройки, файл внешнего вида (в каких-то версиях в одном с настройкой), строка для замены textarea на продвинутые. в нём встраиваемый модуль ckfinder который грузит файлы на сервер. У него в конфигах по-моему предусматривается проверка переменных (своего рода валидация на серваке и всё такое).
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048688
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меняю входные данные на $param

Всего скрипт может получать 3 типа данных
$_GET['type'] (получает всегда)
$_GET['id']
$_POST['sort']

Как понимаю, в качестве $param лучше передавать что-то одно, например, POST, тогда все управляющие запросы так же нужно в POST запихнуть. Получится
Код: php
1.
2.
3.
4.
5.
$album = new Album;
$album->init($_POST);

public function init($param)
        switch ($param['type']) {


Логика верна?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048689
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ренатможет я конечно не то понял, но черный ящик может все сам проверить и плюнуть exception в случае чего. Аргуент у него - имя темп файла (черному ящику то какая разница, тем файл с картинкой или нет? едиснвтено его надо проверить до черного ящика реально ли он загружен)


я не зареганый хакер (сидящий с динамического ip), который хочет убить сервак (занять например все ресурсы). Я знаю, что предпросмотр картинки невозможен без загрузки на сервак. нахожу, куда отправляется файл, винчу свою форму, в которую вкладываю файл. Отправляю его этому скрипту. Тогда скрипт проверив, что данный файл пришёл, сохраняет его в директорию для предпросмотра. человечек отрубается от сети, подрубается назад, и повторяет операцию. Что произойдёт на серваке через 30 минут - час? Правильно, никто уже не сможет отправить картинку со своим комментом например, так как места не будет уже.

Сайт конечно не убит, но работает с глюками.
так что такой простой проверки явно недостаточно. :) Ещё и хорошо бы картинку на серваке по определённому принципу именовать (это тоже должен быть атрибут класса). Тогда можно избежать засорения папки аватарками одного юзера, если при отправке дать программеру на серваке задать определённый шаблон имени (например id-юзера_avatar).

Так что нет... явно чёрный ящик тут не прокатит :) Он должен быть чёрным, но "с дырочками, ручками для переноски" и всё такое :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048716
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На счет фреймворков, Yii, Zend, Symfony... Я же не знаю, чем пользуется тот человек, кто использует этот плагин или библиотерку или как его еще назвать. Чем бы он не пользовался ему должно быть максимально удобно взять и прикрутить ее хоть к чистому ПХП, хоть к Зенду. К сожалению, С ПХП не очень понимаю, как сделать универсальные вещи. С JS проще. написал плагин к JQ и ОК.

На счет хакера. Думаю, это забота движка, отслеживать, чтобы картинки могли только зарегистрированные пользователи загружать. Это в примере только все для всех. Т.е. для незареганного просто не подключится класс. Опять же, клиентский скрипт должен отслеживать это и выполнять колбек функцию исходя от типа ошибки сервера. Ух... Сколько работы-то
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048721
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Меняю входные данные на $param

Всего скрипт может получать 3 типа данных
$_GET['type'] (получает всегда)
$_GET['id']
$_POST['sort']

Как понимаю, в качестве $param лучше передавать что-то одно, например, POST, тогда все управляющие запросы так же нужно в POST запихнуть. Получится
Код: php
1.
2.
3.
4.
5.
$album = new Album;
$album->init($_POST);

public function init($param)
        switch ($param['type']) {


Логика верна?

да. :)
кстати в таком модуле хотелось бы видеть возможность обработки ещё и серверных картинок (скажем, когда я ранее 10 картинок загрузил на сервак, а теперь из одной хочу аватар сделать). мне такая функция кажется востребованной... :) просто как предложение.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048725
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Кстати, файлы отправляются ни GET и не POST, а в FILES. Поди разбери что это :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048746
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2На счет хакера. Думаю, это забота движка, отслеживать, чтобы картинки могли только зарегистрированные пользователи загружать. Это в примере только все для всех. Т.е. для незареганного просто не подключится класс. Опять же, клиентский скрипт должен отслеживать это и выполнять колбек функцию исходя от типа ошибки сервера. Ух... Сколько работы-то
вот-вот... Это ответ Ренату, к тому, что надо отправлять не сразу в скрипт своего модуля, а в скрипт, который программер выберет (может он какой-нить контроллер фрэймворка туда укажет)... Тогда забота проверок падёт на него. Ты просто кода ошибок ему напиши(константы/переменные статические вбей например) пускай орудует и скрипту возвращает. Это вообщем на твоё усмотрение (вариантов уйма) )))
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048761
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так есть же такая функция. Специально сделал графическую библиотеку:
Код: php
1.
2.
3.
4.
include_once('lib/gd.php'); //или lib/magickwand.php, если она есть на хостинге и работает лучше.
				
$preview_name = Image::makeavatar($this->upload_dir . $file_name, $this->previews_dir . $file_name, 164, 'png');
$file_name = Image::trueresize($this->upload_dir . $file_name, null, 1000, 1000, 'jpg', 75, true);



Здесь $this->upload_dir . $file_name имя вашего файла, $this->previews_dir . $file_name имя нового файла или false, если нужно перезаписать старый. Подсовывайте любой и обрабатывайте.

Вообще, сейчас примерно такая структура:
jquery.damnUploader.js — загрузка миниатюр и отправка на сервер
jquery.fancybox.js — просмотр картинок
jquery.autogrowtextarea.js — автомасштабирование текстовых полей
lib/графическая библиотека.php
Это конкретные черные ящики

main.js — управление загрузкой картинок
action.php — взаимодействие с js, БД и файловой системой
Это вещи, плохо поддающиеся упаковке в ящик, или до меня просто не дошло как сделать это. Не могу же предсказать как в БД буду хранится сведения о картинках. Может они в таблице пользователей будут, а может еще где. Поэтому приходится писать простой код, для быстрого понимания и переделки
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38048773
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

сорри, с обработкой серверных картинок ступил. :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049187
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос немного не по теме. Не могу тратить все время на проект, поэтому реально ли найти заказчиков, которые могли бы заплатить за то, чтобы сделал подобную штуку под их нужды, но большинство наработок по этой теми остались бы открытыми? Если такая практика распространена, где можно найти таких?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049545
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2,

Оставь авторское право за собой и делай с кодом что хочешь. Клиента будет волновать только оправданность его затрат и безопасность его продукта. Поэтому, если без дырок, то можно всё. Так что клиенту о своих планах сообщать не обязательно. Возьмись за любой сайт, в котором нужна галерея, аватары, выставь адекватную стоимость и сроки, и пиши наздоровье. Я так свой двиг полностью свинтил начав работу с сайта визитки.
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049570
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Найти бы сайт, где нужна галерея и аватары, а то, посмотришь раздел Работа, просят обычно какую-нибудь чухню. Интеграцию с какой-нибудь неизвестной бух. системой и т.п. :)
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049573
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Вот проект полностью: https://github.com/tamtakoe/photoalbum
См. action.php. Графические классы в папке lib
Соответственно, хотелось бы построить его так, чтобы можно было легко использовать в других проектах. Кстати, почему-то не получается обращаться к классу Album без создания экземпляра (Album::init())

Про sql и xss инъекции почитайте плис
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049609
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да-да, знаю. Ну, sql и xss остается полностью на совести разработчика. По идее все запросы к БД он должен обернуть функциями своего движка. Хотя, если напишите пару легких оберток, внесу их как образец
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38049642
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в классе Album есть метод savefile(). Его задача проверить соответствует ли полученный файл условиям и записать его на диск, т.е. метод достаточно универсальный. Условия он берет из параметров класса: allowed_type, max_file_size и других методов: number_of_files, files_size. Кажется, было бы правильнее передавать ему параметры там где он вызывается. Правда, тогда получится такая страшная конструкция:
savefile($this->allowed_type, $this->max_file_size, number_of_files, files_size)

Правильно мыслю?
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38051001
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще... Если возникнет ситуация, что в системе уже будет класс Album или Image, как решить эту проблему? Такой вариант покатит?

action.php
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
namespace album;

...

$album = new Album;
$album->init($_POST);

class Album {

    ...

    include_once('lib/gd.php'); //или lib/magickwand.php, если она есть на хостинге и работает лучше.
    $preview_name = \image\Image::makeavatar();

    ...
    
}


lib/dg.php и lib/magickwand.php
Код: php
1.
2.
3.
4.
5.
namespace image;

class Image {

}
...
Рейтинг: 0 / 0
Делать все методы статическими или класс абстрактным?
    #38051117
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по неймспейсу покатит.
Или можно "по старому", делать префиксы к имени класса к примеру: Kj_Albom, Kj_Image etc и все что начинаеться с Kj сразу будет понятно из какого модуля. Да и настроить автолоадер по префиксу не сложно.
...
Рейтинг: 0 / 0
25 сообщений из 104, страница 2 из 5
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Делать все методы статическими или класс абстрактным?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]