Как стать автором
Обновить

Комментарии 67

Спасибо за статью.
интересно. спасибо
p.s. опере не зачет
не пользовался оперой никогда, но когда пришлось. нашел очень много недостатков
список в студию ;) или, как обычно, «пользовался» = «верстал под»?
При переходе на любой непривычный браузер сразу видишь кучу недостатков.
По памяти недостатки на момент перехода, в скобках состояние на сегодня:
ie->opera — проблемы с вёрсткой некоторых сайтов
opera->ff — тормоза, падает (уже не падает), жрёт много оперативки (уже меньше)
ff->opera — проблемы с rich webapplications (уже лучше, но кое-где глюки есть)
ff->safari — нет плагинов, постоянно падал (уже стабилен)
ff->chrome — нет плагинов (уже есть в хромиуме), неудобен для вебразработки
chrome->ff, safari->ff — жуткие тормоза
на FF поставьте плагин AFOM :)
самые ярые поклонники оперы отстучали минусами не только по камменту но и в карму. чо злые то такие все. я ни единого плохого слова про вашу малышку не сказал и не сказал что фф рулит вроде, а остался при своем мнении. а товарищь Goodkat выше очень хорошо сказал мыслю по этому поводу )
Просто ваш коммент бессмысленен и к обсуждению никакого отношения не имеет. Ни аргументации, ни полезности.
Да уж, из-за этой особенности оперы я уж было начал грешить на PHP в чем сейчас каюсь :)
НЛО прилетело и опубликовало эту надпись здесь
В случае загрузки нескольких файлов, шлёт их вместе внутри контейнера multipart/mixed.
«Нескольких», в смысле, из одного контрола, конечно.
Опера действует полностью в соответствии со стандартами в этом случае, стандарт тут не поддерживает php, так что не кайтесь, грешить нужно на php, а не на оперу.
может, в Web-разработку?
Точно! Перенёс.
К сожалению на текущий момент суммарная аудитория всех перечисленных браузеров едва дотягивает до 10% на среднестатистическом сайте. Но FF 3.6 не за горами, т.ч. через 3-4 месяца эффект от этой фичи уже должен быть ощутим :)
Странные вы данные какие-то даете, интересно, на чем они основаны? И почему на таком пейзаже уныния, FF 3.6 сделает что-то ощутимое?
У вас есть другие данные? Приведите плиз ссылки (только не для вашего личного проекта, а для среднестатистического).
Я же основываюсь на www.w3schools.com/browsers/browsers_stats.asp
На нескольких собственных проекта, к которым у меня есть доступ, картина еще печальней — в среднем: 50% IE, 48% FF, 2% все остальное.
Странно, но если судить по данным с вашей ссылки, за октябрь, например, Фаерфокс занимает 47.5%, а все ИЕ вместе 37.5%…
Тем более, «суммарная аудитория всех перечисленных браузеров» — это аудитория и ФФ тоже…
Не знаю какой сайт можно считать среднестатистическим, тем более, что вы подразумеваете.
Вы невнимательно читаете — в 47.5% FF _не попадает_ FF 3.6. Потому что он незарелизен еще. Т.е. если вы сейчас добавите эту фичу, то текущие пользователи FF не смогут ей воспользоваться.
Все, понял, спасибо)
Ну вы конечно молодец. Смотреть статистику браузеров на сайте для разработчиков :)
Прелесть ситуации в том, что она уже плоха, а данный метод позволяет её исправить. То есть, если у пользователя нет поддержки Flash (ActiveX, Java) и недостаточно новый браузер, то он просто загрузит файлы «по старинке».

Кстати, есть область где этот способ выручает сильно — интранет. Там доля таких браузером может резко отличаться.
В России всё не так плохо суммарная доля одних только Opera 9 и 10 может достигать 30%.
а на самом деле надо было
1) покурить стандарты и разобраться, имеет ли право опера присылать в таком виде, и если нет, то зарепортить им баг
2) если имеет — зарепортить feature request в php

Если покурить стандарты, то multiple — это фишка HTML5, и разное поведение браузеров в такой ситуации — вполне легально.
Хотя, если вебкит и гекко уже сделали юзабельный вариант — поведение оперы непонятно. Кстати, интересно было бы протестить пример на мобильной опере для вин-тач-девайсов, там ядро 2.3 все-таки. Может быть есть отличия в поведении. Думаю, если все-таки отписать им багрепорт — есть большой шанс включения исправленя в ядро 2.4.
Самое обидное — это если после копания в стандартах выяснится, что опера как раз ведет себя как положено, а остальные браузеры нарушают стандарты в угоду совместимости. Хотя пока я даже не вижу такого типа данных в стандарте на enctype(
Поведение Оперы станет понятно, если знать, что она реализовала Web Forms 2.0 задолго до того, как он влился в HTML5. В том черновике атрибут multiple есть только у select, а в input за это отвечают атрибуты min и max.
У оперы тоже есть приятные фичи. Помню очень порадовало, когда случайно увидел там атрибут required, хотя в других браузерах его еще не было :)

Баг зарепортен аж два раза.
Обычно я стараюсь анализировать за что минусы. А вот тут даже предположить не могу.
RFC2388 www.ietf.org/rfc/rfc2388.txt
Returning Values from Forms: multipart/form-data, L. Masinter. IETF, August 1998.

4.2 Sets of files

If the value of a form field is a set of files rather than a single
file, that value can be transferred together using the
«multipart/mixed» format.
Ага, спасибо!
запрос к php отмечен как bogus: bugs.php.net/bug.php?id=47789

в списках рассылки php обсуждения нет, нужно завести
Заголовок исправьте: загрузка «массивом» нескольких файлов за один раз — стандартная фича, описанная в мануале PHP. Здесь скорее «Выбор в диалоговом окне...» и решение соответствующих проблем. Иначе думаешь о пересказе мануала или об асинхронной загрузке.

Теперь о статье: «Из всех браузеров сейчас данную возможность не поддерживает только Internet Explorer» — таким образом велосипед нафиг никому не нужен. Не парьтесь, используйте множественные поля для файлов.
НЛО прилетело и опубликовало эту надпись здесь
О каком велосипеде идёт речь? Я описал конкретную (и частую ситуацию) — загрузка через Flash (Java, ActiveX) и degradation до стандартного поля. Эту ситуацию можно улучшить.
Вопрос по-существу от не-программиста. На виртуальном хостинге этой mailparse может и не быть, как я понимаю?
Может и не быть, но никто не мешает взять библиотеку, написанную на PHP.
Интересно, что если специально задать enctype='multipart/mixed', опера его проигнорирует и будет использовать дефолтный application/x-www-form-urlencoded
Где-то даже есть страница где описаны поведения всех браузеров с различными enctype.
Я может что-то не так понимаю, но почему бы просто не использовать джаваскрипт и генерить несколько инпутов?
фишка в том что это позволяет несколько файлов из диалога.
а при генерации нескольких инпутов придется кликать мышкой много раз :)
Оперы 9.5 и 10 отдают файлы с Content-Type: multipart/form-data;. Но беда с php имеется. Может поясните как надо понимать фразу:

К сожалению, «Опера» (ещё с версии 3.5) отправляет, в этом случае, запрос в формате «multipart/mixed», который PHP не понимает.
Содержимое внутри multipart/form-data отдаётся в multipart/mixed.
интересная ситуация получается, если опера — делать одно, если FF другое, если IE — третье, а то и просто так показывать стандартную форму с обычной загрузки файла. Если все так весело, зачем я должен отказываться от проверенного временем flash-загрузчика и типичной формы с обычным file для ситуаций когда флэша нет? Зачем плодить сущности для такой опреации, если она не гарантировано и не всегда корректно отображается в разных браузерах?
С CSS уже намучились и продолжаем, так зачем те же грабли переносить и на backend
А разве я предложил отказаться от Flash? Процитируйте это место, пожалуйста.
имеется ввиду что на данный момент бессмысленно разрабатывать такой подход для закачки, т.к. он не описан в стандартах. Это грабли которые от версии к версии браузеров будет меняться, поддерживается не четко и по большому счету код становится заложником людей которые ту же оперу пишут. Даже учитывая что «плагин недоступен», стандартный загрузчик из 3 полей типа file будет лучше чем грабли с multiple, которые большинство пользователей даже не будут пытаться использовать, они не знают что в выпавшем окошке можно выбрать 2-3 файла а не только один.
имеется ввиду что на данный момент бессмысленно разрабатывать такой подход для закачки, т.к. он не описан в стандартах
Этот подход описан в стандартах. Это часть стандарта WebForms2, который входит в HTML5.
лучше чем грабли с multiple, которые большинство пользователей даже не будут пытаться использовать, они не знают что в выпавшем окошке можно выбрать 2-3 файла а не только один.
Во флешовом загрузчике они до этого же как-то догадываются :)
Уточню, что Web Forms так и остался в состояние черновика, в вот HTML5 уже в статусе Last Call.
Кто придумает как проверить поддержку браузером multiple="true"/min-max без явного if (navigator.userAgent.match(...)) {...}?
Ничего сложного, все эти атрибуты отображаются в DOM браузера, как свойства, надо проверить их существование.
Да, точно, всё так и есть.
А поясните, к слову — атрибуты тега в его элемент DOM попадают только если браузер их понимает как использовать?
Там есть разница — атрибуты тега и свойства объекта. В атрибуты тега значения попадут всегда, в свойства объекта — нет.
Приятно, что в скором будущем этим можно будет пользоваться. На данный момент мы просто разрешаем загружать .zip/.tar/.tar.gz в тех местах, где по логике пользователю удобно притащить много файлов. На сервере обёртка разбирается с форматом, при необходимости сама распаковывает и в дальнейший код передаёт список файлов (список из одного файла, если загружали не архив). Но, конечно, это костыль и нормально работает только для небольших файлов. С видеохостингами, например, такой вариант сразу отпадает.
Кстати, мультиаплоад в ФФ наконец-то появился во многом благодаря хабру.
Я знаю, сам голосовал.
Спасибо. К сожалению, малоприменимо в реальном мире, особенно в случае с Оперой: мультиаплоад обычно нужен для загрузки больших файлов, а тут надо все полученные данные в памяти PHP-скрипта держать…
У нас в интранете юзкейсы самые разные, россыпь фоток по 1—2 мегабайта залить, например.
Извиняюсь, что поднимаю столь старую тему) У меня проблема — файлы через оперу загружаются, переносятся в $_FILES с помощью вашей функции, но содержимое искажается. magic_quotes_gps отключен, mbstring стоит. В чем может быть проблема, может, сталкивались?
Any help much appreciated :)
Трудно предположить. Может быть, у вас русский Apache?
апача вообще нет, только nginx и php-fastcgi
попрбовал с Mail_mimeDecode — точно такой же результат. Не понимаю…
Посмотрите сырые данные и попробуйте сравнить то, что отсылаете с тем, что приходит. Там можно сделать какие-то выводы.
Как раз этим сейчас занимаюсь :)
Файлы одинакового размера, но содержимое местами различается
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации