
- •В.С. Романчик
- •Глава 2. Использование php.
- •Глава 3.
- •Введение
- •Возможности php.
- •Инструменты для разработки
- •Как php работает
- •Глава 1. Язык php Типы данных
- •Массивы и инициализация массивов
- •Объектно-ориентированное программирование в php Основные понятия ооп
- •Классы и Объекты
- •Конструкторы и деструкторы
- •Наследование классов и интерфейсов
- •Магические методы
- •Обработка ошибок
- •Ошибки php и директива error_reporting
- •Чтение и запись бинарных файлов
- •Работа с каталогами в рнр
- •MySql – сервер: бд1; бд2; бд3; бд4;
- •Язык запросов sql
- •Операция соединения.
- •Команды sql для создания баз данных и таблиц
- •Выборка данных из таблиц бд
- •Работа с MySql (сохранение данных в базе данных).
- •Работа с MySql занесение и получение данных из базы данных
- •Некоторые улучшения в организации работы с данными
- •Передача данных от клиента к серверу и от сервера клиенту
- •Клиентские методы http get, post, head
- •Обработка html-форм и передача переменных в скрипт.
- •Передача значений переменных по методу get
- •Ниже рассмотрен еще один пример передачи данных из клиентской формы на сервер по методу get
- •Передача данных на сервер по методу post
- •Php и обработка различных форм
- •Примеры обработки форм
- •Работа с e-mail
- •Отправка почты на php (Функция mail)
- •Cookies-наборы: сохраненное состояние
- •Сессии (Сеансы) Переменные сеанса
- •Отмена регистрации сеансовых переменных
- •Работа с сеансовыми переменными
- •Постоянные данные, использующие сеансы и cookie-наборы
- •Вывод графических данных с помощью рнр Основной способ создания изображений
- •Получение информации об изображении
- •Функции рисования прямых и кривых линий
- •Заливка изображений
- •Работа с палитрой изображения
- •Удаление и изменение цветов палитры
- •Создание прозрачности в изображениях
- •Рисование с помощью кистей
- •Использование специальных стилей для заливки
- •Использование шрифтов и вывод строк
- •Манипулирование и копирование изображений
- •Создаём графический информер на php
- •Слияние изображений с помощью gd
- •Включения удаленных файлов
- •Различные приложения и полезные скрипты на php
- •Пример. Определение типа и версии браузера
- •Генератор паролей на php
- •Время выполнения скрипта
- •Календарь
- •Загрузка файла от клиента на сервер
- •Работа с ftp на уровне php
- •Сбор статистики на php
- •Проверка ввода емайл
- •Чтение почты через Web-интерфейс
- •Разработка собственных листов рассылки
- •Рассылаем письма
- •Добавляем адреса в список рассылки
- •Редактирование адресов
- •Автоответчик
- •Почтовые функции в рнр
- •Задания для выполнения
- •Приложение 1. Протокол передачи гипертекстов http
- •Клиентские методы и заголовкиHttp
- •Указатель ссылки ("Referer")
- •Медиа-типы
- •Кодирование
- •Безопасность и авторизация
- •Кэширование содержимого http на стороне клиента
- •Http идентификация с php
- •Сжатие данных в протоколе http
- •Модель ajax: между загруженной в браузер страницей и сервером появляется прослойка - уровень ajax, который обеспечивает следующую последовательность выполнения приложения.
- •Класс xmlHttpRequest
- •Методы класса xmlHttpRequest
- •Свойства класса xmlHttpRequest
- •Создание экземпляра объекта xmlHttpRequest
- •Использование dom
- •Проблема с кешированием
- •Информируйте пользователя
- •Нет принципов написания кода
- •Аутентификация средствами php
- •Отделение клиентская части программы от серверной части и шаблоны
- •Использование шаблонов в php
- •Шаблоны подстановки
- •Создаем свои шаблоны в php
- •Теги, атрибуты, значения
- •Структура документа
- •Разрыв строки
- •Предварительное форматирование
- •Комментарии
- •Физическая и логическая разметка документа
- •«Физические» теги:
- •«Логические» теги:
- •Специальные символы
- •Графика
- •Формы html
- •Метатеги
- •Способы включения каскадных таблиц стилей
- •Синтаксис
- •Группирование
- •Наследование
- •Множественные классы.
- •Селекторы идентификаторов (id-селекторы).
- •Комментарии
- •Свойства шрифтов.
- •Свойства текста.
- •Представление документа в виде специальных областей – блоков
- •Отступы, поля, позиционирование.
- •Границы элементов.
- •Визуальные эффекты
- •Свойства списков
- •Свойства таблиц
- •Псевдоклассы
- •Псевдостили текста
- •Псевдоэлементы
- •Различные свойства
- •Css. Примеры
- •Типы данных
- •Ассоциированные массивы
- •Операторы
- •Подпрограммы
- •Приложение 11. Популярные веб-приложения и фреймворки
- •Фреймворки
Загрузка файла от клиента на сервер
Загрузка файлов может быть реализована при помощи специальной формы:
<!—appload.htm
<form enctype="multipart/form-data" action="appload.php.php" method="post">
<input name="userfile" type="file" />
<input type="submit" value="Загрузить" />
</form>
В приведенной форме параметр "action.php" - ссылка на PHP-скрипт. В атрибутах формы указано enctype="multipart/form-data", иначе загрузка файлов на сервер выполняться не будет. При нажатии на кнопку "Загрузить" появляется окно с перечнем файлов, из которых выбирается один загружаемый. Суперглобальный массив $_FILES содержит информацию о загруженном файле ‘userfile’:
Имя файла на компьютере клиента: $_FILES['userfile']['name']; Mime-тип файла: $_FILES['userfile']['type']; Размер в байтах принятого файла: $_FILES['userfile']['size'];
Временное имя, с которым файл был сохранен на сервере: $_FILES['userfile']['tmp_name']; Код ошибки, которая может возникнуть при загрузке файла: $_FILES['userfile']['error']
По умолчанию принятые файлы сохраняются на сервере в стандартной временной папке, если не задана другая директория при помощи изменения директивы upload_tmp_dir=/tmp конфигурационного файла php.ini. В следующем примере принимается и обрабатывается загруженный при помощи формы файл.
<?php //appload.php
$name=basename($_FILES['userfile']['name']);
print "<pre>";
if (copy($_FILES['userfile']['tmp_name'], $name)) {
print "File was successfully uploaded. ";
print "Here's some debugging info:\n";
print_r($_FILES);
}
else {
print "Possible file upload attack! Here's some debugging info:\n";
print_r($_FILES);
}
print "</pre>";
echo "Информация о временном файле:", "<br>";
echo $_FILES['userfile']['name'],"<br>";
echo $_FILES['userfile']['size'],"<br>";;
echo $_FILES['userfile']['tmp_name'],"<br>";
echo $_FILES['userfile']['type'],"<br>";
?>
Вывод:
File was successfully uploaded. Here's some debugging info:
Array
(
[userfile] => Array
(
[name] => Проекты.txt
[type] => text/plain
[tmp_name] => Y:\tmp\phpD9.tmp
[error] => 0
[size] => 1421
)
)
Информация о временном файле
Проекты.txt
1421
Y:\tmp\phpD9.tmp
text/plain
По окончанию работы скрипта, в случае, если принятый файл не был переименован, или перемещен он будет автоматически удален из временной папки.
Если при отправке формы файл выбран не был, PHP установит переменную $_FILES['userfile']['size'] в значение 0, а переменную $_FILES['userfile']['tmp_name'] - в none.
В следующем примере загрузка выбранного файла производится в папку uploadfiles. Если папка не существует, программа просит сначала создать папку:
Папка uploadfilesдля загузки не существует. Пожалуйста, создайте папку Y:\home\localhost\www\BookEx/uploadfiles
Повторите попытку загрузить файл.
<? //app7.php
$path=GetCWD()."/uploadfiles";
if(!file_exists($path))
die("<b>Папка uploadfilesдля загузки не существует. Пожалуйста, создайте папку
<font color=red>".$path."</font> <br>
<a href=?>Повторите попытку загрузить файл</a>.</b>");
if(empty($_FILES['UserFile']['tmp_name']))
echo
"<form method=post enctype=multipart/form-data>
Выберите файл: <input type=file name=UserFile>
<input type=submit value=Отправить>
</form>";
elseif(!is_uploaded_file($_FILES['UserFile']['tmp_name']))
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>");
else
{
if(@!copy($_FILES['UserFile']['tmp_name'],$path.chr(47).$_FILES['UserFile']['name']))
die("<b><font color=red>Файл не был загружен! Попробуйте <a href=?>повторить попытку</a>!</font></b>");
else
echo "<center><b>Файл \"<font color=red>" .$_FILES['UserFile']['name'].
"\" </font> успешно загружён на сервер!</font></b></center>".
"<hr>"."Тип файла: <b>" . $_FILES['UserFile']['type'] ."</b><br>"."Размер файла: <b>" .round($_FILES['UserFile']['size']/1024,2).
" кб.</b>"."<hr><center><a href=?>
Загрузить ещё один файл!</a></center>";
}
?>
Вывод:
Файл "Денвер.docx" успешно загружён на сервер!
Тип файла: application/vnd.openxmlformats-officedocument.wordprocessingml.document
Размер файла: 20.51 кб.
Загрузить ещё один файл!
Здесь функция getcwd() возвращает имя текущего каталога.
Загрузка файла и просмотр содержимого
<?php //app9.php
echo
"<form method=post enctype=multipart/form-data>
Выберите файл: <input type=file name=myfile>
<input type=submit value=Открыть файл>
</form>";
if(isset($_FILES["myfile"]))
{
$myfile = $_FILES["myfile"]["tmp_name"];
$myfile_name = $_FILES["myfile"]["name"];
$error_flag = $_FILES["myfile"]["error"];
// Если ошибок не было
if($error_flag == 0)
{
print("Имя временного файла на сервере: ".$myfile."<br>");
print("Имя загружаемого файла на компьютере пользователя: ".$myfile_name."<br>");
// Получаем содержимое файла
$fp = fopen($myfile,"r");
$content = fread($fp, filesize($myfile));
fclose($fp);
// Вывод содержимого файла
print($content);
} // end of if 2
} // end of if 1
?>
При загрузке можно проверять размер файла ($myfile_size) и если его размер превышает требуемый, то вывод файла не производить.
Значения $_FILES["myfile"]["error"]: 0 - ошибок не было, файл загружен; 1 - размер загруженного файла превышает размер установленный параметром upload_max_filesize в php.ini; 2 - размер загруженного файла превышает размер установленный параметром MAX_FILE_SIZE в HTML форме; 3 - загружена только часть файла; 4 - файл не был загружен (в форме указан неверный путь к файлу).
Если необходимо сохранить загруженный файл, то это можно сделать с помощью функций:
copy ( string source, string dest);
Функция copy() копирует файл source в место назначения dest.
Функция move_uploaded_file ( string filename, string destination); перемещает загруженный файл filename в место назначение указанное в параметре destination.
При одновременной загрузке двух файлов HTML форма содержит:
<INPUT NAME="myfile1" TYPE="file">
<INPUT NAME="myfile2" TYPE="file">
Это пример для одновременной загрузки двух файлов.
Таким же образом можно загружать и двоичные файлы, например файлы картинок gif, jpeg и т.д. При этом загружаемые на сервер бинарные файлы могут оказаться "битыми": фотки не будут показываться, программы не запустятся, архивы не распакуются. Дело в том, что Апач веб-сервер перекодирует все подряд. Например, символ с кодом 0х00 он заменяет на пробел (символ с кодом 0х20). Чтобы выключить эту ненужную перекодировку, допишите в любое место файла httpd.conf из каталога Апачи (/usr/local/apache) следующие строки.
<Location />
CharsetRecodeMultipartForms Off
</Location>