Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Загрузка файлов на сервер


Автор: NosfBlazE 2.10.2010, 18:49
Здравствуйте. Просмотрел на форуме все подобные темы, но так и не нашел решения. Объясню свою проблему на элементарном примере.

Используется denwer. Есть 2 файла, лежащие в 1 каталоге file (т.е. запуск в браузере имеет вид http://localhost/file/index.php):
index.php
Код

//...
<form action="script.php" method="post" name="switch_f" target="_parent" enctype="multipart/form-data">
    <p>Выберите текстовый файл:</p>
    <p><input type="file" name="fileToUpload" /></p>
    <p><input type="submit" name="submit" value="Выполнить" /></p>
</form>
//...



script.php
Код

//...
$fname = $_FILES['fileToUpload']['tmp_name'];
//...


Далее выбираем какой-нибудь файл с Рабочего стола и ... при работе возникает ошибка, что файл не найден, т.е. фактически не был загружен на сервер. Если же положить этот файл в каталог file рядом с .php файлами и затем уже указать в форме этот путь, то все работает отлично.
Вот и возникает вопрос: почему так происходит? о_О Ведь должна была произойти загрузка в какой-то временный каталог, после нажатия на кнопку "Выполнить". Разве нет?

P.S. Проблема возникла, когда заметил, что mysql бд не заполняется. Фактически мне надо, чтобы пользователь на клиентской части указал в соответствующей форме путь к файлу, который лежит где-то там в его какой-то локальной директории, затем у меня на сервере скрипт кидает уже файл в БД. А так получается, что пользователю надо было бы кинуть файл на сервер, затем указать путь к файлу на сервере... Что в действительности не так, а, значит, я где-то ну очень сильно туплю. smile Надеюсь на вашу помощь.

Автор: ayax2005 2.10.2010, 21:09
Простите за возможно тупой вопрос - но что вы делаете в этой строчке? $fname = $_FILES['fileToUpload']['tmp_name'];
Сохраняете имя временного файла?
Я конечно не претендую на оригинальность, но где команда copy, которая скопирует временный файл из директории tmp в хранилище?

Автор: NosfBlazE 2.10.2010, 21:26
Вопрос не тупой. smile Это своего рода проверка: имею я доступ к файлу или нет, т.е. был ли он загружен. Согласен, красивее было бы поставить условие вроде if( !empty( $_FILES['fileToUpload']['tmp_name'] ) ) ... Но суть не меняется.
Вы имеете в виду:

Код

copy($_FILES["fileToUpload"]["tmp_name"], "z:/UploadedFiles/temp/".$_FILES["fileToUpload"]["name"]);

Но мне не понятен смысл этой функции, которая все равно выдает ту же ошибку, что временного файла то и нет и он никуда загружен не был. =/ Поясните тогда, пожалуйста, принцип работы с ней.

P.S. Нужно просто, чтобы файл с компа пользователя попал в mysql бд сервера. Проблема в отсутствии какого-нибудь временного файла в $_FILES. Просто, скорее всего, я не в ладах с основными принципами передачи файла на сервер, поэтому и привел простенький пример, чтобы понять хотябы это. smile С базой уж разберусь сам.))

Автор: ayax2005 2.10.2010, 21:35
Проверку лучше выполнять не так. Обычно время хранения временного файла жёстко ограничено, поэтому я проверяю выполнение самой операции copy. Но это лирика.

У вас denwer, насколько я понял, и это сильно смущает. Обычно в папке htdocs/ или на её уровне находится папка tmp или temp - она используется как раз для хранения временных файлов из аплоада.
Во первых ,проверьте что она есть.
Во-вторых, запустите phpinfo() и проверьте, что написано в строке upload_tmp_dir.
И, наконец, проверьте права для этой папки.

Автор: NosfBlazE 2.10.2010, 23:08
Пасиба за помощь. smile Вручную переписал пути для временных файлов, и все заработало.

Автор: Muerto 3.10.2010, 00:35
не актуально...  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)