Загружать файлы используя список в PHP - PullRequest
0 голосов
/ 12 октября 2009

Я хочу загрузить файлы из списка в php.

Я могу сделать это, используя <input type="file">, который я нашел на http://www.tizag.com/phpT/fileupload.php

Но когда я изменяю это <input type="file"> на <select>

я пытаюсь таким образом

<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" />
<select name="uploadedfile" id = "fileName" size="3" style="width: 100%">
<option id = "uploadedfile" value="c:\text.txt">c:\text.txt</option>
</select>
<input type="submit" value="Upload File" />
</form> 

и код PHP остается одинаковым для обоих случаев

<?php
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['value']); 


if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['value']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

?>

не работает ........

С уважением Hemant

Ответы [ 2 ]

8 голосов
/ 12 октября 2009

Вы можете использовать <input type="file" /> только для загрузки файлов в целях безопасности. Эти типы ввода отображают окно выбора файла и позволяют пользователю выбрать файл безопасным способом. Разрешение серверу выбирать произвольные файлы для загрузки так, как вы пытаетесь это сделать, было бы грубым нарушением безопасности.

Например, скажем, я реализовал ваш вариант <select> (и это сработало). Я мог бы выбрать ваш файл паролей Windows для загрузки. Я мог бы выбрать все виды неприятных файлов, которые находятся в предопределенных местах.

В целом, ваш HTML имеет два элемента с одинаковым именем. Какой из них действительно будет отправлен на сервер, будет зависеть от вашего браузера и сервера. Вы действительно хотите только один элемент формы с тем же именем.

1 голос
/ 12 октября 2009

Я не уверен, как это должно работать, так как вы используете выпадающий список, чтобы попросить пользователя загрузить файл.

Выпадающие меню (выберите> опция), по моему опыту, не используются в качестве входных данных, кроме как для конкретных вариантов, например "синий" против "красный".

однако, вы столкнетесь с проблемами при настройке, потому что а) у вас первая опция файла за пределами элемента select и б) вы дали им обоим одинаковое имя, что означает, что когда php получает POST переменная, он собирается создать массив с двумя элементами с одинаковым ключом (если он даже доходит до этой точки).

Обновление

Прочитав ответ Мэтью, я замечаю c:/text.txt, которое вы указали в качестве значения. По его словам, это большое время нет. Теоретически вы можете скопировать весь жесткий диск (конечно, очень медленно) или использовать AJAX, который даже не спрашивает пользователя, согласны ли они с загрузкой и получает что-нибудь на компьютере.

Я подумал, что вы как-то предлагали пользователю возможность «загрузить» какой-то общий файл, уже находящийся на сервере, потому что у него не было ничего, что они могли бы использовать на своем конце.

...