Эта тема на forum.dklab.ru


Юрий Насретдинов: Файловый менеджер PhpFM
Я помню, когда-то очень давно решил написать свой файловый менедежер, и я его написал. Он действительно быстро работал... Хоть у него был довольно удобный интерфейс, тем не менее мне всегда хотелось сделать что-то похожее на Проводник - с контекстным меню, кучей возможностей, и т.д.

Я тогда лишь знал, что такое в принципе можно сделать на JavaScript. Прошел примерно год (а может даже больше)... И я почему-то опять про него вспомнил. И решил написать все заново (лишь несколько полезных функций оставил, и все)... Написал. Демо-версия доступна по адресу http://phpfm.com.ru/demo/ - логин и пароль не трогайте. Можете также оценить development версию: http://dolphin.msk.su/dolphin-demo/

Основные концепции были: очень большая скорость работы, удобство интерфейса, обилие возможностей и небольшое количество HTML-кода, генерируемого файловым менеджером. Сейчас это примерно 600 Кб на 1000 файлов в папке (у PhpRemoteView 400 Кб), при этом по умолчанию используется Gzip-сжатие, которое сжимает объем кода ~ до 20-30 Кб (у PhpRemoteView 40-50 Кб).

Для сравнения (берется script execution time на 1000 файлов):

Invision Power File Manager (не так давно появился) - 7.5 сек (!) (при этом браузер еще фиг знает сколько это открывает)
PhpRemoteView - 1.3 сек (при этом браузер открывает это очень долго - сказывается использование функции document.write в javascript)
PhpFM 2.0 - 0.5 сек

Мне, честно говоря, будет очень интересно будет услышать мнение других участников форума относительно моего файлового менеджера (оценить внешний вид, "качество кода", скорость работы и т.п.). Любая критика приветсвуется !
Дмитрий Котеров:
По дизайну есть мысли.

1. Прогружайте все картинки через JS в начале страницы - а то некрасиво, когда они постепенно появляются.
2. После имени файла вставляйте   чтобы при щелчке на имени выделение синеньким было чуть подлиннее (см. Проводник).
3. Если б еще стрелки на клавиатуре работали и Enter...
4. В открывающиеся динамически окна можно написать при помощи JS слово «Загрузка...», а то не очень красиво, когда они с такой задержкой появляются, а контента там нет.
5. Насколько я понял, у Вас дизайн не резиновый. Если бы был резиновый...
6. А время генерации страницы точно не врет? (-;
Юрий Насретдинов:
все картинки через JS в начале страницы
В таком случае страница будет грузиться на порядок дольше... Хотя картинки там весят очень мало (максимум 5 Кб :)), они могут сильно повлиять на скорость загрузки страницы. А вот для контекстного меню - другое дело, там действительно не помешало бы что-нибудь подобное...
выделение синеньким было чуть подлиннее
Сделаем
Если б еще стрелки на клавиатуре работали и Enter
Мда... Ну Enter еще в принципе можно (надо опять же на JS, в котором я мало чего понимаю (на таком уровне), прописывать все эти события...)
можно написать при помощи JS слово «Загрузка...»
Если это писать просто в начале открываемой страницы - я думаю, это будет нормально, но все равно задержка будет ощутима. Хотя попробую...
Если бы был резиновый...
Это, честно говоря, гораздо труднее сделать - ведь для этого потребуется "рубить" картинки на несколько частей, потом долго и нудно гемороиться с width в процентном измерении (почему-то у IE есть такая привычка, если одной ячейке поставлена ширина 100%, она "потеснит", или по крайней мере постарается "потеснить" другие ячейки, в которых ширина стоит статичная, и я не знаю, как с ней бороться кроме как вставляя туда невидимые картинки с нулевой высотой...), потом довольно тяжело придется режиму "thumbnails" - как в данном случае определять, сколько ячеек можно "впихнуть" в таблицу... В общем, один гемморой :(.
А время генерации страницы точно не врет? (-;
Не-а ;). Хотя оно точно врет, конечно, показывает время без gzip-сжатия, не учитывает время вызова процесса Apache и т.д... Но тем не менее оно показывает довольно точные результаты.
Дмитрий Эсс:
они могут сильно повлиять на скорость загрузки страницы
Почему же? На многих сайтах есть предварительная загрузка изображений на javascript, на скорость это почти не влияет. Выполняются только пара строк кода, к примеру:

var image = new Image(150,20);
image.src = "someimg.gif";

Юрий Насретдинов:
только пара строк кода, к примеру
И только ? В таком случае, я думаю, можно попробовать...
Дмитрий Котеров:
В таком случае страница будет грузиться на порядок дольше...
Совсем не обязательно. Ведь в большинстве случаев картинки будут браться из кэша. И еще желательно на картинки проставлять Expires в далеком будущем, чтобы они не прогружались снова.
Дмитрий Эсс:
Почистил тему.
Юрий Насретдинов:
Будут какие-нибудь еще предложения, замечания ? Можете дать хотя бы примерную оценку моему файловому менеджеру (скажем, по нескольким критериям - удобство работы, скорость работы, оформление, возможности скрипта, дырявость (попробуйте взломать мой файловый менеджер), и т.п.) ? Мне интересно услышать мнение "со стороны" про свой файловый менеджер...
DmitriyPopov:
За что же Вы все мозиллу то так не любите? :)

А вообще - над ним еще, если по уму, работать и работать.

Если Вы делаете похожесть на винды, то надо его и эмулировать, например:
Урезать длинные заголовки в title броузера
При медленном двойном нажатии на файл предлагать его переименовать
etc...
А вообще - нормальный такой простенький менеджер. только внешний вид, ИМХО, несерьезен....
Юрий Насретдинов:
За что же Вы все мозиллу то так не любите? :)
Если "Вы" с большой буквы, то тогда "все" куда ? Если с маленькой, тогда другое дело...
Мозиллу я не люблю только потому, что она "бестолковая". Например я её не люблю за то, что она заменяет незагрузившиеся картинки на текст (что приводит иногда к ужасным последствиям), за то, что она использует совершенно иной стандарт JavaScript (во многом другой) - не могли чтоли использовать общую Java- и JavaScript-машину чтоли ? Хотя бы формат одинаковый сделали... А то работает в мозилле и в опере только двойной клик (не зря я его все-таки делал :)), а контекстное меню нужно переписывать заново. Потом, со свободным позиционированием вообще беда... То, что в IE выглядит именно так, как нужно, в Опере уезжает куда-то вверх, а Мозилле, правда, только чуть-чуть "не попадает". Ну и т.д... Для мозиллы там надо полкода HTML переписывать (дописывать)
Дмитрий Эсс:
yUAC:
Флейм по поводу броузеров пожалуйста в другой теме. Скажу только, что IE - это не стандарт, а точно такое же отклонение от него, как и Mozilla.
DmitriyPopov:
yUAC:
Я тоже скажу всего пару слов (постараюсь).

Так вот - сейчас я себе делаю новую домашнюю страницу (в т.ч. перевожу её на новый движок). Так вот решил я её поробовать сделать так, как рекомендуется стандартом w3c. Т.е. отсутствие таблиц для верстки, отделение содержания от оформления (span'ы и div'ы + css) и т.п. И естественно, полное соответствие html 4.0 (возможно потом перепишу под XHTML 1.0) и CSS 2.

И поверьте - 80% времени я тратил на то, что бы обеспечить совместимость с IE. Ибо мозилла на 90% сватывала стандарт абсолютно правильно. А уж про JavaScript я вообще молчу. Кстати, во многих случаях этого не получилось. И при выборе - нарушать стандарт, или отказываться от "фич", пришлось выбрать второе.


Мозилла обрабатывает и простой клик. И поверьте, не дальше от стнадарта чем IE. Попробуйте onclick="alert('MicroSoft must die')";. Вполне работает. А то, что Вы не смогли под мозиллой заставить выделить элемент (что там делается двумя строчками - на 100% по стандарту), то это не Mozill'ы проблемы.

Потому - на будующее - когда ругаете Mozillу (еще раз: мозилла - это не опера и не нетскейп. Это совсем другой продукт) говорите не так как Вы сказали (про стандарт), а хотя бы:
"Мозилла работает не так как я привык (а привык я к IE)".

И вот это уже вполне понятно и приемлемо. И на такое "мозиллисты" не обидятся, т.к. эта точка зрения (IE как никак гораздо популярнее) вполне логична и понятна.
Юрий Насретдинов:
только внешний вид, ИМХО, несерьезен....
А в чем его "несерьезность" ?
простенький менеджер
Простенький - это когда index.php весит 90 Кб ;) ?
Дмитрий Эсс:
Простенький - это когда index.php весит 90 Кб ?
Но это же не чистый php, там оформление (html, js) занимает большую часть кода.
Юрий Насретдинов:
большую часть кода
Я убрал весь HTML, осталось 40 Кб чистого кода php :).
DmitriyPopov:
А в чем его "несерьезность"
В любительскости :)

Простенький - это когда index.php весит 90 Кб
Простенький - это когда имеет простенький функционал.
Анжелика Моисеенкова:
Очень полезная штюкенция. Автор достоен уважения. Всё на редкость просто, красиво и удобно. Побольше бы таких... :)
Юрий Насретдинов:
А вообще - над ним еще, если по уму, работать и работать.
Это точно...

Profile!:
Спасибо за такую лестную оценку :). Еще бы узнать, нужен ли мой скрипт кому-нибудь :)
Анжелика Моисеенкова:
yUAC:
Лично я до этого пользовался PHPfm, но у Вашего (давай уже на "Ты" перейдём?) скрипта есть минус - все JScript-навороты, без которых просто не обойтись, в которых вся фишка скрипта, не ворчят в опере ?(.
Дмитрий Эсс:
java != javascript
Юрий Насретдинов:
Вот, спустя почти год после этого... Я решил все-таки попытаться реализовать все, что было написано в этой теме:

1) совместимость хотя бы с Mozilla
2) стрелочки, Enter, Delete, F2, Backspace работают точно также как в Проводнике
3) В title теперь только название директории (а не полный путь)
4) Отсуствие картинок в контекстном меню

Все получилось :). С Оперой совместимости добиться не то, чтобы не удалось, она просто почти весь JavaScript мой пропустила :).
Господа... участники форума... не могли бы Вы оценить новую реинкарнацию моего файлового менеджера, все по тому же адресу: http://www.doom-3.ru/phpfm21/

Исходники также можете посмотреть, аттачмент я обновил
Евгений Галашин:
«Вы не забыли сохранить файл?»:
1. Я его даже не изменял.
2. После этого сообщения появляется следующее, гораздо более понятное.

---

3. Может быть, стоит убрать вид а ля windows explorer? Ума не приложу, зачем делать «окошко к окошке». Может быть, рамку окна убрать?
4. И, может, кнопки слева в главном окне заменить на ссылки?
Юрий Насретдинов:
Спасибо за предложения, действительно, если документ не был изменен, то теперь он не спрашивает насчет того, сохранить ли изменения. Да и лишний confirm я тоже убрал :).

Насчет ссылок - тоже сделал, спасибо... Хотелось бы услышать все-таки мнение по поводу юзабилити моего файлового менеджера и кроссбраузерности :)
Евгений Галашин:
по поводу юзабилити
стоит убрать вид а ля windows explorer?
кроссбраузерности
Нууу... Под Мозиллой работает — уже что-то (-;
Юрий Насретдинов:
Евгений Галашин:
Нет, а вообще?
Евгений Галашин:
yUAC:
1. время генерирования скрипта -> Время генерации страницы? Или Вы научились с такой скоростью скрипты генерировать? (-;
а вообще?
Уберите элементы, которые должны делать что-то, но не днлают ничего — стрелочки свернуть панели слева, «комбобоксовость» строки адреса.
А так — боле-менее... Хотя, конечно, не gmail... (-;

Ну и это, табличная вёрстка == отстой... (-;

А, и главное, что меня в когда-то очень сильно бесило: не так работает навигация в броузере, т к передаются только относительные пути.
Юрий Насретдинов:
Хотелось бы еще раз обратить внимание публики на данное творение :). Как-то замяли тему... :).

Я сделал сайт по поводу своего файлового менеджера: http://phpfm.com.ru/ , и демо-версия теперь доступна и по адресу http://phpfm.com.ru/demo/ .

Что я добавил:

1) Выделение нескольких элементов (это довольно существенно...)
2) Полный отказ от свободного позиционирования в пользу таблиц (ну блин, когда на 10 пикселей не попадает иконка, это уже беспредел...)
3) Доработка FAQ
4) Добавление Javascript-преобразования - плавное появление контекстного меню (ИМХО приятнее стало :), правда работает оно только в IE)

ну и исправление мелких недочетов, и т.д. и т.п...

Хотелось бы все же услышать мнение по поводу новой версии файлового менеджера :)
Евгений Галашин:
2) Полный отказ от свободного позиционирования в пользу таблиц (ну блин, когда на 10 пикселей не попадает иконка, это уже беспредел...)
табличная вёрстка == отстой... (-;

передаются только относительные пути.
С этим надо смириться???
Юрий Насретдинов:
табличная вёрстка == отстой... (-;
Можно поподробнее, пожалуйста?

передаются только относительные пути.
Это не баг, а фича :). Это серьезно экономик трафик, и изначально именно так и задумывалось.
DmitriyPopov:
Можно поподробнее, пожалуйста?
Забей - это одна из новомодных "фич" - все верстать средствами дивов и CSS. Одно из равлечений - для тех, кому некуда девать своё время.
Евгений Галашин:
серьезно экономик трафик
Вы что, смеётесть??? На многотонные гифы у Вас есть трафик, а на десяток байт URL'a нет?
не баг, а фича
А, положим, я хочу работоть с двумя окнами: в одном иметь каталог шаблонов, в другом — каталог с классами? И что?
Одно из равлечений - для тех, кому некуда девать своё время.
Щутку оценил... (-;
Можно поподробнее, пожалуйста?
http://www.sitepoint.com/article/websites-tables-parts-1-2
http://alistapart.com/
Юрий Насретдинов:
На многотонные гифы у Вас есть трафик
1) не гифы, а PNG
2) многотонные - это когда вместе со страницей и всеми картинками - 40 Кб трафика (сам проверял), и при этом сами картинки кешируются??? :lol:
А, положим, я хочу работоть с двумя окнами: в одном иметь каталог шаблонов, в другом — каталог с классами? И что?
А проверяли, работает ли это нормально или нет? Работает. Вопрос, почему? Да потому, что создаются для каждого окна разные сессии.
http://www.sitepoint.com/article/websites-tables-parts-1-2
Скажите это разработчикам Оперы. Хотя PhpFM её не поддерживает, но выглядит по крайней мере он в ней достойно
Евгений Галашин:
не гифы, а PNG
Какая разница? (-:
Кроме того, ob_start('ob_gzhandler') сводит выигрыш в размере практически к нулю...
А проверяли
Проверял. В прошлой версии (той, которая долго лежала тут) этот механизм глючил. В текущей — тоже. (специально проверил) И не списывайте это на мою криворукость (-:

Да потому, что создаются для каждого окна разные сессии
Это как? научите? У меня ещё ни разу не получалось. Да похоже, что и у Вас тоже...
1. открываем демо.
2. логинимся.
3. Миддл-кликаем по ссылке (Fx; короче, открываем что-нибудь в новом окне/вкладке.)
3.5. оказываемся вовсе не там, где должны были (по логике юзабилити) оказатся (в папке . , а не ./demonstration/)
4. Всё-таки перехдим в папку demonstration (во втором окне)
5. хотим открыть файл news, что в первом окне, а получаем шиш...
Скажите это разработчикам Оперы.
А при чём тут Опера? в Опере свёрстанная на css страница, говорят, выглядит также, как и в IE.
Хотя PhpFM её не поддерживает, но выглядит по крайней мере он в ней достойно
Фраза на пять с плюсом... (-: А ля «Не читал, но книга вредная».
Юрий Насретдинов:
Фраза на пять с плюсом... (-:
Я старался :)

Да похоже, что и у Вас тоже...
Я открывал 2 разных окна. В первом логинился. Второе обновлял - все равно форма логина, значит, сессия не передалась в другое окно. Логинился. Потом бродил по разным папкам, и никаких проблем с конфликтом сессий не возникало. Так что по-моему, проблема надумана.

Опере свёрстанная на css страница, говорят, выглядит также, как и в IE.
Пробовали?
Евгений Галашин:
Пробовали?
http://bi.hse.ru/forum/viewtopic.php?t=424
Так что по-моему, проблема надумана.
Ключевое слово — «по-моему».
Вы попробайте сначала залогиниться, а потом открыть второе окно.
По-моему, ссылка должна вести в одно и то же место, вне зависимости от того, что я делал до этого. Самое интересное, что так думаю не только я, но и Тим Бернерс-Ли: http://www.w3.org/Provider/Style/URI.html
сессия не передалась в другое окно.
Cookies включены? Что за броузер? Как Вы на сервере стартуете сессию?
Попахивает Танком... (-;
Юрий Насретдинов:
Cookies включены
Естессно
Что за броузер
IE6 SP2
Как Вы на сервере стартуете сессию
session_start();
Попахивает Танком...
В смысле?
Евгений Галашин:
В смысле?
http://phpfaq.ru/na_tanke (-;

Как сервер без различных финтов ушами(типа sid) может различать два окна одного браузера?
Евгений Галашин:
Проверил в ИЕ6: Глюк остался, ч.т.д.
Вы б лучше сами посмотрели...
Евгений Галашин:
Да, в случае, если логиниться два раза, то работает, а вот если уже залогиненным открвть окно — то нет.
*едит* быть может, стоит выделить обсуждение?
Юрий Насретдинов:
быть может, стоит выделить обсуждение?
Да, пожалуй ;)

Господа, я решил (тоже прошло не знаю, сколько времени...) еще раз учесть все пожелания... И сделать новый PhpFM 3.0 на фреймах (по образу и подобию Проводника). +к тому, сделать поддержку вида не только списком, а еще и в виде иконок. Тот вариант, который сейчас разрабатывается, имеет очень тяжелый, но кроссбраузерный JavaScript (то есть, он работает и в Опере (в настройках яваскрипта нужно разрешить перехват нажатий на правую кнопку мыши), и в Мозилле, и ИЕ). Пока что на стадии разработки, вот то, что сделано:

1) фреймовая структура, дизайн резиновый!
2) в верхнем фрейме работает адресная строка (кнопка «Переход» декоративная!) и кнопка «Вверх»
3) в левом фрейме вид, как в Проводнике со включенным режимом «Папки». Работает не на JSHTTPRequest (планируется переделать, основываясь на нём - очень удобная штука), но все папки открываются динамически (с помощью невидимого IFRAME). Работает раскрытие и сворачивание папок - контекстного меню НЕТ!
4) в основной фрейм в виде иконок (есть в принципе еще в виде списка, но он ничего особенного из себя не представляет), рисуется яваскриптом, причем при ресайзе фрейма его содержимое перерисовывается без перезагрузки страницы. Работает выделение файлов (пока что множественное выделение не отлажено) мышью, при наведении мыши на файл через некоторое время над ним выскакивает тайтл с информацией о файле (раньше было сделано и для папок тоже). Слишком длинные имена обрезаются, при нажатии на файл или папку его имя восстанавливается до полного размера (правда, пока что без переносов строк). По двойному нажатию папка открывается, если на файл или на папку нажали два раза со значительным промежутком, выскакивает окошко с переименованием файла (не получилось у меня нормально сделать замену на <input type=text...). Для файлов и папок работает контекстное меню. Пока что еще много чего не реализовано, оцените пожалуйста хотя бы идею.

Адрес демонстрации: http://phpfm.com.ru/phpfm30/ , чтобы узнать пароль, напишите мне ЛС, я вам пришлю пароль (мера предосторожности).
mirk:
По скорей бы был доступен для обычного просмотра.
Можно выслать пароль для http://phpfm.com.ru/phpfm30/ на chipsman _гав-гав_ mail. ru?
Юрий Насретдинов:
mirk
Выслал
Юрий Насретдинов:
Теперь демонстрация доступна для всех желающих: http://phpfm.com.ru/ , пароль demo. В большинстве случаев достаточно просто нажать на кнопку «enter». Буду рад любым комментариям.
LazyDay:
авторизация работает только после повторного заполнения формы (в IE и FireFox)
Юрий Насретдинов:
LazyDay
Такого не должно быть. В любом случае, мне намного более интересно, что Вы думаете по поводу остальной части :)
Sagemy:
Классное творение. У меня замечание только по дизайну.
Когда наводишь мышу на название папки или на саму иконку, надпись подсвечивается синим, и сразу становится видно что иконка над строкой приподнята очень даже значительно. Это конечно ерунда но я так понял хотите точно как в форточках майкрософтовских зделать. Советую в картинке иконки сверху самого изображения оставить 3-4 пиксела просто прозрачныи, т.е. приспустить изображение вниз.
А так все здорово, мне очень понравилось. Удачи.
Юрий Насретдинов:
Sagemy
Не понял, можно поподробнее? Желательно со скриншотами, а то так очень тяжело понять, что Вы имеете ввиду.
Юрий Насретдинов:
Сейчас разрабатывается новая версия, правда называется по-другому:

http://dolphin.msk.su/dolphin-demo/ . К сожалению, на английском, но через некоторое время будет и на русском, я думаю :).

Версия light уже сделана и работает, mobile тоже. Версия full сейчас разрабывается. Open-source, кстати :).
Юрий Насретдинов:
Модераторы, уберите пожалуйста эту тему из «готовых решений» в мусор... Из ссылок больше ничего не работает.
Anonymous:
эта: http://dolphinfm.hut2.ru/ - работает :)

не ты случаем автор explorer скина для фубара? :)

небольшое замечание: почему бы инфу о файле не грузить сразу, а не только после щелчка на нём?
Ant:
Перенесено из форума: Склад готовых решений :: PHP.
Перенесено в форум: Разное :: PHP.
Юрий Насретдинов:
не ты случаем автор explorer скина для фубара? :)
Что такое «фубар»?
эта: http://dolphinfm.hut2.ru/ - работает :)
Ну, эта ссылка работает, вот только это уже не PhpFM :). Кстати, Dolphin'ом называется также дефолтный файловый менеджер для KDE4 :). Нехорошо получается...
небольшое замечание: почему бы инфу о файле не грузить сразу, а не только после щелчка на нём?
Ну а если это картинка, то что Вы предлагаете делать?
Maus:
Что такое «фубар»?
foobar2000 - имхо, наилучший аудиоплеер под винды. Впрочем, это оффтоп
Юрий Насретдинов:
Maus
Понятно, спасибо :).

Эта тема на forum.dklab.ru