Тема Тема 55Организация файлового обмена с Организация файлового обмена с электронным порталомэлектронным порталом
1.Включение файлов в документ2.Создание файлов и работа с ними3.Загрузка файлов на сервер4.Работа с каталогами5.Корректная работа с файлами6.Оптимизация графических файлов
Цель темы –сформировать представление о технологии работы с файлами на Web-сервер
через интерфейсы пользователей портала
1
Протокол HTTP не поддерживает сохранение Протокол HTTP не поддерживает сохранение состояния, поэтому файлы в Web-приложениях состояния, поэтому файлы в Web-приложениях играют важную роль как средства хранения играют важную роль как средства хранения информационных данных между сеансами информационных данных между сеансами
include() и require() – включение файла в PHP-скрипт
Подавление ошибок: @include() – скрипт не останавливается
<?phpinclude ("second.php"); ?>
<?phpinclude ("second.php"); ?>
include_once() и require_once() include_once() и require_once() - позволяют - позволяют включить файл в документ только один развключить файл в документ только один раз
Путь к включаемому файлу:относительный
или от корня web-сервера: /home/proba/www/second.php
При сетевом пути – включается результат работы скрипта
Любая операция с файлами предваряется операцией Любая операция с файлами предваряется операцией открытия файла при помощи функции fopen(): открытия файла при помощи функции fopen():
fopen(filename, mode)
Закрытие файлов выполняется функцией fclose (fd):
r — открыть файл только для чтения; r+ — открыть файл для чтения и записи; w— создать новый пустой файл только для записи; w+— создать новый пустой файл для чтения и записи; а— открыть файл для дозаписи; а+ — открыть файл для дозаписи и чтения данных;
r — открыть файл только для чтения; r+ — открыть файл для чтения и записи; w— создать новый пустой файл только для записи; w+— создать новый пустой файл для чтения и записи; а— открыть файл для дозаписи; а+ — открыть файл для дозаписи и чтения данных;
В случае удачного открытия файла функция fopen () возвращает дескриптор файла, в случае неудачи — false, например:$fd = fopen("file.txt","w"); print($fd);
В случае удачного открытия файла функция fopen () возвращает дескриптор файла, в случае неудачи — false, например:$fd = fopen("file.txt","w"); print($fd);
Путь к файлу (абсолютное или относительное имя файла)
Запись в файл осуществляется функциями fputs () Запись в файл осуществляется функциями fputs () и fwrite () и fwrite ()
fputs(fd, str [, length])
Чтение содержимого открытого файла можно осуществить при помощи функции fread(fd, length)
<?php // Создаем файл для записи $fd = fopen ("file.txt","w"); // Записывааем в файл fwrite($fd, "Привет, студенты!"); //Закрываем файл fclose ($fd);?>
<?php // Создаем файл для записи $fd = fopen ("file.txt","w"); // Записывааем в файл fwrite($fd, "Привет, студенты!"); //Закрываем файл fclose ($fd);?>
Дескриптор файлаЗаписываемая в файл строка
количество символов в строке, которые должны
быть записаны
Дескриптор файла
Эта функция возвращает строку
длиной length байтов
filesize($filename)filesize($filename) – – количество байт в файле количество байт в файле
ФункцияФункция file() file() записывает содержимое файла в записывает содержимое файла в массив (каждая строка – элемент массива)массив (каждая строка – элемент массива)
Чтение и вывод содержимого файла по строкам:
<?php $content = file("file.txt"); foreach($content as $line) echo "$line<br>"; ?>
<?php $content = file("file.txt"); foreach($content as $line) echo "$line<br>"; ?>
Подсчёт количества строк в файле (в массиве):
<?php $content = file("file.txt"); echo count($content); ?>
<?php $content = file("file.txt"); echo count($content); ?>
Массив
bool file_exists(string filename) bool file_exists(string filename) – – проверка проверка существования файласуществования файла
<?php if ($fu = @unlink("file.txt")) print "файл удален" ; else echo "Ошибка удаления файла";?>
<?php if ($fu = @unlink("file.txt")) print "файл удален" ; else echo "Ошибка удаления файла";?>
Удаление файла: bool unlink(string filename)
int filesize(string filename) int filesize(string filename) – – размер файла в размер файла в байтахбайтах
string filetype(string filename) string filetype(string filename) – – тип файла: тип файла: file file - обычный файл- обычный файл, , dir dir – – каталог и т.п. каталог и т.п.
Для загрузки файлов на сервер необходима Для загрузки файлов на сервер необходима HTML-форма и HTML-форма и PHP-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>
<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"] – код ошибки, появившейся при загрузке
$_FILES["filename"] ["name"] — содержит исходное имя файла на клиентской машине; $_FILES["filename"] ["size"] — содержит размер загруженного файла в байтах; $_FILES ["filename"] ["type"] — MIME-тип файла; $_FILES [ "filename" ] ["tmp_name"] —имя временного файла, в который сохраняется загруженный файл;$_FILES ["filename"]["error"] – код ошибки, появившейся при загрузке
После завершения работы скрипта временный файл будет удален!
Необходимо его скопировать в другое место до завершения работы скрипта
После завершения работы скрипта временный файл будет удален!
Необходимо его скопировать в другое место до завершения работы скрипта
<?php if (copy ($_FILES["filename"] ["tmp_name"], "temp/".$_FILES["filename"] ["name"])) { echo("Файл успешно загружен <br>"); } else { echo("Ошибка загрузки файла"); } ?>
<?php if (copy ($_FILES["filename"] ["tmp_name"], "temp/".$_FILES["filename"] ["name"])) { echo("Файл успешно загружен <br>"); } else { echo("Ошибка загрузки файла"); } ?>
Максимальный размер загружаемого файла Максимальный размер загружаемого файла можно также задать при помощи директивы можно также задать при помощи директивы upload_max_filesizeupload_max_filesize, значение которой по , значение которой по умолчанию равно 2 Мбайт: умолчанию равно 2 Мбайт:
if($_FILES["filename"]["size"] > 1024*3*1024) { exit("Размер файла превышает 3 мегабайта"); } if($_FILES["filename"]["size"] > 1024*3*1024) { exit("Размер файла превышает 3 мегабайта"); }
if($_FILES["filename"]["size"] > upload_max_filesize)if($_FILES["filename"]["size"] > upload_max_filesize)
Значение директивы upload_max_filesize можно
изменить в конфигурационном файле
php.ini
Максимально допустимый размер загружаемого файла в байтах можно передавать из той же формы при помощи скрытого поля с именем MAX_FILE_SIZE
<input type="hidden" name="MAX_FILE_SIZE" value="5000" ><input type="hidden" name="MAX_FILE_SIZE" value="5000" >
Создание каталога производится с помощью Создание каталога производится с помощью функции функции mkdir(): mkdir():
bool mkdir(string dirname, int mode)
Удаление каталога: bool rmdir(string dirname)
<?php if(mkdir("test", 0700)) echo "Каталог создан"; else echo "Ошибка создания каталога"; ?>
<?php if(mkdir("test", 0700)) echo "Каталог создан"; else echo "Ошибка создания каталога"; ?>
Строка с именем каталога
Права на каталог в восьмеричном виде
Функция Функция rmdir ()rmdir () удаляет только пустые каталоги, удаляет только пустые каталоги, для уничтожения непустого каталога для уничтожения непустого каталога необходимо предварительно удалить все необходимо предварительно удалить все файлы, содержащиеся в нем файлы, содержащиеся в нем
Для смены прав доступа используется функция chmod(), которая имеет следующий синтаксис: bool chmod(string filename, int mode)
Пример вывода содержимого текущего каталога : :
11
Открытие, чтение и закрытие каталога Открытие, чтение и закрытие каталога производится с помощью функцийпроизводится с помощью функций: :
int opendir(string path)string readdir(int dir)void closedir(dir)
<?php $dir = opendir("."); while (($file = readdir($dir)) !== false) echo "$file<br>"; closedir($dir); ?>
<?php $dir = opendir("."); while (($file = readdir($dir)) !== false) echo "$file<br>"; closedir($dir); ?>
Открываем текущий каталогВ цикле выводим
содержимое каталога
Закрываем каталог
array scandir (string dir [, int sortingr_order])
Тип сотировки: 1-по убыванию
Форма <input type="file" name="filename">Форма <input type="file" name="filename">
Загрузка параметров в массив $_FILESЗагрузка параметров в массив $_FILES
Проверка объема файла
Проверка загрузки файла
Проверка имени файла в каталоге
ошибкаошибка
ошибкаошибка
ошибкаошибка
if($_FILES["filename"]["size"] > 1024*30)$dir=opendir("path");
while(($file=readdir($dir))!==false) {
if($file== $_FILES["filename"] ["name"]) }
сlosedir($dir);
Файл успешно загруженФайл успешно загружен
if (copy ($_FILES["filename"] ["tmp_name"], "path/".$_FILES["filename"] ["name"]))
Алгоритм корректной загрузки файла на серверАлгоритм корректной загрузки файла на сервер
Форма с текстовыми полями и полем Форма с текстовыми полями и полем загрузки файлазагрузки файла
Запись данных в массивы Запись данных в массивы $_POST $_POST и и $_FILES$_FILES
Корректная загрузка файла при Корректная загрузка файла при помощи элементов массива помощи элементов массива $_FILES$_FILES
Запись данных в таблицы (в том числе Запись данных в таблицы (в том числе и путь к файлу)и путь к файлу)
Проверка наличия удаляемого файла Проверка наличия удаляемого файла --file_exists()file_exists(), а затем удаление - unlink() с , а затем удаление - unlink() с проверкой исполненияпроверкой исполнения
Удаление записи о файле в БДУдаление записи о файле в БД
Проверка наличия удаляемого файла, а Проверка наличия удаляемого файла, а затем удаление с проверкой затем удаление с проверкой результатарезультата
Корректная загрузка нового файлаКорректная загрузка нового файла
Обновление записи о файле в БДОбновление записи о файле в БД
15
Для работы с растровыми изображениями предназначенная библиотека GD
GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Пример раздела gd при наличии графической библиотеки
gd
<?php phpinfo(); ?> <?php phpinfo(); ?>
16
Для создания уменьшенных изображений используется функция 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);?>
<?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