This Might Be Useful

Archive for the ‘PHP’ Category

Уменьшаем нагрузку на сервер - кэширование данных для ускорения генерации страницы

Wednesday, July 2nd, 2008 | PHP | 2 Comments »

Представьте себе проект, в котором достаточно сложная структура базы данных. Да и собственно данных много. И для генерации страницы постоянно необходимо примерно одним и тем же образом вытягивать и обрабатывать массу информации. В моем случае это дело занимало до 25 секунд на весьма неслабой машине. Для оптимизации процесса было принято решение кэшировать данные. Само собой, это снимает только часть проблем. Но ведь кэш можно еще и генерировать автоматически, верно? :).
В общем, ниже я приведу небольшой класс, сделанный за несколько минут. Кэширует массив, в котором хранится основной dataset. По умолчанию считается, что данного REQUEST_URI dataset постоянен. Но есть параметры для изменения такого поведения.
(more…)

Полноценная функция для получения IP-адреса клиента

Friday, May 9th, 2008 | PHP | 10 Comments »

Небольшая, но очень полезная функция для получения IP-адреса клиента. Основной плюс - в отличии от большинства решений учитывает не только REMOTE_ADDR.
Собственно публикую чтобы не потерять. А то регулярно ищу это дело по старому коду :).

PHP:
  1. function GetIP() {
  2.   if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
  3.      $ip = getenv("HTTP_CLIENT_IP");
  4.   else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
  5.      $ip = getenv("HTTP_X_FORWARDED_FOR");
  6.   else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
  7.      $ip = getenv("REMOTE_ADDR");
  8.   else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
  9.      $ip = $_SERVER['REMOTE_ADDR'];
  10.   else
  11.      $ip = "unknown";
  12.   return $ip;
  13. } // GetIP

PHP, GD и прозрачность GIF

Monday, April 21st, 2008 | PHP | No Comments »

При изменении размера GIF изображений в PHP с помощью библиотеки GD, цвет прозрачности заменяется на черный. Это не баг, это жизнь, но исправить это можно :) Для этого надо определить индекс цвета прозрачности у исходного изображения, и вставить его в палитру нового, уменьшенного, изображения. Код который это делает приведен ниже, сразу после него можно выполнять знакомый ImageCopyResampled($dst_image, $src_image, ...)

(more...)

Создание PDF-файлов с помощью PHP и FPDF

Friday, February 22nd, 2008 | PHP | 3 Comments »

Большинство web-сервисов экспортируют данные в разных форматах для дальнейшего использования. Данная статья о том, как экспортировать данные в pdf-формате.
Хотя многие знают как это делать, я опишу кратко для тех кто не знает.

PHP позволяет нам генерировать файлы в формате pdf налету. FPDF - это бесплатный код на языке php, позволяющий создавать документы в формате pdf и производить с ними различные манипуляции.
(more...)

Отдаем pdf-файл браузеру. Да так, чтобы MSIE его тоже принимал.

Monday, January 7th, 2008 | PHP | 2 Comments »

Официальный пример от php.net как отдать PDF-файл браузеру выглядит так как показано ниже.

PHP:
  1. <?php
  2. // We'll be outputting a PDF
  3. header('Content-type: application/pdf');
  4.  
  5. // It will be called downloaded.pdf
  6. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  7.  
  8. // The PDF source is in original.pdf
  9. readfile('original.pdf');
  10. ?>

И он работает! Но не в Internet Explorer (6 и 7). IE пишет свою обычный blah-blah Internet Explorer was unable to open this site. The requested site is either unavailable or cannot be found. Please try again later. В Microsoft kb есть заметка о похожей проблеме при использовании SSL. Но оказалось что проблема не только при передаче через SSL, но и в обычной жизни тоже. Microsoft предлагает извращенные решения типа сервис паков и копания в реестре, но можно сделать проще. Добавить к вышеперечисленным заголовкам парочку, управляющую кешем. Не знаю точно что это делает, но заработало :)

PHP:
  1. header('Cache-Control: maxage=3600');
  2. header('Pragma: public');

Заметку прислал mougly aka d1pr3d

Страница: 1 (всего: 4)
1234»