Загрузка файлов на сервер
Страница 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).

 
« Предыдущая статья   Следующая статья »