За месяц Февраль, 2011

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext

При запуске из командной строки в Windows php ругается кучей однотипных warning-ов:
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\…

PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_curl.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_gd2.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_mbstring.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_mysql.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_mysqli.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_pdo.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/php5/ext\php_pdo_mysql.dll’ - =х эрщфхэ єърчрээvщ ьюфєы№. in Unknown on line 0

Переводя кракозябры, получаем что-то вроде “Не найден указанный модуль“.

Как правило, всё дело в том, что в php.ini не правильно задан путь к расширениям:
;Directory in which the loadable extensions (modules) reside.
extension_dir = "/usr/local/php5/ext"

Следует исправить на “нормальный” для windows путь (не забываем заключительный слэш) - должно получиться что-то вроде такого:
; Directory in which the loadable extensions (modules) reside.
extension_dir = "C:\program files\servers\usr\local\php5\ext\"

Такого рода проблема может появиться у многих windows-серверов для локальной разработки: Xampp, Wampp, Denwer

Опубликовано Февраль 10, 2011 | автор: levik  |  Нет комментариев »

Yii framework - заметки на полях

Заметки про Yiiframework

Создать приложение YII
yiic webapp /home/webmaster/public_html
yiic.bat webapp Z:\home\mysite\www

Для корректной работы скрипта yiic.bat в Windows на Denwer следует либо исправить скрипт (прописать полный путь к php, либо добавить каталог с php в системную переменную PATH).
if "%PHP_COMMAND%" == "" set PHP_COMMAND=z:\usr\local\php5\php.exe
Запускать скрипт следует из каталога framework

Приложение в YII можно создать без консоли. Достаточно скопировать framework/cli/views/webapp/protected/.

Наиболее полный конфиг для YII:
http://www.yiiframework.com/wiki/59/using-the-configuration-file-explain-what-can-be-configured
http://www.yiiframework.com/doc/api/1.1/CWebApplication - конфиг = массив параметров
Можно поставить http://www.yiiframework.com/extension/yii-debug-toolbar Там в настройках все подключенные компоненты описаны и все их настройки.

http://issuu.com/vincentchoi/docs/yii-blog-1.1.0

Кэширование схемы БД:
http://www.larryullman.com/2010/06/28/caching-the-database-schema-using-memcached-with-yii/
'db'=>array(//...
'schemaCachingDuration'=>3600,//....

Контроллер по умолчанию site. Задать другой контроллер по умолчанию:
'defaultController'=>'default', // параметр в protected/config/main.php

Action по умолчанию index. Задать другой Action по умолчанию
public $defaultAction = 'newindex'; // переменная в Controller

Если нужный Action отсутствует, может быть вызван метод missingAction

    class SiteController extends CController
    {
      public missingAction($actionID)
      {
        Yii::trace(' Action not found '.$actionID);
        $this->redirect('site/index'); // вариант с редиректом
        $this->run('index'); // вариант без редиректа
      }
    }

Язык по умолчанию задается в protected.config.main (сообщения верификации вроде “cannot be blank”)
'sourceLanguage' => 'ru',
'language' => 'ru',

Тотальный перевод - http://yiiframework.ru/forum/viewtopic.php?f=3&t=1001

Свой адрес для страниц, требующих авторизации (если null - выдает 403 ошибку и не перебрасывает на форму)
'loginUrl'=>null, // 'site/login'

Расширения для YII
http://www.yiiframework.com/extensions/
http://yiiframework.ru/forum/viewtopic.php?f=4&t=963
http://code.google.com/p/yiiplayground/

Динамическое изменение CUrlManager::rules
http://rmcreative.ru/blog/post/curlmanageraddrules

Структура
http://www.yiiframework.com/wiki/155/the-directory-structure-of-the-yii-project-site/

View - глобальный/модуль/каталог:
- “//layouts/main” указывает на «protected/views/layouts/main.php» (если «protected» — это базовая директория приложения)
- “/layouts/main” указывает на «protected/modules/abc/views/layouts/main.php» (если «abc» — это текущий рабочий модуль. Если нет, то это тоже самое, что и “//layouts/main”)
- “main” указывает на view-файл, размещенный в директории представлений текущего контроллера или в директории текущего макета (layout).

В атрибутах CHtml (а также - форм) убираем преобразование спецсимволов
echo CHtml::activeCheckBox($advertisment, ‘anyProposed’, array(
‘onClick’ => “document.getElementById(’myText’).value=’123′”,
‘encode’ => FASLE,
));

Включаем отладку, смотрим SQL
http://yiiframework.ru/forum/viewtopic.php?f=3&t=877

События в YII
http://devkp.ru/post/sobyitiya-v-yii
http://dr0id.ru/post/90/%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9+%D0%B2+Yii
http://yiiframework.ru/forum/viewtopic.php?f=3&t=4255#p26793

RBAC в БД
http://www.yiiframework.com/doc/api/1.1/CDbAuthManager
http://yiiframework.ru/forum/viewtopic.php?f=3&t=4321#p26883 -

Привязка изображений к модели
http://www.yiiframework.com/extension/fileimagearbehavior
http://yiiframework.ru/forum/viewtopic.php?f=3&t=4342
http://yiiframework.ru/forum/viewtopic.php?f=3&t=1678&start=20#p10318

Grid
http://www.yiiframework.com/forum/index.php?/topic/24280-gridview-filtering-of-relational-data/

http://yiiframework.ru/forum/viewtopic.php?f=8&t=1284&start=10#p7918 - куки/сессии/поддомены
http://www.yiiframework.com/wiki/152/cookie-management-in-yii/ - cookie

Ajax link
http://yiiframework.ru/forum/viewtopic.php?f=3&t=4726#p29551

Полезные поведения
http://yiiframework.ru/forum/viewtopic.php?f=9&t=2000 - slug (транслит заголовка)

Twig Renderer
http://yiiframework.ru/forum/viewtopic.php?f=4&t=3511#p21424- static twig (CHtml)

http://yiiframework.ru/forum/viewtopic.php?f=3&t=6237#p38536 - yii db where add in condition
http://yiiframework.ru/forum/viewtopic.php?f=3&t=6236&p=38576#p38576 - массив id=>value из query (db command)

http://www.larryullman.com/2010/08/10/handling-related-models-in-yii-forms/ - Yii MAnY MANY save

Опубликовано Февраль 9, 2011 | автор: levik  |  Нет комментариев »

Lazy Load - ленивая (отложенная) загрузка изображений с помощью javascript

Увеличение скорости загрузки сайта, а также снижение нагрузки на сервер, используя отложенную загрузку изображений при помощи javascript т.н. Lazy Load

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

Вся “фишка” lazy load загрузки картинок в том, что те картинки, которые не видны пользователю попросту не загружаются. То есть, загрузка “нижних” картинок, не попадающих на экран происходит при перемотке страницы.

Lazy Load реализован с использованием различных фреймворков:

Опубликовано Февраль 8, 2011 | автор: levik  |  Нет комментариев »

Debian 6.0 Squeeze

Вышел Debian 6.0 Squeeze, анонс на оф. сайтеDebian Squeeze Logo

Основные изменения:

  • Инфраструктура Debian:
    • backports.org теперь является частью основного проекта (backports.debian.org).
  • Структура ОС:
    • переработан установщик;
    • dash теперь устанавливается по умолчанию и является обязательным;
    • используется новый загрузчик GRUB 2, старый GRUB доступен в пакете grub-legacy;
    • загрузка ускорена с помощью insserv и параллельного запуска служб на основе их зависимостей;
    • в dpkg добавлена поддержка компрессии xz, проведены оптимизации по ускорению работы с базой данных, а также произведена отвязка от perl;
    • соответствие стандартам FHS 2.3 и LSB 3.2;
    • полностью свободное ядро Linux без закрытых и несвободных прошивок (перенесены в non-free);
    • более 10 000 новых пакетов — теперь общее число пакетов достигло 29 000 (собраны из 15 000 пакетов с исходными кодами), около 60% пакетов обновлены, некоторые пакеты были удалены;
    • в качестве технического обзора в дистрибутив включены два ядра FreeBSD, работающие с пакетами Debian: kfreebsd-i386 и kfreebsd-amd64.
  • ПО, включённое в выпуск:
    • ядро Linux 2.6.32 с поддержкой ext4 и KMS;
    • GNOME 2.30 с некоторыми частями GNOME 2.32;
    • KDE 4.4.5;
    • Xorg 7.5;
    • OpenOffice 3.2;
    • Python 2.6.6;
    • Samba 3.5.5;
    • Tomcat 6.0.28.

UPD PHP5.2 + debian squeeze
http://muzso.hu/2011/09/19/how-to-use-php-5.2-with-debian-squeeze

UPD2 2016-06… Закончился Long Time Support период поддержки Debian Squeeze… 5 лет пролетело

Для категорически нежелающих обновляться в sources.list  можно указывать
deb http://archive.debian.org/debian squeeze main
deb http://archive.debian.org/debian squeeze-lts main

Чтобы вторая строчка отрабатывала - в /etc/apt/apt.conf (в случае отсутствия файл следует создать):
Acquire::Check-Valid-Until false;

http://doc.biblissima-condorcet.fr/loris-setup-guide-ubuntu-debian python 2.7 на debian squeeze

Опубликовано Февраль 6, 2011 | автор: levik  |  Нет комментариев »

php - прячем информацию от разработчиков

Задача:  написать непрозрачный объектно-ориентированный код на php.
Есть система, которая работает с некоторыми секретными данными. Данные хранятся в xml, и закрыты ассиметричным ключом. Закрытый ключ хранится в коде внутри финализированного метода внутри класса. Класс накрыт зендом и поднимается только через дизасм. Скрепя сердце начальство признало этот способ безопасным. Доступ к классу осуществляется через https соединение. Столкнулся с проблемой, которая разорвала мне мозги: вся эта система ходит по рукам, но всё время остается закрытой для сторонних разработчиков за исключением того, что у системы есть документированное API. А значит на эту систему вешаются сторонние модули.Несмотря на то, что сам класс, который парсит xml с секретными данными финализированный и всё, что можно находится в private, добрые люди намекнули, что эта система пробиваема на Ура. Способ обхода очень странный: самый верхний объект прогоняется через var_dump, результат вывода кэшируется, а затем кэш парсится. Получается, что если мой объект расшифровал секретный xml, то он хранит распарсированные конфиги у себя в private свойствах, потом его сканирует сторонний модуль через var_dump или print_r и грабит секретную статическую информацию производителя системы, которая одинакова на всех копиях системы. На сколько мне известно, var_dump и print_r могут получить доступ к всем свойствам (в том числе private и protected). Уязвимостью это язык не поворачивается, это дыра, в которую можно пешком пройти.

final class Center {

private static $domSecret = 'DOM';public function makeProfit($a){

return self::$domSecret.$a;

}

public function __construct(){

exit("error");

}

}

echo Center::makeProfit('::Profit');

//а тут - вылетает с ошибкой

$c = new Center();

Вариации на тему^
private function __construct(){}

http://www.php.ru/forum/viewtopic.php?t=29560

Опубликовано Февраль 2, 2011 | автор: levik  |  Нет комментариев »

Перенос сайта на MODx на другой сервер

Шпаргалка по переносу сайтов на MODx с одного хостинга на другой (или на/с локальный компьютер) по большому счету не особо отличается от шпаргалки по переносу блога на Wordpress

Для того, чтобы перенести сайт на MODx, потребуется скопировать сам сайт и базу данных :) Как правило, в этом заключается перенос любого сайта, который использует базу. Читать целиком »

Опубликовано Февраль 1, 2011 | автор: levik  |  Нет комментариев »