Загрузка файлов на серверСайт автора: //proger.ru ( http://webscript.ru///proger.ru ) КонкретноЗдесь будет рассмотрена загрузка файлов на сервер по протоколу HTTP. Рассмотрим два варианта конфигурации PHP:
Upload файлов при register_globals=OnНапишем HTML форму для отправки файла на сервер. Содержание формы (файл upload.html): После того как пользователь выбрал имя файла и нажал кнопку Загрузить, PHP помещает загружаемый файл во временную директорию указанную в параметре upload_tmp_dir файла php.ini. В этой директории этот файл будет храниться только во время запроса! После запроса PHP удалит этот временный файл. Поэтому загружаемый файл нужно куда-нибудь переместить (если он вам понадобиться в дальнейшем). Явно удалить временный файл можно функцией unlink(string filename). Здесь рассмотрим загрузку текстового файла и вывод его содержимого. Скрипт обработки: <?php Пояснения: $myfile - имя временного файла, в котором находятся загруженные данные; Когда пользователь отправляет форму, PHP автоматически определяет ещё несколько переменных: $myfile_name - имя файла на компьютере компьютере пользователя; $myfile_type - MIME-тип файла. $myfile_size - размер файла в байтах. При загрузке текстовых файлов переменная $myfile_type = "text/plain", при загрузке изображения gif переменная $myfile_type = "image/gif". При register_globals=On можно пользоваться массивом $_FILES[].
Upload файлов при register_globals=OffВ этом случае PHP формирует массив $_FILES[]. В этом массиве храниться вся информация о всех загружаемых файлах. В нашем случае структура этого массива следующая: $_FILES["myfile"]["tmp_name"] - Имя
временного файла PHP код для обработки формы: <?php При загрузке можно проверять размер файла ($myfile_size) и если его размер превышает требуемый, то вывод файла не производить. Значения $_FILES["myfile"]["error"]: 0 - ошибок не было, файл
загружен. Если вам необходимо сохранить загруженный файл, то это можно сделать с помощью функций:
Функция copy() копирует файл source в место назначения dest. Функция move_uploaded_file() перемещает загруженный файл filename в место назначение указанное в параметре destination. Ещё хочется отметить что при одновременной загрузке нескольких файлов т.е. когда HTML форма содержит:
<INPUT NAME="myfile1" TYPE="file"> массив $_FILES[] будет иметь следующую структуру: $_FILES["myfile1"]["tmp_name"] - Имя
временного файла 1 $_FILES["myfile2"]["tmp_name"] - Имя
временного файла 2 $_FILES["myfile3"]["tmp_name"] - Имя
временного файла 3 это пример для одновременной загрузки трёх файлов. Таким же образом можно загружать и двоичные файлы, например файлы картинок gif, jpeg и т.д. У меня все двоичные файлы загружались без повреждений (без глюков), но по словам Дмитрия Бородина ( //php.spb.ru ( http://webscript.ru///php.spb.ru )) возможно, что при загрузке двоичных файлов у вас возникнут проблемы. Файлы будут загружаться с перекодировкой. Вот часть статьи " Как делать UPLOAD файлов на сервер и о возможных глюках ( http://webscript.ru///php.spb.ru/php/upload.html )" сайта //php.spb.ru ( http://webscript.ru///php.spb.ru ), которая возможно поможет вам устранить причину проблемы: ЦИТИРОВАНИЕ Попробуйте аплодить таким способом на сервер бинарные файлы. Скорее всего файлы окажутся "битыми": фотки не будут показываться, программы не
запустятся, архивы не распакуются. Текстовые файлы (почти точно) не
повредятся. Дело в том, что Русский Апач (ваш веб-сервер) перекодирует все подряд. Например, символ с кодом
0х00 он заменяет на пробел (символ с кодом
0х20). Чтобы выключить эту ненужную перекодировку, допишите в файл
http2d.conf из каталога Апача (/usr/local/apache) следующие строки. Если у вас нет доступа к этому файлу и админ сервера не может сделать это за вас, ткните его в эти строки. КОНЕЦ ЦИТИРОВАНИЯ Если вы заметили где-то ошибку,
то пожалуйста сообщите об этом на форуме ( http://webscript.ru///forum.proger.ru )
или напишите мне: |