Вывод файла

Вероятно, после обработки файла вы захотите отправить его в браузер, чтобы пользователь увидел результат обработки шаблона. В нашем примере для вывода файла создается отдельный метод, приведенный ниже.

function print_file($file_id) {

$file_id print $this->files[$file id]; // Вывести содержимое файла с идентификатором

}

При вызове print_file( ) содержимое файла, представленного ключом $file_id, передается в браузер.

Пример использования класса template.

// Включить класс шаблона, include("tempiate.class") и присвоить значения переменным

$page_title = "Приветствуем Вас на нашей домашней страничке!";

$bg_color = "white"; $user_name = "Chef Jacques":

// Создать новый экземпляр класса $template= new template;

// Зарегистрировать файл "homepage.HTML" с псевдонимом "home"

$template->register_file("home", "homepage.HTML");

// Зарегистрировать переменные

$template->register_variables("home", "page_title, bg_color.user_name");

$template->file_parser("home");

$template->print_file("home"); // Передать результат в браузер

Полный код класса template:

class template {

VAR $files = array( );

VAR $variables = array( );

VAR $opening_escape = '{';

VAR $closing_escape = '}' ;

function register_file($file_id, $file_name) {

// Открыть $file_name для чтения или завершить программу с сообщением об ошибке

$fh = fopen($file_name, "r") or exit("Невозможно открыть файл $file_name!");

$file_contents = fread($fh, filesize($file_name)); // Прочитать файл $file_name в переменную

// Присвоить содержимое элементу массивас ключом $file_id.

$this->files[$file_id] = $file_contents;

fclose($fh); // Работа с файлом завершена, закрыть его.

 

 

} // Функция: register_variables( ) Назначение: сохранение переменных, переданных

// в параметре $variable_name. в массиве с ключом $file_id.

function register_vanables($file_id, $variable_name) {

// Попытаться создать массив, содержащий переданные имена переменных

$input_variables = explode(".", $variable_name);

while (Iist($value) = each($input_variables)) // Перебрать имена переменных

$this->variables $this->variables[$file_id][] = $value // Присвоить значение элементу массива

}

function file_parser($file_id) {

// Сколько переменных зарегистрировано для данного файла?

$varcount = count($this->variables[$file_id]);

$keys = array_keys($this->files) // Сколько файлов зарегистрировано?

// Если файл $file_id существует в массиве $this->files

// и с ним связаны зарегистрированные переменные

If ( (in_array($file_id. $keys)) && ($varcount > 0))

{ // Сбросить $x $x = 0 Пока остаются переменные для обработки...

while ($x < sizeof($this->variables[$file_id]))

{ // Получить имя очередной переменной $string = $this->variables[$file_id][$x];

// Получить значение переменной. Обратите внимание:

// для получения значения используется конструкция $$.

// Полученное значение подставляется в файл вместо

// указанного имени переменной.GLOBAL $$string:

// Построить точный текст замены вместе с ограничителями

$needle = $this->opening_escape.$string.$this->closing_escape;

// Выполнить замену.

$this->files[$file_id] = str_replace( $needle.$$string.$this->files[$file_id]); $x++;

}

}

}

function print_file($file_id) {

$file_id print $this->files[$file id]; // Вывести содержимое файла с идентификатором

}

}

}

Описанная схема построения шаблонов используется в нескольких библиотеках РНР, среди которых наибольший интерес представляют следующие:

· Richard Hayes's Template Class: http://www.heyes-computing.net;

· Fast Template: http://www.thewebmasters.net/php.

На сайте ресурсов РНР, PHPBuilder (http://www.phpbuilder.com), также имеется несколько интересных учебников, посвященных обработке шаблонов.

На сайте РНР Classes Repository (http://phpclasses.UpperDesign.com), можно найти несколько реализаций.


2.13. COM – объекты

Технология СОМ(сокращение от «Component Object Model», то есть «модель составного объекта») обеспечивает взаимодействие между приложениями, работающими на разных языках и платформах. Такое взаимодействие в значительной мере способствует идее построения многократно используемых, легко сопровождаемых и адаптируемых программных компонентов (в последнее время к этим трем принципам проявляется повышенное внимание в области компьютерных технологий). Хотя СОМ обычно рассматривается как спецификация, ориентированная в первую очередь на продукты Microsoft, поддержка СОМ уже реализована во многих языках (например, в РНР, Java, C++ и Delphi) и существует на многих платформах, включая Windows, Linux и Macintosh.

РНР содержит несколько стандартных функций для работы с СОМ. Учтите, эти функции поддерживаются только в версии РНР для Windows!

object new СОМ("обьект.класс" [, string удаленный_адрес]) – создание экземпляра объекта СОМ. Параметр объект.класс определяет модуль СОМ, присутствующий на сервере. Необязательный параметр удаленный_адрес используется в том случае, если объект СОМ создается на удаленном компьютере. Допустим, вы хотите создать экземпляр объекта для приложения MS Word. При этом приложение Microsoft Word запускается так, словно вы запустили его вручную. Команда имеет следующий синтаксис:

$word=new COM("word.application") or exit("Couldn't start Word!");

После того как экземпляр объекта СОМ будет создан, можно приступать к работе с различными методами и свойствами этого объекта. Допустим, вы захотели активизировать окно Word. Следующая команда изменяет атрибут видимости объекта, в результате чего графический интерфейс приложения отображается на экране: $word->visible = 1;

объект->имя_метода([значение, ...]) - вызов метода объекта СОМ. Объект соответствует экземпляру объекта СОМ, созданному описанным выше способом. Параметр имя_метода определяет имя метода, определенного в классе объект. Необязательный параметр значение позволяет передавать параметры при вызове методов, допускающих (или требующих) дополнительных данных. Как и при вызове обычных функций, параметры разделяются запятыми. Если после создания экземпляра объекта СОМ, представляющего MS Word, вы захотите создать в приложении новый документ, просто вызовите соответствующий метод. Задача решается методом add( ) субкласса Documents экземпляра $word:

$word->Documents->Add( );

В результате выполнения этой команды в окне приложения MS Word открывается новый документ.

mixed com_get(resource объект, string свойство) - возвращает значение свойства объектов СОМ. Первый параметр определяет экземпляр объекта СОМ, а второй — атрибут класса, к которому относится данный экземпляр.

Пример.

// Создать экземпляр объекта для приложения MS Word

$word=new COM("word.application") or exit("Не может стартовать Word!");

// Режим CapsLock либо включен (свойство CapsLock = 0),

// либо выключен (свойство CapsLock = 1).

$flag = com_get($word->Application.CapsLock);

// Преобразовать значение Sflag (0 или 1) в логическое значение

if ($flag == 1) $flag = "YES"; else $flag = "NO";

print "CAPS Lock activated: $flag"; // Вывести сообщение

$word->Quit();

Существует и другое решение - значение атрибута CapsLock можно получить при помощи стандартного для ООП синтаксиса обращения к атрибутам: $flag = $word->Application->CapsLock;

void com_set(resource объект, string свойство, mixed значение) - присваивает атрибуту объекта новое значение.

Первый параметр определяет экземпляр объекта СОМ, а второй — атрибут класса, к которому относится данный экземпляр. Третий параметр определяет новое значение свойства.

Пример. Создание и сохранение документа Word.

// Создать экземпляр объекта для приложения MS Word

$word=new COM("word.application") or exit("Не может стартовать Word!");

$word->visible = 1; // Активизировать окно

$word->Documents->Add();// Создать новый документ

// Вставить в документ фрагмент текста

$word->Selection->Typetext("Новый текст\n");

// Выбрать текстовый режим сохранения

$ok = com_set($word->Application, DefaultSaveFormat, "Text");

// Запросить у пользователя имя и сохранить документ

// по умолчанию документ сохраняется в текстовом формат!

$word->Documents[l]->Save;

$word->Quit();// Выйти из MS Word

?>

Существует и другое решение - новое значение атрибута DefaultSaveFormat можно присвоить непосредственно, как обычной переменной: $word->Application->DefaultSaveFormat = "Text".

Пример форматирования адресной книги из базы данных, в документе Word для построения отчета.

// Создать соединение с сервером MySQL

$host = "localhost"; $user = "root"; $pswd = ""; $db = "book";

$address_table = "addressbook";

mysql_connect($host. $user, $pswd) or exit("Не возможно открыть сервер!");

mysql_select_db($db) or exit("Не возможно открыть базы данных!");

// Выбрать из базы данных все записи

$query = "SELECT * FROM $address_table ORDER BY lastjiame";

$result = mysql_query($query);

// Создать новый объект COM для приложения MS Word

$word=new COM("word.application") or exit("Не стартует Word!");

MS Word $word->visible = 1; // Активизировать окно

$word->Documents->Add( ); // Открыть пустой документ.

while($row = mysql_fetch_array($result)); // Перебрать записи из таблицы адресов

{ $last_name = $row["last_name"]; $first_name = $row["first_name"];

$tel = $row["tel"]; $email = $row["email"];

// Вывести данные таблицы в открытый документ Word.

$word->Selection->Typetext("$last_name. $first_name\n");

$word->Selection->Typetext("tel. $tel\n"); $word->Selection->Typetext("email. $email:\n");

}

$word->Documents[l]->Save; // Запросить у пользователя имя документа.

$word->Quit();// Выйти из MS Word

 

Обзор объектной модели всех приложений семейства Office приведен по адресу http://www.microsoft.com/officedev/articles/Opg/toc/PGTOC.htm).

Ниже перечислены ссылки на некоторые полезные ресурсы, посвященные СОМ:

http://www.microsoft.com/com/nets/drgui.asp;

http://www.microsoft.com/com/default.asp;

http://www.comdeveloper.com.


2.14. Безопасность

Безопасность сервера во многих отношениях определяет безопасность данных, обрабатываемых сценариям РНР. Большинство пользователей работает с сервером Apache, поэтому рекомендуется посещать сайты http://www.apache.org.

Рассмотрим основные проблемы безопасности.








Дата добавления: 2015-04-15; просмотров: 864;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.02 сек.