Страница 3 из 3 ЦИТИРОВАНИЕ Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не запустятся, архивы не распакуются. Текстовые файлы (почти точно) не повредятся. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл httpsd.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки.
color=#800000><Location /> CharsetRecodeMultipartForms Off </Location>
Строку CharsetRecodeMultipartForms Off можно добавлять в разные места (один раз). Если вы совсем начинающий пользователь и не решите сами, куда писать эту строку, будьте аккуратнее при решении задачи методом тыка. КОНЕЦ ЦИТИРОВАНИЯ Сохранение загружаемого файла на сервереВыше уже говорилось, что загружаемый файл помещается во временную директорию. В этой директории файл будет храниться только во время запроса, а после запроса PHP удалит временный файл. Чтобы сохранить загружаемый файл, его необходимо переместить в нужную директорию. Для этого в PHP есть специальная функция bool move_uploaded_file ( string filename, string destination). Второй параметр string destination должен содержать полный путь к файлу. Полный путь к файлу содержит: путь к домашней директории, путь к директории куда перемещать файл и имя самого файла. У меня путь к домашней директории выглядит так: /home/proger/.
Если вы не знаете путь к директории где лежат ваши файлы, то можно воспользоваться переменной $DOCUMENT_ROOT или $_SERVER["DOCUMENT_ROOT"]. Переменная $DOCUMENT_ROOT содержит путь к директории (обычно www) где лежат ваши HTML файлы. У меня $DOCUMENT_ROOT содержит следующее: /home/proger/www. Эта переменная зависит от конфигурации веб-сервера. Итак, HTML форма для выбора загружаемого файла:
color=#800000><html> <body> <FORM ENCTYPE="multipart/form-data" ACTION="myup.php" METHOD=POST> Выберете файл: <INPUT NAME="myfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Загрузить"> </FORM> </body> </html>
Напишем скрипт (файл myup.php), который будет сохранять загружаемый файл на сервере под именем которое соответствует имени этого файла на компьютере пользователя.
Скрипт обработки: <?php // Загрузка файла на сервер и его сохранение
// Если upload файла if(isset($_FILES["myfile"])) { $myfile = $_FILES["myfile"]["tmp_name"]; $myfile_name = $_FILES["myfile"]["name"]; $myfile_size = $_FILES["myfile"]["size"]; $myfile_type = $_FILES["myfile"]["type"]; $error_flag = $_FILES["myfile"]["error"];
// Если ошибок не было if($error_flag == 0) { print("Имя файла на нашем сервере (во время запроса): ".$myfile."<br>"); print("Имя файла на компьютере пользователя: ".$myfile_name."<br>"); print("MIME-тип файла: ".$myfile_type."<br>"); print("Размер файла: ".$myfile_size."<br><br>");
// Сохранение файла (Перемещаем файл в нужную директорию) $uploaddir = $_SERVER["DOCUMENT_ROOT"]."/up/"; // Дир-я куда перемещать файл
if(move_uploaded_file($myfile, $uploaddir.$myfile_name)) { print("Файл сохранён"); } else { print("Ошибка"); }
} } ?> У меня данный скрипт сохраняет загружаемый файл в директорию: /home/proger/www/up/.
В принципе тут всё просто. Самое главное это указать правильный путь к файлу (второй параметр функции move_uploaded_file). |