Сохранение пути к файлу, который пользователь выбирает из входного файла в качестве переменной сеанса, чтобы позже заполнить поле - PullRequest
2 голосов
/ 12 ноября 2009

Я разрабатываю скрипт на PHP для загрузки файлов в базу данных MySQL. Существуют различные вещи, которые необходимо выбрать в дополнение к фактическому файлу, который входит в запись базы данных. Сценарий должен быть спроектирован так, чтобы он проверял, чтобы были выполнены все правильные выборы, и если это не так, сценарий возвращается в состояние загружаемого файла со значениями, которые выбрал пользователь, все еще заполненными. Я выполнил это для окон выбора с использованием переменных сеанса, однако я не могу понять, как получить фактический путь ввода загрузки файла для публикации. Кажется, я могу только получить доступ к имени файла, а не к фактическому пути из массива $ _FILE. Я также пытался сделать следующее:

echo "<input type='hidden' name='MAX_FILE_SIZE' value='8000000'>";
echo "<input type='hidden' name='remote_file_path' value=''>";
echo "<input name='userfile'type='file'
      onchange='document.uploadForm.remote_file_path.value=this.value;'>";

Естественно, имя формы - «uploadForm». Это работает, но опять же при доступе к значению $ _POST ['remote_file_path'], я получаю только имя файла, а не путь. После некоторого расследования выясняется, что это функция безопасности, встроенная в Fire Fox. Я начинаю думать, что это невозможно.

Заранее спасибо.

Ответы [ 4 ]

4 голосов
/ 12 ноября 2009

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

Каждый раз, когда файл загружается на ваш сервер, перемещайте его в безопасное место, а также связывайте его с текущим сеансом или пользователем. Теперь, когда вы повторно отображаете форму, потому что пользователь допустил какую-то ошибку (или хочет что-то отредактировать), отобразите имя файла рядом с пустым полем файла. Таким образом, пользователь может видеть, какие файлы он уже загрузил. С помощью некоторого JavaScript вы можете дать пользователю возможность вычеркнуть имя файла, после чего они могут снова заполнить текстовое поле файла и отправить другой файл, который будет обработан на сервере. если поле файла пустое, ранее переданный файл будет считаться действительным и обработанным.

2 голосов
/ 12 ноября 2009

Вы не получаете полный путь к файлу (в некоторых браузерах) и не можете изменить значение <input type=file> (с помощью сценариев) ни в одном из них, поскольку эти действия создают проблемы безопасности.

0 голосов
/ 12 ноября 2009

Как уже говорили многие, это не проблема безопасности через HTTP. Когда вы загружаете изображение с локального компьютера, происходит то, что функция отключается и создает tmp_name для доступа к серверу.

Однако, если вы действительно хотите эту функцию, вы можете использовать чистую Java через апплет, чтобы получить локальный путь. Однако, что вы пытаетесь сделать, возможно, есть лучший способ сделать это, чем то, о чем вы думаете.

0 голосов
/ 12 ноября 2009

Вам не нужны скрытые поля, PHP проанализирует для вас опубликованные данные и представит их в массиве $ _FILES:

http://www.php.net/manual/en/features.file-upload.post-method.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...