This Might Be Useful

Archive for the ‘Programming’ 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

Реализация аналога LIMIT из MySQL в MS SQL

Thursday, May 8th, 2008 | SQL | No Comments »

В MS SQL отсутствует LIMIT в SELECT'е. Это поразительно и глупо, но это так. И после MySQL это невероятно раздражает. Поэтому было найдено решение проблемы. Сравнительно медленное, но зато работающее не только в новых версиях MS SQL (где есть row_number(), облегчающий жизнь). Итак, для того, чтобы сделать то же, что в MySQL делает следующий запрос:

SQL:
  1. SELECT *
  2. FROM `some_table`
  3. LIMIT 10, 20

в MS SQL надо написать:

SQL:
  1. SELECT top 20 * FROM [some_table]
  2. WHERE [primary_key_field] NOT IN
  3.   (
  4.     SELECT top 10 [primary_key_field]
  5.     FROM [some_table]
  6.     ORDER BY [primary_key_field]
  7.   )
  8. ORDER BY [primary_key_field]

Календарь латвийских именин

Monday, April 28th, 2008 | SQL | No Comments »

База именин для латвийских имен. Формат довольно простой и грубый, но использовать можно. Поле `date` это дата в формате [m]mdd, `name` - это имя в латышском написании, а `simplename` - упрощенная версия имени, в которой длинные буквы продублированны, а смягченные заменены на их твердые аналоги. Дамп c MySQL 5.0 сервера.
(more...)

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

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

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

(more...)

Страница: 1 (всего: 8)
12345...8»