GrishaDm предлагаете на *nix ставить денвер ?
попробуйте сначала потом отпишите что у вас выйдет...интересно ))
В каком это интересно месте я упомянул *nix? Или вы думаете что все хостинги на *nix? Обрадую вас - это не так - и скажу больше - если найдёте хоть один IIS под *nix, то потом потом обязательно отпишитесь ))
Может мы просто по разному это понимаем??? Но если скрипт получил содержание файла переправить его кому-то проблем не составляет.
Да не составляет, но проблема в том как он его получил. На стандартной связке html+php+javascript пока рабочий кроссбраузерно только один вариант:
1. Пользователь выбрал файл и отправил его на сервер.
2. Скрипт на сервере извлёк данные из файла и передал их на клиент.
3. Скрипт на клиенте "получил содержание файла".
Так вот ещё раз что именно хочется:
1. Пользователь выбрал файл и скрипт на клиенте (на этом же пользователе) получил содержание файла.
Хочется не в смысле что я не знаю точно что такое возможно - возможно это, знаю точно - хочется сделать кроссбраузерную заготовку для подобных задач и потом её везде использовать в подобных ситуациях.
GrishaDm
К счастью, общего решения этой проблемы нет. Почему к счастью? Потому что я, к примеру (и, думаю, Вы тоже, если задумаетесь) не имею ни малейшего желания сообщать сторонним сайтам то, какая структура данных у меня на локальном диске и как они хранятся. Эту информацию я предпочту оставить только самому себе.
Спасибо за ваше мнение. Но видимо я не совсем точно выразился в описании данной темы - сам путь к файлу нужен не конкретно мне, а javascript-программе у клиента на машине. Это не обязательно должен быть путь, а просто возможность скрипту произвести чтение данных из выбранного пользователем локального файла без отправки этого файла на сервер. Никто никому ничего не должен сообщать и это никому не нужно - короче нужно содержимое выбранного файла, а не данные о нём. И так как пользователь выбрал его сам - не вижу проблем с нарушением конфиденциальности. Используемая технология при этом мне безразлична, лишь бы была очень широко распространённой, доступной всем и кроссбраузерной.
Штатными силами только PHP и JS эта задача решения не имеет.
Это из собственного опыта или есть подтверждения тому от разработчиков наиболее распространённых браузеров или языка Javascript?
Ещё раз подчеркну - интересуют только кроссбраузерные решения - всякие возможности html5, реализованные в 1-2 браузерах да и то не всех версий и не под все ОС (например IE 9, который только Windows и только минимум Vista) - не интересуют. Да я встречал такие решения на flash и они точно кроссбраузерные (проверял в IE, FF, Chrome, Opera, Safari), требуют лишь плагина с поддержкой этой технологии, но не в готовом виде к применению к сожалению.
Всё ещё пользуетесь денвером? -Тогда мы идем к вам!
Скажу из практического опыта - некоторым хостингах реально была бы польза от установки на них денвера - там сидят идиоты, которые не могут нормально настроить вэб-сервер даже на совершенно тривиальные операции и оттуда поэтому идёт массовый отток клиентов. Установив денвер, который полегче в настройке, такой хостер бы увеличил собственный доход (если уж он так экономит на техподдержке хостинга что туда кроме полных идиотов никто не идёт работать). Так что не списывайте денвер со счетов - для его применения в будущем наоборот представится огромная ниша, которая будет только расширяться.
а зачем тогда написал раз не рекомендуешь? (Добавление)
вопрос к профи - будет ли при каждой итерации выполняться ф-ция scandir?
Вопрос к "профи" - вот вы дали код а теперь проведите с ним следующий эксперимент - выберите директорию где более 10000 файлов и браузер Internet Explorer и запустите его. В лучшем случае из-за тега select такая страница зависнет и придётся снимать задачу. А в худшем вплоть до переустановки ОС. И вообще такое криворукое решение не достойно упоминания - надо выводить постраничным списком с навигацией и указанием сверху текущего пути без всяких select и делить на файлы и папки (папки делать, например, ссылками).
Завтра( уже сегодня) ответят более опытные товарищи. Но скорее всего flash. и то как обойти ограничение по политике безопасности. В FF даже эмуляция клика по input type="file" не работает
А так получается Вы хотите, чтобы скрипт(flash) мог прочитать все файлы на компе user-a. Это же даже не дыра в безопасности это "дырище"
С точки зрения логики не вижу здесь "дыр" - пользователь сам выбирает файл - как вариант ладно, допустим, скрипт не может знать пути на локальном компьютере - но ведь может же скрипт прочесть то из него информацию в массив? Смысл тогда какой в клиентском языке программирования если он даже такое не может? Тут просто следует употреблять термин не "дырище", а скорее "маразм" (у тех, кто такие ограничения вводил). Вот передача файлов на сервер по протоколу http - это реально "дырище" (ибо в момент изменения прав на файл и папку на запись страничка легко может вылететь, а права на запись так и останутся).
Спасибо за ваш ответ. Надеюсь где-то всё же есть готовые решения.
Если такое и возможно, в чем я сильно сомневаюсь. То смотреть надо в сторону флэша.
P.S А кстати в чем проблема? Загрузили файл через iframe. На сервере получили содержимое этого файла(его можно даже не копировать и не загружать ни в какую папку используя tmpl) отдали приложению. Серверная часть отработала, временный файл удалился. По идее все.
Все тут описанное ИМХО. Я буду рад если меня поправят
Да проблем предостаточно. Например:
1. Зачем мне грузить на сервер файл огромный файл нагружая линию, когда мне нужна только небольшая часть информации из него?
2. Файл может превышать ограничения в настройках web-сервера или php по размеру, однако та часть что мне нужна, их не превышает.
3. Сервер может быть перегружен - зачем я ещё буду нагружать его дополнительными задачами? Проще свернуть готовый массив через тот же самый JSON и передать.
4. При обработке информации многие ошибки при работе скрипта в разы проще "отловить" на клиенте, чем на сервере. Хотя бы уже потому что у хостера не всегда известны все настройки, он их может менять без предупреждения, варнинги и нотайсы могут просто не выводиться в лог.
Теперь насчёт флэша - если там есть готовое решение - тогда я им, конечно, воспользуюсь (но пока встречал только поделки с которыми надо разбираться), но "изобретать велосипед" самому - увольте. Собственно именно поэтому и создал тему - кто встретит готовые формы с удобным выбором файла и передачей его на клиенте в javascript - пишите. Если что-либо встречу достойное вашего внимания сам - напишу сюда обязательно.
Вставлю также пару примеров где это может потребоваться:
а) Менеджер загружает прайс-лист в интернет-магазин из эксель или 1с, который сразу конвертируется и передаётся скриптом на сервер для загрузки там в базу данных. Я встречал рабочие проекты, где это сделано через флэш и очень прилично, но с ними надо сидеть и разбираться. В результате конвертирования исходный прайс-лист уменьшался по размеру в 10-100 раз до передачи на сервер.
б) В предыдущем примере вместе с прайс-листом шли фотографии и картинки с товарами, но они не годились для сайта. Их конвертировал скрипт на клиенте и создавал изображения товаров для основного показа и для предварительного просмотра. В другом случае они были вставлены в сам прайс-лист и скрипт их оттуда просто "вытаскивал". Здесь объёмы при передаче уменьшались не так сильно, как в предыдущем примере, но зато проблемы в работе скрипта легче диагностировались и скрипт быстро был "доведён до ума". Изображения грузились естественно на сервер не в виде файлов, а заносились в базу данных (не только из соображений конфиденциальности, но и безопасности).
Вот вкратце что за проблема.
Хотелось бы просто с помощью связки html-javascript-php выбирать локальный файл как это делается в html-теге input type='file' и помнить его полный путь на машине клиента (чтобы javascript-программа обработала его и передала результат на сервер). Но в целях безопастности в браузерах пути локальных файлов не запоминаются, а загружать этот файл на сервер не хотелось бы.
У этой задачи есть пути решения (например через подключение невидимого на экране flash-объекта или через загрузку файла на сервер с последующей обработкой, через создание собственного окна меню выбора файла и т. д.), но они не очень удобны и требуют много усилий для их применения. А хотелось бы чтобы скрипт на этой же вэб-странице после выбора файла пользователем в форме по событию submit 1) находил данный файл 2) читал его, скажем, в массив 3) проделывал с прочитанным содержимым какие-либо операции 4) отсылал результат в виде содержимого текущей формы на сервер. Предположим что проблем с доступом на чтение у данного файла нет. Естественно интересуют только кроссбраузерные решения. Как вариант подойдут решения с использованием технологии ajax (хотя в этой задаче я сомневаюсь что они чем-либо помогут).
Лично для меня наибольшую трудность здесь в реализации представляет проблема использования html-тега input='file' не для загрузки файла на сервер, а для выбора локального файла с запоминанием и использованием в javascript-коде его полного пути. Если кто встречал простые готовые решения подобной задачи - пожалуйста подскажите.
Решил проблему. Оказывается enctype='multipart/form-data' должно быть обязательно в html-файле (а не в js-файле). Ибо тогда оно работает во всех браузерах, кроме IE. А тому, кто пишет что "никакого отношения не имеет к input'у" я бы предложил не писать подобные посты очень хорошо не подумав, дабы не засорять форум.
Ваш warning не имеет никакого отношения к input'у. Ищите в той строке, в которой этот warning появился. В вашем случае вторым аргументом функции array_key_exists является не массив.
Мой warning имеет отношение к input'у.
Скорее не "не массив", а "не элемент массива". Предупреждение появляется когда скрипт пытается получить код ошибки из массива $_FILES, а он пустой в IE. Вот я и пытаюсь понять почему.
Если закомментировать extension обратно, то всё хорошо становится?
Да, становится.
JustUserR пишет:
Действительно в целях переносимости лучше не копировать dll-файлы в каталог windows - но в таком случае надо убедиться что соответствующая переменная окружения PATH и include_path содержат верные пути по каталогов с библиотеками
Спасибо, но топик в данном случае не пригодился. Все библиотеки есть. Специально все их переносил в одну папку, а всё равно вылетает. Вот лог (когда зависает):
The Apache2.2 service is restarting.
Failed to restart the Apache2.2 service.
t: Received restart signal -- Restarting the server.
[Sun Jun 20 18:02:10 2010] [notice] Child 3964: Exit event signaled. Child process is ending.
[Sun Jun 20 18:02:11 2010] [notice] Child 3964: Released the start mutex
[Sun Jun 20 18:02:12 2010] [notice] Child 3964: All worker threads have exited.
[Sun Jun 20 18:02:12 2010] [notice] Child 3964: Child process is exiting (Добавление)
Ещё раз прошу - дайте пожалуйста рабочие версии библиотек php_mysql.dll и libmySQL.dll у кого PHP 5 версии и MySQL 5 версии? Чтоб сразу исключить проблемы с "кривым" дистрибутивом.