В этой главе описывается создание графических функций с помощью функций расширения GD, речь о которых шла в главе 16, "Обработка изображений и графики". Практика свидетельствует о том, что необходимо быть осведомленными о проблемах, возникающих при создании графических изображений. Во-первых, это влечет за собой относительно большие расходы процессорного времени. В большинстве случаев гибкость динамической графики не соответствует нагрузке, которую испытывает при этом сервер. Во-вторых, задачу создания привлекательной графики средствами PHP нельзя отнести к категории простых. Многие методы, которыми обладают графические редакторы, не реализуемы. Как вы увидите в последующих примерах, большая часть работы будет затрачена на создание простейших двумерных графиков. Наконец, функций, обеспечивающих адекватную поддержку текста, какие существуют в текстовых редакторах, не существует. Отсутствует перенос слов на новую строку, а также концепция междустрочных интервалов, разрядки и нижних выносных эле­ментов. Независимо от этого, генерирование графики иногда имеет определенный смысл. В этой главе содержится несколько реальных примеров, к использованию которых можно приступать после внесения самых незначительных корректив.
25.1. Динамические кнопки
Изображения, окруженные якорными тегами, представляют собой обычное устройство навигации. Заменив простой текст, с помощью этого метода можно создавать кнопки, подобные тем, которые создаются в операционной системе, и даже красочные пиктограммы. В большинстве случаев лучше всего применять графику, созданную с помощью вашего любимого графического редактора, так как время между изменениями может быть достаточно большим. Однако если имеется кнопка, изображение которой изменяется достаточно часто, можно создать ее динамически с помощью PHP. Содержимое кнопки, и ее обозначение должны быть доступными в PHP. Это может быть оператор, устанавливающий значение переменной, а также значение, полученное из файла или базы данных.
Суть этой идеи позволит прояснить простой пример. Многие корпоративные Web-узлы имеют раздел, предназначенный для пресс-релизов. Вместо простого перечисления перечня текстовых ссылок пользователь хочет получить графическое изображение пылающей газеты для каждого пресс-релиза и все под заголовком "Последние новости". Каждая пылающая газета сверху сопровождается текстом с заголовком пресс-релиза. Для небольшой компании, которая выпускает не более одного пресс-релиза в месяц, такую графику лучше создать вручную. А для компании, выпускающей пресс-релизы каждую неделю, есть смысл автоматизировать этот процесс. Пресс-релизы можно разместить в базе данных, а графическое изображение создавать в момент просмотра пресс-релизов посетителями. Одним из преимуществ такого подхода является то, что если главный администратор увидит, что вы размещаете на узле компании свежие газеты, достаточно будет небольшой модификации для того, чтобы разместить вместо этого рисунка эмблемы компании.
Издержки, связанные с динамически создаваемой графикой, можно подсчитать. Вам совсем невыгодно экономить 15 минут в месяц, если загрузка такой страницы будет занимать 30 секунд. Если вы работаете с Internet постоянно, то, конечно, знаете, что загруженные рисунки при повторном к ним обращении загружаются уже из кэш-памяти браузера. Поэтому загрузка первой страницы может занимать длительное время, в то время как все последующие загрузки будут проходить уже быстрее, так как графическое изображение уже было загружено в браузер. Динамическая графика также кэшируется, но при кэшировании браузер использует URL. GET-method формирует переменные, являющиеся частью URL, поэтому Web-узлы http://www.site.com/button.php?label=home&from=1 и http://www.site.com/button.php?label=home&from=2 создают идентичные графические изображения, которые все же различаются, поскольку здесь речь идет о кэшпамяти браузера.