160 likes | 299 Views
Цель темы –сформировать представление о технологии работы с файлами на Web -сервер через интерфейсы пользователей портала. Тема 5 Организация файлового обмена с электронным порталом. Включение файлов в документ Создание файлов и работа с ними Загрузка файлов на сервер Работа с каталогами
E N D
Цель темы –сформировать представление о технологии работы с файлами на Web-сервер через интерфейсы пользователей портала Тема 5 Организация файлового обмена с электронным порталом Включение файлов в документ Создание файлов и работа с ними Загрузка файлов на сервер Работа с каталогами Корректная работа с файлами Оптимизация графических файлов Разработка электронного портала
1. Включение файлов в документ Протокол HTTP не поддерживает сохранение состояния, поэтому файлы в Web-приложениях играют важную роль как средства хранения информационных данных между сеансами Путь к включаемому файлу: относительный или от корня web-сервера: /home/proba/www/second.php При сетевом пути – включается результат работы скрипта include() и require() – включение файла в PHP-скрипт <?php include ("second.php"); ?> Подавление ошибок: @include() – скрипт не останавливается include_once() и require_once() - позволяют включить файл в документ только один раз
2. Создание файлов и работа с ними Путь к файлу (абсолютное или относительное имя файла) Любая операция с файлами предваряется операцией открытия файла при помощи функции fopen(): fopen(filename, mode) r — открыть файл только для чтения; r+ — открыть файл для чтения и записи; w— создать новый пустой файл только для записи; w+— создать новый пустой файл для чтения и записи; а— открыть файл для дозаписи; а+ — открыть файл для дозаписи и чтения данных; В случае удачного открытия файла функция fopen () возвращает дескриптор файла, в случае неудачи — false, например: $fd = fopen("file.txt","w"); print($fd); Закрытие файловвыполняется функцией fclose (fd):
Запись в файл количество символов в строке, которые должны быть записаны Записываемая в файл строка Запись в файл осуществляется функциями fputs () и fwrite () Дескриптор файла fputs(fd, str [, length]) <?php // Создаем файл для записи $fd = fopen ("file.txt","w"); // Записывааем в файл fwrite($fd, "Привет, студенты!"); //Закрываем файл fclose ($fd); ?> Эта функция возвращает строку длиной length байтов Дескриптор файла Чтение содержимого открытого файла можно осуществить при помощи функции fread(fd, length) filesize($filename)– количество байт в файле
Получение массива из файла Функция file() записывает содержимое файла в массив (каждая строка – элемент массива) Чтение и вывод содержимого файла по строкам: Массив <?php $content = file("file.txt"); foreach($content as $line) echo "$line<br>"; ?> Подсчёт количества строк в файле(в массиве): <?php $content = file("file.txt"); echo count($content); ?>
Основные атрибуты файла bool file_exists(string filename) – проверка существования файла int filesize(string filename) – размер файла в байтах string filetype(string filename) – тип файла: file - обычный файл, dir – каталог и т.п. Удаление файла:bool unlink(string filename) <?php if ($fu = @unlink("file.txt")) print "файл удален" ; else echo "Ошибка удаления файла"; ?>
3. Загрузка файлов на сервер Для загрузки файлов на сервер необходима HTML-форма и PHP-скрипт для ее обработки <html><body><h2><b> Форма для загрузки файлов </b></h2> <form action="upload.php" method="post" enctype="multipart/form-data"> <input type="file" name="filename"><br> <input type="submit" value="Загрузить"><br> </form> </body></html> Обязательный параметр
Двумерный массив $_FILES Характеристики загруженного файла доступны через двумерный массив $_FILES : $_FILES["filename"] ["name"] — содержит исходное имя файла на клиентской машине; $_FILES["filename"] ["size"] — содержит размер загруженного файла в байтах; $_FILES ["filename"] ["type"] — MIME-тип файла; $_FILES [ "filename" ] ["tmp_name"] —имя временного файла, в который сохраняется загруженный файл; $_FILES ["filename"]["error"] – код ошибки, появившейся при загрузке <?phpif (copy ($_FILES["filename"] ["tmp_name"], "temp/".$_FILES["filename"] ["name"])) { echo("Файл успешно загружен <br>"); } else { echo("Ошибка загрузки файла"); } ?> После завершения работы скрипта временный файл будет удален! Необходимо его скопировать в другое место до завершения работы скрипта
Ограничение объема загружаемого файла if($_FILES["filename"]["size"] > 1024*3*1024) { exit("Размер файла превышает 3 мегабайта"); } Значение директивы upload_max_filesize можно изменить в конфигурационном файле php.ini Максимальный размер загружаемого файла можно также задать при помощи директивы upload_max_filesize, значение которой по умолчанию равно 2 Мбайт: if($_FILES["filename"]["size"] > upload_max_filesize) Максимально допустимый размер загружаемого файла в байтах можно передавать из той же формы при помощи скрытого поля с именем MAX_FILE_SIZE <input type="hidden" name="MAX_FILE_SIZE" value="5000" >
4. Работа с каталогами Создание каталога производится с помощью функции mkdir(): Права на каталог в восьмеричном виде Строка с именем каталога bool mkdir(string dirname, int mode) <?php if(mkdir("test", 0700)) echo "Каталог создан"; else echo "Ошибка создания каталога"; ?> Для смены прав доступа используется функция chmod(), которая имеет следующий синтаксис: bool chmod(string filename, int mode) Удаление каталога: bool rmdir(string dirname) Функция rmdir () удаляет только пустые каталоги, для уничтожения непустого каталога необходимо предварительно удалить все файлы, содержащиеся в нем
4. Работа с каталогами Открытие, чтение и закрытие каталога производится с помощью функций: int opendir(string path) string readdir(int dir) void closedir(dir) Пример вывода содержимого текущего каталога : Открываем текущий каталог В цикле выводим содержимое каталога <?php$dir = opendir("."); while (($file = readdir($dir)) !== false) echo "$file<br>"; closedir($dir); ?> Закрываем каталог Тип сотировки: 1-по убыванию array scandir (string dir [, int sortingr_order])
Алгоритм корректной загрузки файла на сервер 5. Корректная работа с файлами Форма <input type="file" name="filename"> $dir=opendir("path"); while(($file=readdir($dir))!==false) { if($file== $_FILES["filename"] ["name"]) } сlosedir($dir); Загрузка параметров в массив $_FILES if($_FILES["filename"]["size"] > 1024*30) Проверка объема файла ошибка if (copy ($_FILES["filename"] ["tmp_name"], "path/".$_FILES["filename"] ["name"])) Проверка имени файла в каталоге ошибка Проверка загрузки файла ошибка Файл успешно загружен
Прием от клиента текстовых данных и рисунка Форма с текстовыми полями и полем загрузки файла Запись данных в массивы $_POST и $_FILES Корректная загрузка файла при помощи элементов массива $_FILES Запись данных в таблицы (в том числе и путь к файлу)
Удаление файла рисунка Проверка наличия удаляемого файла -file_exists(), а затем удаление - unlink() с проверкой исполнения Удаление записи о файле в БД Обновление файла рисунка Проверка наличия удаляемого файла, а затем удаление с проверкой результата Корректная загрузка нового файла Обновление записи о файле в БД
6. Оптимизация графических файлов Для работы с растровыми изображениями предназначенная библиотека GD <?phpphpinfo();?> Пример раздела gd при наличии графической библиотеки gd
Создание уменьшенных изображений Для создания уменьшенных изображений используется функцияimagecopyresampled(), идентификатор нового изображения bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h ) идентификатор исходного изображения координаты (x,y) верхнего левого угла в новом изображении координаты (x,y) верхнего левого угла копируемого блока существующего изображения новые соответственно ширина и высота копируемого блока соответственно ширина и высота исходного копируемого блока Определяются параметры изображения (высота и ширина) Читается в память изображение <?php $size = getimagesize(original.jpg); $source = imagecreatefromjpeg(original.jpg); $target = imagecreatetruecolor(100,60); imagecopyresampled($target,$source,0,0,0,0,100,60,$size[0],$size[1]); imagejpeg($target, small.jpg, 100); ?> Создается новое пустое изображение в памяти Копируется изображение с преобразованием размера Результат выводиться в jpg файл с наивысшим качеством 100