Хозяйке на заметку, или кратко об очевидном, кажущимся неочевидным

Отсутствующие локали

При отсутствии на сервере нужной локали, например ru_RU.CP1251, можно легко её добавить:

localedef ru_RU.CP1251 -i ru_RU -f CP1251
после этого проверяем, появилась ли она, командой
locale -a | grep ru

Переменные окружения

Как известно, большая часть неочевидных проблем в линуксе связана с переменными окружения. Чтобы понять, как так случилось что из консоли ваш демон запускается и работает правильно, а при запуске из init.d что-то не так (например у меня переставал коннектиться к Ораклу, или слетала локаль), достаточно сделать тестовый вывод переменных среды окружения в инит скрипте.

На примере стартового скрипта php-fpm, добавляем в него после #/bin/bash следующую строку:

export > /tmp/envvars
и перезагружаемся. Смотрим что там есть, перегружаем руками и смотрим что изменилось. Делаем выводы каких переменных окружения не хватает, и добавляем их прямо в тестовый скрипт. Не слишком красиво, но чаще всего достаточно и такого решения.

Rewrite Rule для CodeIgniter и nginx

В интернетах куча вариантов этих rewrite-rule’ов, у меня же заработал такой вариант (полный конфиг vhost’а):

server {
   listen 80;
   server_name yourhost.com;
   index index.php;
   root /www/yourhost.com/htdocs;
   access_log  logs/yourhost.com_access.log;

   location / {
      #error_page 404 = 404.html;

        if (-f $request_filename) {
            expires max;
            break;
        }

        if ($request_filename !~ (js|css|images|robots\.txt|index\.php.*) ) {
            rewrite ^/(.*)$ /index.php/$1 last;
        }
   }

   location ~ .php$ {
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      include /usr/local/nginx/conf/fastcgi_params;
   }

  location ~ /index.php/
  {
    include /usr/local/nginx/conf/fastcgi_params;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /www/yourhost.com/htdocs/index.php;
    fastcgi_param  REQUEST_URI      $request_uri;
    fastcgi_param  QUERY_STRING     $query_string;
    fastcgi_param  REQUEST_METHOD   $request_method;
    fastcgi_param  CONTENT_TYPE     $content_type;
    fastcgi_param  CONTENT_LENGTH   $content_length;
    fastcgi_param  HTTP_REFERER     $http_referer;
    fastcgi_pass   127.0.0.1:9000;
  }

}
Ну и в конфиге самого CodeIgniter’a нужно указать что
$config['uri_protocol'] = "REQUEST_URI";

Published on Thu, 16 Apr 2009 13:11

CodeExtinguisher - гламурная административная панель для сайта в два клика

Когда я ругал CodeIgniter за наличие в нем бесполезного scaffolding’а, я не брал во внимание что эта идея даст развитие таким проектам как CodeExtinguisher. А зря. Потому что CodeExtinguisher - инструмент для быстрой генерации административных панелей, что-то вроде скафолдинга, но уже с авторизацией, кучей плагинов и всего прочего. Очень удобно, скажу я вам, очень удобно. Особенно для всевозможных своих сайтов, управление которыми не рассчитано на дурака. Проект довольно некисло развивается, посмотрим что из этого выйдет.

Published on Mon, 25 Feb 2008 18:04

Codeigniter+Oracle = жесть в драйвере

Вы все еще полагаете что в мануале CodeIgniter’а не врут о том что метод

$this->db->escape();
спасет вас от Sql Injection?

Учитывайте, что содержание этого метода в драйвере для Oracle такое:

function escape_str($str)
{
return $str;
}

Доверяй, но проверяй :))

Published on Fri, 12 Oct 2007 20:55

Codeigniter - первые впечатления

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

Первые впечатления такие:

  • Я не знаю как работают другие фреймворки, CodeIgniter я выбрал из соображений легкости, и большого комьюнити. Тормозит. По сравнению с самописным тормозит просто дико. Вобщем-то понятно почему тормозит - куча ненужной “авто-логики”, которая выполняется при каждом запросе. Например поиск подмены для системных библотек CI, пользовательскими. При каждой загрузке страницы он бегает по диску и ищет переписали ли вы какой-то его класс, и какой класс ему использовать. Удобно в разработке, спору нет, но в продакшен не пойдет совсем.
  • Пол вечера возился в проблеме с драйвером oracle - при использовании последовательных запросов, например в цикле (знаю что плохая практика, но поставил бы пива тому кто вытащит одним запросом параметры для запросов к ораклу по разным id, и потом данные по этим id с учетом что у каждого id параметры в запросе будут разные). Так вот, выполняете два select’а, а результаты в обоих случаях получаете от первого запроса. Оказалось глюк - решение здесь. Пока разбирался решил что мне вобщем-то database класс из CI и не нужен - ActiveRecord’ом я все равно пользоваться не буду - т.к. запросы к ораклу в этом проекте на пол-страницы A4 каждый. Вобщем написал простенький враппер к PDO, сразу с поддержкой кеширования и т.п.
  • Кому нужен scaffolding во фреймворке? Нет реально, есть такие люди? Понимаю может быть удобно, но НУЖЕН? Почему бы не сделать эту фичу опциональной? Просто, зачем пихать это во фреймворк? Это же не CMS, чтобы запихивать всего и побольше, чтобы юзер был рад.
  • Сделали скафолдинг, зато не сделали нормальную авторизацию, и возможность сделать back-end по-легкому. Пока решил юзать библиотеку Userlib от пользователей комьюнити, вроде легкая и довольно логично написана.
  • Соответственно родные классы для работы с database-сессиями я пользовать не могу - database то у меня свой :) Вот сижу и переписываю класс session. Если дойдут руки сделать нормально, выложу сюда :)

Пока вроде все впечатления, будут еще - обязательно напишу :) Две мысли пока в голове - надо пока не поздно написать своё попроще, потому что и так большую часть переписываю и думаю надо было всетаки сравнить CI с ZendFramework - что-то мне подсказывает что Zend хоть и еще более монстрообразный, но сделан во многом логичнее.

Published on Fri, 12 Oct 2007 20:09