Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Простое решение для выбора локального файла с запоминанием пути
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Простое решение для выбора локального файла с запоминанием пути

Страниц (1): [1]
 

1. GrishaDm - 15 Декабря, 2011 - 22:17:03 - перейти к сообщению
Вот вкратце что за проблема.
Хотелось бы просто с помощью связки html-javascript-php выбирать локальный файл как это делается в html-теге input type='file' и помнить его полный путь на машине клиента (чтобы javascript-программа обработала его и передала результат на сервер). Но в целях безопастности в браузерах пути локальных файлов не запоминаются, а загружать этот файл на сервер не хотелось бы.
У этой задачи есть пути решения (например через подключение невидимого на экране flash-объекта или через загрузку файла на сервер с последующей обработкой, через создание собственного окна меню выбора файла и т. д.), но они не очень удобны и требуют много усилий для их применения. А хотелось бы чтобы скрипт на этой же вэб-странице после выбора файла пользователем в форме по событию submit 1) находил данный файл 2) читал его, скажем, в массив 3) проделывал с прочитанным содержимым какие-либо операции 4) отсылал результат в виде содержимого текущей формы на сервер. Предположим что проблем с доступом на чтение у данного файла нет. Естественно интересуют только кроссбраузерные решения. Как вариант подойдут решения с использованием технологии ajax (хотя в этой задаче я сомневаюсь что они чем-либо помогут).
Лично для меня наибольшую трудность здесь в реализации представляет проблема использования html-тега input='file' не для загрузки файла на сервер, а для выбора локального файла с запоминанием и использованием в javascript-коде его полного пути. Если кто встречал простые готовые решения подобной задачи - пожалуйста подскажите.
2. tuareg - 15 Декабря, 2011 - 23:31:15 - перейти к сообщению
Если такое и возможно, в чем я сильно сомневаюсь. То смотреть надо в сторону флэша.
P.S А кстати в чем проблема? Загрузили файл через iframe. На сервере получили содержимое этого файла(его можно даже не копировать и не загружать ни в какую папку используя tmpl) отдали приложению. Серверная часть отработала, временный файл удалился. По идее все.
Все тут описанное ИМХО. Я буду рад если меня поправят
3. GrishaDm - 16 Декабря, 2011 - 02:22:34 - перейти к сообщению
tuareg пишет:
Если такое и возможно, в чем я сильно сомневаюсь. То смотреть надо в сторону флэша.
P.S А кстати в чем проблема? Загрузили файл через iframe. На сервере получили содержимое этого файла(его можно даже не копировать и не загружать ни в какую папку используя tmpl) отдали приложению. Серверная часть отработала, временный файл удалился. По идее все.
Все тут описанное ИМХО. Я буду рад если меня поправят

Да проблем предостаточно. Например:
1. Зачем мне грузить на сервер файл огромный файл нагружая линию, когда мне нужна только небольшая часть информации из него?
2. Файл может превышать ограничения в настройках web-сервера или php по размеру, однако та часть что мне нужна, их не превышает.
3. Сервер может быть перегружен - зачем я ещё буду нагружать его дополнительными задачами? Проще свернуть готовый массив через тот же самый JSON и передать.
4. При обработке информации многие ошибки при работе скрипта в разы проще "отловить" на клиенте, чем на сервере. Хотя бы уже потому что у хостера не всегда известны все настройки, он их может менять без предупреждения, варнинги и нотайсы могут просто не выводиться в лог.
Теперь насчёт флэша - если там есть готовое решение - тогда я им, конечно, воспользуюсь (но пока встречал только поделки с которыми надо разбираться), но "изобретать велосипед" самому - увольте. Собственно именно поэтому и создал тему - кто встретит готовые формы с удобным выбором файла и передачей его на клиенте в javascript - пишите. Если что-либо встречу достойное вашего внимания сам - напишу сюда обязательно.
Вставлю также пару примеров где это может потребоваться:
а) Менеджер загружает прайс-лист в интернет-магазин из эксель или 1с, который сразу конвертируется и передаётся скриптом на сервер для загрузки там в базу данных. Я встречал рабочие проекты, где это сделано через флэш и очень прилично, но с ними надо сидеть и разбираться. В результате конвертирования исходный прайс-лист уменьшался по размеру в 10-100 раз до передачи на сервер.
б) В предыдущем примере вместе с прайс-листом шли фотографии и картинки с товарами, но они не годились для сайта. Их конвертировал скрипт на клиенте и создавал изображения товаров для основного показа и для предварительного просмотра. В другом случае они были вставлены в сам прайс-лист и скрипт их оттуда просто "вытаскивал". Здесь объёмы при передаче уменьшались не так сильно, как в предыдущем примере, но зато проблемы в работе скрипта легче диагностировались и скрипт быстро был "доведён до ума". Изображения грузились естественно на сервер не в виде файлов, а заносились в базу данных (не только из соображений конфиденциальности, но и безопасности).
4. tuareg - 16 Декабря, 2011 - 02:47:32 - перейти к сообщению
Завтра( уже сегодня) ответят более опытные товарищи. Но скорее всего flash. и то как обойти ограничение по политике безопасности. В FF даже эмуляция клика по input type="file" не работает Улыбка
А так получается Вы хотите, чтобы скрипт(flash) мог прочитать все файлы на компе user-a. Это же даже не дыра в безопасности это "дырище"
5. GrishaDm - 16 Декабря, 2011 - 04:37:57 - перейти к сообщению
tuareg пишет:
Завтра( уже сегодня) ответят более опытные товарищи. Но скорее всего flash. и то как обойти ограничение по политике безопасности. В FF даже эмуляция клика по input type="file" не работает Улыбка
А так получается Вы хотите, чтобы скрипт(flash) мог прочитать все файлы на компе user-a. Это же даже не дыра в безопасности это "дырище"

С точки зрения логики не вижу здесь "дыр" - пользователь сам выбирает файл - как вариант ладно, допустим, скрипт не может знать пути на локальном компьютере - но ведь может же скрипт прочесть то из него информацию в массив? Смысл тогда какой в клиентском языке программирования если он даже такое не может? Тут просто следует употреблять термин не "дырище", а скорее "маразм" (у тех, кто такие ограничения вводил). Вот передача файлов на сервер по протоколу http - это реально "дырище" (ибо в момент изменения прав на файл и папку на запись страничка легко может вылететь, а права на запись так и останутся).
Спасибо за ваш ответ. Надеюсь где-то всё же есть готовые решения.
6. Мелкий - 16 Декабря, 2011 - 08:52:28 - перейти к сообщению
GrishaDm пишет:
Хотелось бы просто с помощью связки html-javascript-php выбирать локальный файл как это делается в html-теге input type='file' и помнить его полный путь на машине клиента

Штатными силами только PHP и JS эта задача решения не имеет.
Давать видеть весь путь, его часть или только имя файла при загрузке на сервер - полностью по усмотрению браузера. Так, хромиум и опера дают видеть полный путь (тем не менее, несуществующий!), FF - только имя файла.

Тем не менее, если совместимость особо не волнует, покопайте в сторону File API из спецификации HTML5.
Или флеш.
7. GrishaDm - 16 Декабря, 2011 - 09:27:04 - перейти к сообщению
Мелкий пишет:

Штатными силами только PHP и JS эта задача решения не имеет.

Это из собственного опыта или есть подтверждения тому от разработчиков наиболее распространённых браузеров или языка Javascript?
Ещё раз подчеркну - интересуют только кроссбраузерные решения - всякие возможности html5, реализованные в 1-2 браузерах да и то не всех версий и не под все ОС (например IE 9, который только Windows и только минимум Vista) - не интересуют. Да я встречал такие решения на flash и они точно кроссбраузерные (проверял в IE, FF, Chrome, Opera, Safari), требуют лишь плагина с поддержкой этой технологии, но не в готовом виде к применению к сожалению.
8. EuGen - 16 Декабря, 2011 - 09:31:54 - перейти к сообщению
GrishaDm
К счастью, общего решения этой проблемы нет. Почему к счастью? Потому что я, к примеру (и, думаю, Вы тоже, если задумаетесь) не имею ни малейшего желания сообщать сторонним сайтам то, какая структура данных у меня на локальном диске и как они хранятся. Эту информацию я предпочту оставить только самому себе.
9. GrishaDm - 16 Декабря, 2011 - 09:46:03 - перейти к сообщению
EuGen пишет:
GrishaDm
К счастью, общего решения этой проблемы нет. Почему к счастью? Потому что я, к примеру (и, думаю, Вы тоже, если задумаетесь) не имею ни малейшего желания сообщать сторонним сайтам то, какая структура данных у меня на локальном диске и как они хранятся. Эту информацию я предпочту оставить только самому себе.

Спасибо за ваше мнение. Но видимо я не совсем точно выразился в описании данной темы - сам путь к файлу нужен не конкретно мне, а javascript-программе у клиента на машине. Это не обязательно должен быть путь, а просто возможность скрипту произвести чтение данных из выбранного пользователем локального файла без отправки этого файла на сервер. Никто никому ничего не должен сообщать и это никому не нужно - короче нужно содержимое выбранного файла, а не данные о нём. И так как пользователь выбрал его сам - не вижу проблем с нарушением конфиденциальности. Используемая технология при этом мне безразлична, лишь бы была очень широко распространённой, доступной всем и кроссбраузерной.
10. tuareg - 16 Декабря, 2011 - 10:03:07 - перейти к сообщению
Может мы просто по разному это понимаем??? Но если скрипт получил содержание файла переправить его кому-то проблем не составляет. Обычно всех "добрых" людей и интересует содержимое файла, а не данные о нем.
Теперь по теме. На флеше вроде это можно сделать(реализовать выбор файла) и считка его, тут google в помощь.
11. Мелкий - 16 Декабря, 2011 - 10:28:38 - перейти к сообщению
GrishaDm пишет:
Это из собственного опыта

Можете и сами поглядеть. Value поля загрузки файлов доступно на чтение.
Но это вам в любом случае не поможет, даже если под виндой или IE всякими там виден и реальный путь (где-то, помнится, виден. Нет под рукой ни виндов, ни тем более, ie, чтобы проверить) - классический JS не имеет доступа к машине пользователя. Почему? Потому что это язык для придания интерактивности сайту.

GrishaDm пишет:
зато проблемы в работе скрипта легче диагностировались

ай сомнительно. Диагностировать единственный скрипт в единственном окружении против вороха браузеров, у каждого из которых свой взгляд на реализацию того или иного функционала, а то и на стандарты целиком.
12. GrishaDm - 17 Декабря, 2011 - 18:28:59 - перейти к сообщению
tuareg пишет:
Может мы просто по разному это понимаем??? Но если скрипт получил содержание файла переправить его кому-то проблем не составляет.

Да не составляет, но проблема в том как он его получил. На стандартной связке html+php+javascript пока рабочий кроссбраузерно только один вариант:
1. Пользователь выбрал файл и отправил его на сервер.
2. Скрипт на сервере извлёк данные из файла и передал их на клиент.
3. Скрипт на клиенте "получил содержание файла".
Так вот ещё раз что именно хочется:
1. Пользователь выбрал файл и скрипт на клиенте (на этом же пользователе) получил содержание файла.
Хочется не в смысле что я не знаю точно что такое возможно - возможно это, знаю точно - хочется сделать кроссбраузерную заготовку для подобных задач и потом её везде использовать в подобных ситуациях.
13. tuareg - 17 Декабря, 2011 - 19:18:20 - перейти к сообщению
Выложите решение хотя для одного браузера, а тут уже помогут.
Js не может может читать файлы на клиенте===> flash.
Я понимаю, что Вы хотите.
Да и потом я так прикинул. Надо 20 строчек прочитать, а я гружу 100 ==> мне надо выбрать 20, построить список и т.д(я пример привел типа Excel) причем учитывая, что операции по вставке DOM на js самые тяжелые
Вы думаете это будет проще???
(Добавление)
Выложите решение хотя для одного браузера, а тут уже помогут.
Js не может может читать файлы на клиенте===> flash.
Я понимаю, что Вы хотите.
Да и потом я так прикинул. Надо 20 строчек прочитать, а я гружу 100 ==> мне надо выбрать 20, построить список и т.д(я пример привел типа Excel) причем учитывая, что операции по вставке DOM на js самые тяжелые + чтобы js сформировал страницу от flash нужен тоже скрипт.
Вы думаете это будет проще???

 

Powered by ExBB FM 1.0 RC1