Debian: php-fpm в Squeeze

Ах эти мейнтейнеры Дебиана! Обещали оставить в сквизе php-fpm, но опять появились баги тараканы в голове – вэб разработчики и сисадмины как и прежде используют глючные сборки от dotdeb, если вообще не пересобирают руками весь php.

Read more

Процедура миграции на Яндекс.Почту

Появилась задача сделать почти 300 ящиков на Яндекс.Почте для домена.
Изначально пост имел название “Чекер почтовых ящиков” – это часть миграции, но получился о шагах миграции корпоративной почты с левых, глючых почтовых служб на нормальный Яндекс)

Изначально стояла задача создать ящики с уже имеющмися адресами, с новыми паролями. Перенос содержимого ящиков также не требуется. Общий список ящиков находился на странице админки бывшего почтового сервиса

Пришлось много парсить :) Фактически это руководство о том, как переезжать на Яндекс.почту

Read more

1с-битрикс: Ошибка в типе содержимого

При переносе сотого сайта страндартными средствами битрикса (через restore.php) на спейсвеб возникла следующая ошибка:
The page you are trying to view cannot be shown because it uses an invalid or unsupported form of compression.

Что такое?

Одна из проблем – лишние символы в /bitrix/php_interface/ в файлах init.php, dbconn.php.

Также эта гадкая ошибка возникает из за сбоя в компрессии, проверить пытался ли битрикс отдавать сжатый контент можно посмотрев заголовки:

Content-Encoding: gzip	
Content-Length:4663

В этом случае решением будет принудительное отключение компрессии – в файле /bitrix/php_interface/init.php добавить константу

<?php
define('BX_COMPRESSION_DISABLED',true);
function getRealLink($ID = 0)
.....

Сколько же времени ушло на
решение этой проблемы :-/

php trick: вариант обхда open_basedir restriction

Задача: нужно перечислить файлы не в директории сайта

Проблема: действуют ограничения, например:

Warning: dir() [function.dir]: open_basedir restriction in effect.
     File(/etc/awstats) is not within the allowed path(s): (.) in /var/www/site/path/index.php on line 22
Warning: dir(/etc/awstats/) [function.dir]: failed to open dir: Operation not permitted
     in /var/www/site/path/index.php on line 22

Есть вариант обойти это, при условии что разрешенно выполнять приложения через exec() и это unix-система

Read more

VK app: проба пера с iframe

Очень давно хотелось попробовать написать iframe приложение для “ВКонтакте” – всё руки не доходили. А тут недавно добавили API для геолокации – теперь можно ставить в статус отметку о местоположении. Я просто не могу упустить шанса что-нибудь попробовать написать, тем более, что на момент написания таких приложений я не нашёл.

Read more

Kohana: AJAX контроллер с ловлей ошибок

Продолжая тему написания custom контроллеров не для html вывода предлагаю мой вариант обработчика AJAX-запросов. Напомню, в предыдущий раз я описывал контроллер для консольного демона

Помимо удобной для меня выдаче данных(я предпочитаю в 99% случаев выдвать JSON) есть ещё ряд фитч:

  • Код контроллера многократно используется наследниками класса, которые при необходимости могут перегрузить необходимые методы. В них написать простой ответ клиенту с помощью не сложных функций можно в пару строк – не нужно отвлекаться на создание json ответа, а писать логику.
  • Дефолтные ответы об успешном выполнении запроса, предупреждения или ошибки
  • Ловятся ошибки фреймворка и формируется адекватный отчёт об ошибке, а не километровый HTML от Kohana – просто идеально при использовании fireBug или аналогичных средств отладки.
  • Если вызываемый метод не реализован в наследнике, то будет выдан user-friendly ответ(опять же если использовать регламент возвращаемых структур json)

Read more

Apache: быстрое добавление сайтов

Набросал простой скрипт, для удобного создания VirtualHost в debian.

Наверное тоже надоело лесть, создавать vhost по существующему, править пути, перезапускать сервер и так много раз и по кругу? А ещё не хватало опечататься?

Предлагаю такое решение: скрипт, делающий всю эту рутинную работу. Принимает только 1 аргумент – имя сайта и сам создаёт скелет и VirtualHost по шаблону.

В каталоге с сайтами создаётся папка с указанным именем. В ней – ещё 2 папки – log и www – для логов и сайта соответственно. А так же vhost – файл с описанием виртуального хоста по шаблону, лежащему в папке с сайтами. На этот файл создаётся симлинк в стандартное для дебиановского апача место – /etc/apache2/sites-avalable. После установки прав на созданные папки происходит вызов a2ensite и перезапуск апача. На скриншоте выше – кусочек такого скелета который получился после работы скрипта – из наутилуса

Read more

КМУ в СПбГУ ИТМО


20-23 апреля 2010 года в Санкт-Петербургском Государственном Научно-Исследовательском Университете Инфорационных Технологий, Механники и Оптики состоялась седьмая ежегодная Конференция Молодых Учёных, приуроченная к 110летию университета.

Была поданна просто уйма заявок(700+ человек), в различные секции, например можно попробовать полистать программу конференции. Секции были не только технические, но и мелькали гуманитарные. В общем на любой вкус и цвет можно было выбирать куда идти.

Read more

Kohana & firePHP: nginx выдаёт 502 при включённом debugToolbar

Те, кто следит за количеством запросов, потребляемой памяти, временем выполнения и другими важными показателями при использовании debugToolbar также наверняка используют firePHP – плагин к плагину fireBug для Firefox позволяющий дебажить работу своего веб-приложения.

По понятным причинам, на сайте после apache поставлен nginx. Наверное кто нибудь пытался сделать дамп большого объекта или массива и запихать его в firePHP. PHP скрипт отрабатывает удачно, в логах также всё нормально(код 200):

123.123.123.123 - - [31/Jan/2010:15:08:44 +0300] "GET /somepage/o.O HTTP/1.0" 200 66939 "-" "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.1.6) Gecko/20091216 Iceweasel/3.5.6 (like Firefox/3.5.6; Debian-3.5.6-1) FirePHP/0.4"

А вот nginx в браузер выдаёт

502 Bad Gateway

nginx

Так и в моём случае: всё работало нормально, казалось бы изменил совсем чуть-чуть: добавил ещё один вызов метода у модели. И на тебе – 502 Bad Gateway.

Read more

Перебор многомерного массива в поисках ключа

Простой способ перебрать многомерный ассоциированный массив и получить из него трубуемые элементы, например по ключу:

function recarray($ar, $searchfor) {
    static $result = array();

    foreach($ar as $k => $v) {
    if ($k == $searchfor) $result[] = $v;
        if (is_array($ar[$k]))  recarray($v, $searchfor);
    }
    return $result``;
}

$tst = array (
  'bob' => 'Bob MEN',
  'google' => array (
      'somekey' => 'somevalue',
      'bob'     => 'big man'
  ),
  'martin' => array(
      'bob'     => array(
      'friend' => true,
      'age'    => 100500),
      'cat'     => 'animal'
  )
);

$result = recarray($tst, 'bob');

print_r($result);

Read more