2012-02-13 3 views
0

Итак, у меня есть форма, которая передает файл на мой сервер. Я заинтересован в том, чтобы отправлять только полное имя файла на сервер. В настоящее время мой код выглядит следующим образом:Как передать полное имя файла через веб-форму?

<form action="upload.php" method="POST" > 
    <table align="center"> 
     <tr> 
      <td align="right"> 
       Select your file to upload: 
      </td> 
      <td> 
       <input name="userfile" type="file" size="50"> 
      </td> 
     </tr> 
    </table> 
    <table align="center"> 
     <tr> 
      <td align="center"> 
       <input type="submit" name="submit" value="Upload image" /> 
      </td> 
     </tr> 
    </table> 
</form> 

Когда форма переходит к upload.php, значение я получаю за $ _POST [ «UserFile»] является «имя» файла я вручая вверх. Я ищу, чтобы получить полный путь из этого поля, а не только имя файла. Интересно, есть ли у кого-нибудь рекомендации для клиентского файлового браузера, который может передать это назад, или, возможно, другой способ оценить эту форму для получения этих данных, я был бы очень признателен. Я попытался добавить 'enctype = "multipart/form-data" в определение формы, и действительно удивительно то, что я не получаю никакой информации о форме на моей странице загрузки - это совершенно другая проблема. В любом случае, спасибо за любую помощь.

Редактировать

Elaborate на мой вопрос ... Я пытаюсь загружать большие файлы на веб-сервер. HTTP Forms ломаются после 100 мегабайт или кто знает. FTP трудно управлять на 30 системах с 10 различными пользователями, которые не имеют понятия, как определить, почему их клиент не может подключиться. Я пишу веб-форму для загрузки файлов на свой сервер, когда эти люди с ними работают. Я пытаюсь найти решение для этого. Сценарий, приведенный выше, не предполагается передать мой полный путь к файлу следующий сценарий:

<? 
set_time_limit(300); 

var_dump($_FILES); 
var_dump($_POST); 
$filep=$_POST['userfile']; 
$name=$_POST['userfile']['name']; 

echo($filep); 
echo($name); 
$paths="test"; 
$ftp_server="localhost"; 
$ftp_user_name="digitaljedi"; 
$ftp_user_pass="dontworryaboutit"; 

// set up a connection to ftp server 
$conn_id = ftp_connect($ftp_server); 

// login with username and password 
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// check connection and login result 
if ((!$conn_id) || (!$login_result)) { 
    echo "FTP connection has encountered an error!"; 
    echo "Attempted to connect to $ftp_server for user $ftp_user_name...."; 
    exit; 
} else { 
    echo "Connected to $ftp_server, for user $ftp_user_name"."....."; 
} 

// upload the file to the path specified 
$upload = ftp_put($conn_id, $paths.'/'.$name, $filep, FTP_BINARY); 

// check the upload status 
if (!$upload) { 
    echo "FTP upload has encountered an error!"; 
} else { 
    echo "Uploaded file with name $name to $ftp_server "; 
} 

// close the FTP connection 
ftp_close($conn_id);  

?> 

Если добавить тип кодировки в форме, я в конечном итоге с данными NO $ _POST, и данные $ _FORM в загрузке .php, а скорее, неопределенные индексы в «файл пользователя». Когда он сидит; Если я загружу, скажите ... 'C: \ users \ digitaljedi \ wtf.txt' - я заканчиваю с 'wtf.txt' на другом конце.

.....

Я просто пытался регулировать мой PHP использовать статический путь, а не один из формы, и я в конечном итоге не в состоянии открыть файл в любом случае. По-видимому, ftp_put использует файловую систему сервера, что полностью отрицает всю мою теорию.

Теперь, что я хочу знать, так это; есть ли решение для загрузки больших файлов через веб-страницу? Я нашел флеш-загрузчик, но он, кажется, ограничен 100 мегабайтами (документация говорит, что это все позволяет вспышку). Это становится больше проблем, чем того стоит.

+0

Полный путь на этом этапе - это имя файла. Что вы пытаетесь достичь? –

+0

http://stackoverflow.com/questions/81180/how-to-get-the-file-path-from-html-input-form-in-firefox-3 и http://stackoverflow.com/questions/1676070/input-type-file-ie-дает-full-path-ff-дает-only-filename-or-directory-bro –

+0

Пока я пытаюсь избежать встречного заграждения «вы не должны делать это, как это, - я предположим, если вы должны знать - я пытаюсь обойти ограничения загрузки файла HTTP. Для этого я пытаюсь разрешить пользователю передать полное имя файла моему скрипту php, а затем загрузить его через ftp в том же скрипте. Есть много сценариев «ftp», которые плавают вокруг, но ни один из них не работает безупречно. Я нашел пример на google (который был легко самым прямым), который передал мне (почти точно) вышеприведенную форму и небольшой фрагмент php, но по какой-то причине я не получаю данные – DigitalJedi805

ответ

2

Вы загружаете файл:

Во-первых, в вашей форме, представить его с <form> как:

<form enctype="multipart/form-data" action="uploader.php" method="POST"> 

Во-вторых, использовать переменную $ _FILES!

$_FILES['name_of_file_field']['name'] 

Это дает оригинальное имя файла - изменить name_of_file_field совпадать с именем поля ввода файла, вы использовали userfile так изменить его к этому.

Если они загружают файлы, 100MB +, то просто изменить ограничение размера памяти, чтобы принять больше размера файлов:

// Set the timeout to be longer to allow the file to upload, a value in seconds (3600 = 1 hour) 
set_time_limit(3600); 

// Set these amounts to whatever you need (1M = 1MB) 
ini_set("post_max_size", "1000M"); 
ini_set("upload_max_filesize", "1000M"); 

// Generally speaking, the memory_limit should be higher than your post size. So make sure that's right too. 
ini_set("memory_limit", "1100M"); 
+0

Спасибо, MrJ, вы были наиболее полезны до сих пор, однако у меня все еще есть проблема с моей формой, не передающей правильные данные в файл upload.php. Моя форма выглядит следующим образом:

<входной тип = "отправить" имя = "отправить" значение = "Загрузить изображение" />
И мой PHP выдает следующее сообщение об ошибке: Примечание: Undefined индекс: UserFile в D: \ XAMPP \ HTDOCS \ FTP \ upload.php на линии 12 Примечание: Undefined индекс: UserFile в D: \ XAMPP \ HTDOCS \ FTP \ upload.php на линии 13 - как ссылочных $ _FILES [ ''] UserFile – DigitalJedi805

+0

Спасибо вам @MrJ - Я возникла проблема с моей формой загрузки, поэтому этот ответ был полезен для меня. Оказывается, я забыл добавить в тег формы enctype = "multipart/form-data". Я должен добавить к вашему ответу, что лучший способ тестирования загрузки файлов - это распечатать переменную загрузки сервера, например: print_r ($ _ FILES); –

+0

Да, 'print_r ($ _ FILES)' всегда полезно - особенно если вы укажете 'input file' другое имя и забудьте изменить его в PHP! – MrJ

Смежные вопросы