[web] Загрузить целую папку

Flack_bfsp

Задача: клиент указывает в браузере папку, и на сервер грузятся все файлы из этой папки. Хотел обойтись простой связкой PHP + JavaScript, да не выходит. PHP не может читать с клиентских компов - всё-таки серверный язык, JavaScript не может прочитать содержимое папки по соображениям секьюрности.
Можно написать Java-апплет для такого дела, но:
1) я ни разу не писал апплетов, Java знаю только теоретически;
2) весь серверный код написан на PHP, клиентский - на JavaScript, и не хотелось бы третий язык к ним приплетать;
3) на клиентские машины желательно не устанавливать никакого дополнительного софта.
Есть ли варианты решения проблемы? Гуглил, не нагуглил нечего хорошего, кроме того, что сделать так нельзя.

Helga87

Еще во flash можно сразу несколько файлов загружать. Но не папку, правда.

pitrik2

кроме того, что сделать так нельзя
пожалуй, соглашусь
кстати, не вижу в данонм случае различий между флэш, джава и джаваскрипт
на них на всех должно это самое соображение секьюрности распространятся

Flack_bfsp

Да нет, на Джаве можно это сделать. Сам видел работающие демки. Просто не хочется каждому клиенту ставить JRE. Есть ещё вариант с WSH. Вроде такого:
 	var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFolder(folderspec);
var fc = new Enumerator(f.Files);
var s = "";
for (; !fc.atEnd; fc.moveNext
s += fc.item + "";
return s;

Вернёт список файлов. По идее. Только у меня ослик пишет, что, мол, не может этот объект создать. В первой же строчке.
Да, совсем забыл сказать! Поддержка Лисов и Опер не принципиальна. То есть для решения этой проблемы можно использовать Микрософтовские расширения под названием JScript. Какие-нибудь ещё есть мысли?

Flack_bfsp

Еще во flash можно сразу несколько файлов загружать. Но не папку, правда.

Много файлов сразу можно грузить и обычными формочками. И принимать их в ПХП. Мне это и нужно, с этим справлюсь. Вся суть в том, чтобы получить список всех файлов, которые лежат в папке. Вот что я не знаю, сделать как.

Hastya

Подписанный апплет или ActiveX control (IE only).
Если посмотришь, как это сделал Google, то у них есть специальная штука - Google Video Upload.

Flack_bfsp

А вот это:
 "Scripting.FileSystemObject" 

что за объект? Я в активиксах не силён, но вроде это что-то стандартное? Как сделать, чтобы оно создавалось? Что дома, что на работе пишет ошибку сервера автоматизации при создании объекта.

Hastya

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

Flack_bfsp

В общем, ни внешняя прога (как в гугл видео ни апплет версии больше 1.1 - не вариант.
Попробовал разрешить выполнение любых активиксов для локальной сети (локалхост проверить) - заработало. При этом антивирь заругался. Фича нужна для использования в локалке на работе. Антивирь у всех клиентов стоит. Думаю, можно как-нибудь настроить антивирь, чтобы скрипты с моего хоста запускали любые активиксы, а другие неподписанные пресекались без предупрежедний. Будем думать в этом направлении.

bansek

Посмотри как это сделано в exchange
Он все умеет даже не в интранете а в интернете
я когда увидел, долго подбирал челюсть с пола

Ivan826

Что есть exchange?

ifani

Через апплет это сделать несложно, но есть несколько проблем:
1) Если хочешь не устанавливать JRE, то нужно писать ориентируясь под MS JVM (соответствует java 1.1). Чтобы получить доступ к файловой системе, апплет должен быть подписан, но jvm от мелкомягких не распознаёт подписаные джары - там нужно будет собирать и подписывать кабы, которые, в свою очередь, не распознаёт сановская jvm (если она вдруг установлена) То есть нужно будет собирать обязательно и джары, и кабы и на страниче прописывать их оба.
2) Даже если апплет будет под java 1.1, но у клиента стоит Win XP SP2, то JRE ему ставить, всё равно, придётся, так как второй сервис пак при установке сносит ms jvm.
А чтобы обойти антивиря, попробуй eval

Hastya

Что ты понимаешь под ActiveX? Скрипты? Я просто сомневаюсь, что это можно полноценно сделать скриптами.
Я имею в виду контролы, устанавливаемые в браузер. IE-only. При этом пользователь получает предупреждение и должен разрешить установку контрола.
При этом не вижу принципиальной разницы в установке контрола и установки Java (напр. Web Start).
Лет 7 назад я делал подписанный апплет для upload-а, Java 1.1, работало под IE 4 и Netscape 4. Но гемора очень много, особенно если присутствуют русские буквы и т.п. При установке подписанного апплета примерно такое же предупреждение, как в случае ActiveX.

Flack_bfsp

Под активиксом я понимаю да, контролы. Которые создаются скриптом.
Так я же уже сказал, что сделал это с помощью скриптов. Надо просто с настройками безопасности поколдовать. При этом НИКАКИХ дополнительных прог или контролов ставить не надо, т.к. я использую активикс от WSH, который и так есть в любой винде, начиная с 98.
А делается с помощью скриптов это очень просто - при нажатии на кнопку я получаю джаваскриптом список файлов из папки (как раз с помощью активикса WSH создаю в форме кучу инпутов типа файл, и делаю сабмит. Сервер принимает их все.

kruzer25

создаю в форме кучу инпутов типа файл, и делаю сабмит
А как ты в инпут типа файл подставишь нужное имя файла?
Из соображений безопасности это невозможно (а вдруг ты подставишь /etc/passwd?) Есть только всякие уже неработающие хаки вида "записать в буфер имя файла, когда пользователь нажмёт Ctrl, поместить фокус в инпут типа файл, сэмулировать нажатие V и отправить форму, а сам инпут сделать скрытым"

pilot

Если посмотришь, как это сделал Google, то у них есть специальная штука - Google Video Upload.
Это ж отдельная клиентская программа?

pilot

Некошерно. Не кроссбраузерно и не кроссплатформенно.
Нельзя научить пользователей юзать zip?

Flack_bfsp

Сам знаю, что не кросс и не кросс. В данном случае это вообще не нужно. Пользователям (которые все как один сидят в винде под ослом) нужны скорость и удобство. Заставлять их зажимать файлы в зипы - так им проще и быстрее будет по одному все файлы из папки залить. Пользователи - не программисты, и даже не продвинутые пользователи. Зачем им нужны зипы, когда есть более удобный и быстрый вариант с загрузкой целой папки? Им абсолютно по барабану кроссплатформенность и кроссбраузерность - они линуха-то с оперой и лисом в жизни не видели.
Что касается того, как я забъю имя файла в файл... Да мне, вообще говоря, файлы и не нужны. Мне только имена нужны. Их можно упаковать в хиддены на крайняк. И никаких извращений с эмулящиями нажатий тут не нужно.

kruzer25

Мне только имена нужны. Их можно упаковать в хиддены на крайняк. И никаких извращений с эмулящиями нажатий тут не нужно
Всё-таки, не понял, как ты потом эти файлы на сервер загрузишь...

Flack_bfsp

А мне и не надо их грузить. Я не буду использовать механизм загрузки через хттп.
Есть некая сетевая папка, куда имеют полный доступ и клиенты и я. Джаваскрипт прямо на клиентской стороне будет копировать все файлы из указанной клиентом папки в эту сетевую папку. Зачем это нужно, и почему бы клиентам вручную не скопировать файлы в эту папку? Во-первых, все файлы должны одинаково называться, вроде file0001. Заставлять клиентов вручную переименовывать файлы, да ещё так, чтобы они не конфликтовали с уже имеющимися - слишком жестоко. Во-вторых, если я захочу изменить конечную сетевую папку, я просто изменю пару строк в скрипте, и для клиентов это останется прозрачно. Они могут вообще не думать о том, куда копируются эти файлы. Просто подготавливают у себя на локальном компе некие файлы (с некрасивыми названиями нажимают на кнопочку - и всё готово.

pitrik2

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

Flack_bfsp

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

ifani

При этом пользователям, всё равно, придётся у себя на компе файлы складывать во вполне определённую папочку, потому как в стандатрном инпуте file папку выбрать нельзя
Хотя, конечно, можно попросить их выбирать любой файл в этой папке... но не будет ли это для них слишком сложно

kruzer25

Просто подготавливают у себя на локальном компе некие файлы (с некрасивыми названиями нажимают на кнопочку - и всё готово.
А не легче ли заставить клиентов складывать файлы во вполне конкретную папочку, которая будет на их компе расшарена? А потом ты на сервере зайдёшь в шару клиента, и перетащишь эти файлы так как тебе надо в общую шару?
Джаваскрипт прямо на клиентской стороне будет копировать все файлы из указанной клиентом папки в эту сетевую папку.
Не понял, как это будет происходить?

ifani

Не понял, как это будет происходить?
на WSH это, действительно, можно сделать, хотя в данном случае, имхо, изврат

Flack_bfsp

А не легче ли заставить клиентов складывать файлы во вполне конкретную папочку, которая будет на их компе расшарена? А потом ты на сервере зайдёшь в шару клиента, и перетащишь эти файлы так как тебе надо в общую шару?

Не легче. Потому как клиент и комп не взаимосвязаны - разные клиенты могут логиниться под своими никами на разных компах.

kruzer25

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

Flack_bfsp

Не тормози. Я так и делаю. Собственно, для этого и нужна эта фича - чтобы все файлы хранились на сервере. Клиентам проще работать с локальным компом - они в свои локальные папки складывают файлы, а потом нажимают на кнопочку и файлы оказываются на сервере в нужном месте и с нужными именами. Клиент не обязан знать, где лежит это нужное место. Потмоу что в конечном итоге оно может перемещаться. И клиента это не должно волновать.

kruzer25

А почему вы не используете ActiveDirectory?
Без всякого геморроя будет - у клиента нет никаких локальных папок, и всё сразу кидается на сервер, полностью прозрачно для него...

vall

там скорее всего недокументированное апи и оно не будет работать пока бинарник не подпишет мкрсфт

Flack_bfsp

Потому что нет времени на переход на всякие активдиректори и переучивания клиентов. Клиент привык хранить файлы в папке С:\Файлс, а желание клиента - закон.

kruzer25

subst z:\clientdir\xyu c:

Flack_bfsp

Шутку понял, смешно.

kruzer25

Это не шутка.
Если пользователи привыкли всё кидать в какую-то папку на диске C - зачем им делать эту папку локальной, пусть она тоже берётся с сервера

Ivan8209

> желание клиента - закон
Это, кстати, неправильно, клиентов надо переучивать.
Потому что обратная совместимость бывает, и даже слишком часто, вредна.
А пользователи часто желают того, чего сами не знают.
---
...Я работаю антинаучным аферистом...

Flack_bfsp

Я в курсе, что такое сабст. Уже лет 10, как в курсе. То есть ты предлагаешь:
1) на каждом компе, куда может залогиниться клиент, делать сабст;
2) переименовывать партишн мэджиком диск С:, чтобы он не конфликтовал с новым сабстом.
И ради чего всё это извращение? Для того, чтобы использовать активдиректори. Типа это круто. При этом гемора будет много, а пользы (что для меня, что для клиентов) ноль. Извини, но у меня нет такой самоцели - использовать активдиректори.

kruzer25

1) на каждом компе, куда может залогиниться клиент, делать сабст;
Ага, при каждом логине клиента делать subst или симлинк (логины, естественно, тоже будут проходить через общий сервер и он будет запускать логон скрипт - или ты на каждом компе руками учётные записи заводил?)
Для того, чтобы использовать активдиректори. Типа это круто. При этом гемора будет много, а пользы (что для меня, что для клиентов) ноль.
Почему пользы ноль? У тебя проблема - клиенты что-то там делают на локальной машине, и надо это оттуда выковырять. Если использовать ad, то такой проблемы (и других похожих) у тебя никогда не будет - все файлы клиента всегда будут храниться на сервере.

Werdna

Убей себя за ActiveX, это порнотехнология.
Даже если бы у меня выполнялся ActiveX, я бы никогда не позволил какому-то ублюдку далать скан своей файловой системы.

bastii

Мб, на .NET написать. Все лучше чем ActiveX. И главное там по идее как раз можно, не требуя доп разрешений от пользователя, получить доступ к папке, которую пользователь выберет через open dialog.
Сам не делал, что что-то похожее видел как у других работает.

Flack_bfsp

Господа и прочие ублюдки! Вы так и не поняли специфику задачи. Надо решить пробелму с минимальными затратами. Переписывать ВСЁ приложение на .нет ради одной-единственной функции более, чем нерационально. Настраивать активдиректори - тоже. У клиентов нет времени на эту ерунду. Им по барабану, что находится внутри системы и как она устроена. Для них важно, чтобы можно было сесть за комп, на котором только что установлена свежая 98/2000 и сразу начать работать. Без дополнительных настроек и дополнительных прог.
А ублюдки пусть подумают, как они будут на работе объяснять начальнику, что это, мол, моя файловая система (на рабочем компе!) и никакие ублюдки, вроде упомянутого начальника, сканировать её не имеют права.

Helga87

И главное там по идее как раз можно, не требуя доп разрешений от пользователя, получить доступ к папке, которую пользователь выберет через open dialog.
Хм. А это интересная информация. Спасибо, буду проверять.

stm7884696

Господа и прочие ублюдки! Вы так и не поняли специфику задачи. Надо решить пробелму с минимальными затратами. Переписывать ВСЁ приложение на .нет ради одной-единственной функции более, чем нерационально. Настраивать активдиректори - тоже. У клиентов нет времени на эту ерунду. Им по барабану, что находится внутри системы и как она устроена. Для них важно, чтобы можно было сесть за комп, на котором только что установлена свежая 98/2000 и сразу начать работать. Без дополнительных настроек и дополнительных прог.
А ублюдки пусть подумают, как они будут на работе объяснять начальнику, что это, мол, моя файловая система (на рабочем компе!) и никакие ублюдки, вроде упомянутого начальника, сканировать её не имеют права.
Умные люди еще до тебя создали для этих целей ad - залогинился в домен, и работаешь...
Максимум, что требуется на клиентско машине - ввести ее в домен,но и это можно настроить..
А то, что делаешь ты - это назвается "онанизм".
Я тебе могу порекомендовать чела, который за вполне приемлемые деньги настроет тебе ad так, что это все будет прозрачно для клиентом, никому никуда переучиваться не надо будет, и трахать мозга с браузером - тоже.

bastii

Господа и прочие ублюдки! Вы так и не поняли специфику задачи. Надо решить пробелму с минимальными затратами. Переписывать ВСЁ приложение на .нет ради одной-единственной функции более, чем нерационально. Настраивать активдиректори - тоже. У клиентов нет времени на эту ерунду. Им по барабану, что находится внутри системы и как она устроена. Для них важно, чтобы можно было сесть за комп, на котором только что установлена свежая 98/2000 и сразу начать работать. Без дополнительных настроек и дополнительных прог.А ублюдки пусть подумают, как они будут на работе объяснять начальнику, что это, мол, моя файловая система (на рабочем компе!) и никакие ублюдки, вроде упомянутого начальника, сканировать её не имеют права.
не надо ничего на сервере переписывать под .NET, я только предложил апплет сделать вместо ActiveX компонентом .NET — так как проще реализовать, и по идее если все правильно сделать, то у клиента IE не будет спрашивать дополнительного разрешения на выполнение апплета.

bastii

Умные люди еще до тебя создали для этих целей ad - залогинился в домен, и работаешь...Максимум, что требуется на клиентско машине - ввести ее в домен,но и это можно настроить..А то, что делаешь ты - это назвается "онанизм".Я тебе могу порекомендовать чела, который за вполне приемлемые деньги настроет тебе ad так, что это все будет прозрачно для клиентом, никому никуда переучиваться не надо будет, и трахать мозга с браузером - тоже.
И как будет выглядит экспириенс пользователя? Наверно не получиться что-то типа: на странице где-то по месту кликнул Upload, в диалоге выбрал папку, нажал Ок, увидел результат на обновленной странице?

bastii

Хм. А это интересная информация. Спасибо, буду проверять.
Нет, похоже я что-то спутал, есть только для файла OpenFileDialog.OpenFile

Dasar

> Вы так и не поняли специфику задачи. Надо решить пробелму с минимальными затратами. Переписывать ВСЁ приложение на .нет ради одной-единственной функции более, чем нерационально.
уже второй раз не понимаю, почему ты считаешь, что тебе предлагают переписать всё приложение?
у тебя есть кошерная программа написанная на html, ну и отлично.
дальше выясняется, что эта кошерная программа априори не умеет читать файлы с диска, так реализуй ты эту одну некошерную функцию в виде ActiveX, WScript-а, отдельного exe-шника, .net-контрола и все будет зашибись.
нахрена тебя тянет из-за одной функции переписать всё?

Flack_bfsp

Умные люди еще до тебя создали для этих целей ad - залогинился в домен, и работаешь...
Максимум, что требуется на клиентско машине - ввести ее в домен,но и это можно настроить..

Чуве, не смеши меня. АД идёт лесом и "умные" люди, которые им пользуются, тоже.
Клиент собирает файлы разных типов у себя на компе. Нажимает на кнопку и они грузятся куда надо. При этом:
1) файлы получают уникальное имя вида userlogin_nnnnn
2) файлы разных типов кладутся в разные места. к примеру, файлы типа xxx в папку а файлы типа yyy в папку
Если посадить всех клиентов на АД, и сразу хранить все файлы на сервере, то:
1) надо будет учить их самих переименовывать файлы, да ещё и так, чтобы они не конфликтовали с другуими именами. Клиент - простой человек, може случайно нажать не на ту клавишу, и имя файла будет неверным. На переименование, скажем, 1000 файлов может уйти значительное время. Конечно, можно использовать всякие тулзы мультиренэйма, но нафига это нужно, когда сейчас пользователь наживает на одну кнопку - и всё готово?
2) надо каждому клиенту объяснять, что эти файлы надо класть в одно место, а эти - в другое. Клиент может случайно один файл положить не в ту папку. И как потом это разгребать? И тем более зачем, когда сейчас клиент нажимает на одну кнопку, и все его файлы премещаются в нужное место? Далее, если, к примеру, я вздумаю перемещать файлы типа yyy в папку то достаточно будет изменить три символа в скрипте. Если же будет АД, то придётся каждому клиенту объяснять, что теперь их надо ложить в другое место. И нафига всё это? Потмоу что АД - это круто, а активикс - аццтой.
Вот уж действительно будет полный АД!

Hastya

А кто тебе мешает переименовывать файлы на сервере?

ava3443

Умные люди еще до тебя создали для этих целей ad - залогинился в домен, и работаешь...
Максимум, что требуется на клиентско машине - ввести ее в домен,но и это можно настроить..
Сколько ж умников нашлось посоветовать AD
А у кого-нибудь есть цифры по трудозатратам перевода в домен 100-200 рабочих мест (именно перевода, а не добавления новых)? Трудозатраты-то в основном не на сервере, а на клиентах. Вот у нас через 1-1.5 года после запуска AD по-прежнему процентов 20-30 народу не в домене, ибо ЛОМАЕТ народ чё-то делать со своими ноутами. Работает - не трошь

pitrik2

Чуве, не смеши меня. АД идёт лесом и "умные" люди, которые им пользуются, тоже.Клиент собирает файлы разных типов у себя на компе. Нажимает на кнопку и они грузятся куда надо. При этом:1) файлы получают уникальное имя вида userlogin_nnnnn2) файлы разных типов кладутся в разные места. к примеру, файлы типа xxx в папку а файлы типа yyy в папку посадить всех клиентов на АД, и сразу хранить все файлы на сервере, то:1) надо будет учить их самих переименовывать файлы, да ещё и так, чтобы они не конфликтовали с другуими именами. Клиент - простой человек, може случайно нажать не на ту клавишу, и имя файла будет неверным. На переименование, скажем, 1000 файлов может уйти значительное время. Конечно, можно использовать всякие тулзы мультиренэйма, но нафига это нужно, когда сейчас пользователь наживает на одну кнопку - и всё готово?2) надо каждому клиенту объяснять, что эти файлы надо класть в одно место, а эти - в другое. Клиент может случайно один файл положить не в ту папку. И как потом это разгребать? И тем более зачем, когда сейчас клиент нажимает на одну кнопку, и все его файлы премещаются в нужное место? Далее, если, к примеру, я вздумаю перемещать файлы типа yyy в папку то достаточно будет изменить три символа в скрипте. Если же будет АД, то придётся каждому клиенту объяснять, что теперь их надо ложить в другое место. И нафига всё это? Потмоу что АД - это круто, а активикс - аццтой.Вот уж действительно будет полный АД!
чушь написал
клиент будет класть файлы в одну свою удаленную папку (у каждого клиента своя)
потом будет жать кнопку на твоей хтмл страницы, и скрипт (хоть пхп, хоть что угодно) перетаскает все куда надо и как надо
я не сторонник ad, нах его, долгое время загрузки клиентских компов, невозможность загруки если пропала сеть и всякая подобная фигня
может просто сделать для каждого чувака свою папку удаленно, подключить им всем это как диск X:
и уговорить их заходить в свою папку, жать ctrl+a, ctrl+c
а потом на диске X: жать ctrl+v
ну а потом жать кнопку в твоем хтмле

kruzer25

1) файлы получают уникальное имя вида userlogin_nnnnn
2) файлы разных типов кладутся в разные места. к примеру, файлы типа xxx в папку а файлы типа yyy в папку />
1) надо будет учить их самих переименовывать файлы, да ещё и так, чтобы они не конфликтовали с другуими именами. Клиент - простой человек, може случайно нажать не на ту клавишу, и имя файла будет неверным. На переименование, скажем, 1000 файлов может уйти значительное время. Конечно, можно использовать всякие тулзы мультиренэйма, но нафига это нужно, когда сейчас пользователь наживает на одну кнопку - и всё готово?
2) надо каждому клиенту объяснять, что эти файлы надо класть в одно место, а эти - в другое. Клиент может случайно один файл положить не в ту папку. И как потом это разгребать? И тем более зачем, когда сейчас клиент нажимает на одну кнопку, и все его файлы премещаются в нужное место? Далее, если, к примеру, я вздумаю перемещать файлы типа yyy в папку то достаточно будет изменить три символа в скрипте. Если же будет АД, то придётся каждому клиенту объяснять, что теперь их надо ложить в другое место. И нафига всё это? Потмоу что АД - это круто, а активикс - аццтой.
Все твои четыре пункта справедливы только если пользователи будут выполнять работу скрипта.
И все они сразу же перестают иметь значение, как только ты поймёшь, что клиенты будут кидать файлы в свои клиентские папки, а при нажатии на кнопочку "загрузить" в веб-приложении, твой скрипт на сервере возьмёт файл из нужной клиентской папки (которая, опять же, лежит на сервере переименует файлы как нужно и раскидает их туда, куда ты хочешь.
И без всяких там извратов с activex.

stm7884696

Все твои четыре пункта справедливы только если пользователи будут выполнять работу скрипта.
И все они сразу же перестают иметь значение, как только ты поймёшь, что клиенты будут кидать файлы в свои клиентские папки, а при нажатии на кнопочку "загрузить" в веб-приложении, твой скрипт на сервере возьмёт файл из нужной клиентской папки (которая, опять же, лежит на сервере переименует файлы как нужно и раскидает их туда, куда ты хочешь.
И без всяких там извратов с activex.
+1
2 автор треда: Если ты не хочешь даже подумать над альтернативными путями решения проблемы - то извини... Это ж каким тупоголовым надо быть, что бы бится головой о стену, когда рядом есть большая дверь? Тебе пол форума советует, что для твоих нужд ad подходит идеально, а ты, даже не узанв, что и как может делать ad кричишь, что твоя идей с браузером и php - идеальна....
Я бы на месте твоего начальника уволил бы тебя нафиг.
Оставь, кстати, нам его телефон - мы ему позвоним, и расскажем, как можно сделать быстро и качественно то, что ты мурыжишь уже небось не первый месяц....
Одни выходные, и все работыют на ad, причем для пользователей изменится только картинка при входе в комп - вместо мегаXP темы будет обычное окошко авторизации в домен.
Оставить комментарий
Имя или ник:
Комментарий: