RSS Feed
Окт 6

Memcached + Doctrine + Zend Framework

Posted on Вторник, октября 6, 2009 in Doctrine, php, ZendFramework, Новости

Совмещаем все это вместе, получаем неплохое ускорение работы доктрины.

Ставим memcached

Как Установить Memcached на windows?

  1. качаем отсюда бинарник http://code.jellycan.com/memcached/
  2. ложим в c:\memcached (или другой путь)
  3. из консоли инсталим как сервис c:\memcached\memcached.exe -d install

Установка под *nix ищется на ура в гугли.

bootstrap

(привожу весь код инитера доктрины)

    /*
     * Init Doctrine
     */
 
    protected function _initDoctrine()
    {
    	$config=$this->getOption('database');
 
    	require_once 'Doctrine.php';
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace('Doctrine');
 
        try {
		Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']);
        } catch (Exception $e) {
    		echo 'FATAL ERROR: MySql is down'; exit;
	}
 
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE);
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
	Doctrine::loadModels(APPLICATION_ROOT . "/models");
 
	// Install Tables
        Doctrine::createTablesFromModels(APPLICATION_ROOT . "/models");
 
	// Cache
	$configCache=$this->getOption('cache');
 
	    // Clearer --------------------------------------------------------
	    $memcache_obj = new Memcache;
		$con=$memcache_obj->connect($configCache['host'], $configCache['port']);
		if ($con==FALSE) { echo 'FATAL ERROR: MemCache is down'; exit; }
 
		//$memcache_obj->flush(); // отчистка кеша
 // ---------------------------------------------------------------
 
	    $servers = array(
		    'host' => $configCache['host'],
		    'port' => $configCache['port'],
    		'persistent' => true
             );
 
	$cacheDriver = new Doctrine_Cache_Memcache(array(
	        'servers' => $servers,
	       	'compression' => false
	    )
	);
 
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE, $cacheDriver);
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE_LIFESPAN, 3600);
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver);
	Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 3600);
    }

Все проинииализили и сказали Doctrine что нужно использовать memcache при запросах и выдачи результата

Если у вас в проекте есть Zend_Translate то подцепляем и его:

$configCache=$this->getOption('cache');
 
$backendOptions=array(
		'host' => $configCache['host'],
		'port' => $configCache['port'],
		'persistent' => true
);
$cache = Zend_Cache::factory('Core',
		'Memcached',
		$frontendOptions,
		$backendOptions);
 
Zend_Translate::setCache($cache);

везде используются данные из конфига (ini) вот кусок:

; cache memcached
cache.host	=	localhost
cache.port	=	11211

Запросы

1. После тестов, прямые запросы (DQL) выполняются намного шустрей, т.е.:

$q = Doctrine_Query::create()
->select('id, url')
->from('NewsCategories');
 
$newsCategories= $q->execute()->toKeyValueArray("id","url");

Намного шустрей чем удобное

$newsCategories=Doctrine::getTable("NewsCategories")->findAll()->toKeyValueArray("id","url");

и плюс, в последнем запросе нельзя указывать что нужно использовать кеш (!!!)

теперь все свои запросы приводим в вид «юзай кеш»

$q = Doctrine_Query::create()
->select('id, url')
->from('NewsCategories')
->useCache();
 
$newsCategories= $q->execute()->toKeyValueArray("id","url");

все =)

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 126

Июл 19

Doctrine Accessors и Mutators

Posted on Воскресенье, июля 19, 2009 in Doctrine, php

Очень часто пароль мы хешируем, для этого есть замечательный метод hasMutator.

Пример модели:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class User extends Doctrine_Record
{
    public function setTableDefinition()
    {
        $this->hasColumn('username', 'string' 255);
        $this->hasColumn('password', 'string', 255);
    }
 
    public function setUp()
    {
       $this->hasMutator('password', 'md5Password');
    }
 
    public function md5Password($value)
    {
        $this->_set('password', md5($value));
    }
}

и теперь когда мы работаем с созданием модели, апдейтом и т.д. можно просто писать так

1
2
3
4
        $user=new Users();
        $user->username="aa";
        $user->password="haha";
        $user->save();

в базе будет положена колонка с паролем в md5

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 38

Июл 19

Doctrine & Zend Framework 1.8 (zf1.8)

Posted on Воскресенье, июля 19, 2009 in Doctrine, php, ZendFramework, Новости

В ветке 1.8 были изменены методы инициалиции, в частности все вынесенно в Bootstrap.php. Теперь о том как подключить Doctrine к ZF 1.8.4.

В конфиге (application/configs/application.ini) :

1
2
3
4
5
6
database.adapter			=	PDO_MYSQL
database.params.host			=	localhost
database.params.username		=	dbloging
database.params.password		=	dbpass
database.params.dbname			=	dbname
database.charset			=	utf8

В application/Bootstrap.php добавляем :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    protected function _initDoctrine()
    {
    	$config=$this->getOption('database');
 
    	require_once 'Doctrine.php';
        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->registerNamespace('Doctrine');
 
		Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']);
		Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE);
		Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true);
 
		Doctrine::loadModels(APPLICATION_PATH . "/models");        
    }

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 50

Июн 29

Удаление дубликатов в MySQL

Posted on Понедельник, июня 29, 2009 in php

Все банально =)

DELETE t1 FROM userlogins t1, userlogins t2 WHERE t1.login=t2.login AND t1.ID != t2.ID

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 50

Июн 8

Zend Server CE установка и настройка для Windows (Windows Zend Server Community Edition)

Posted on Понедельник, июня 8, 2009 in php, ZendFramework, Новости

Установка Zend Server CE

Рассмотрим процедуру установки и настройки сборки Zend Server CE для Windows, напомню я уже делал обзор Zend Server.

И так, мы хотим установить себе Zend Server CE (далее по тексту ZS).

Первое что нам нужно сделать, это скачать последную версию с сайта:

http://www.zend.com/products/server/downloads-all


Там выбираем пакет для Windows, на момент написания это был файл:
zs1

Скачиваем…

Теперь перейдем к настройке и установке

  1. Запускаем скачанный файл
  2. Установка доступна в 3-х вариантах: Typical, Full and Custom
    Custom
    - вы сможете сами выбрать что поставить, а что нет =) (ВЫБИРАЕМ ЭТОТ ПУНКТ)
  3. Ставим галочки напротив нужных вещей
    zs2zs3
  4. Перейдете в диалог Destination Location где нужно выбрать КУДА ставить сервер, я советую выбирать путь такой c:\zs\ (описание будет данно для этого пути)
    zs4
  5. Порт apache выбираем 80
  6. В итоге будет поставлено:
    - PHP 5.2.9
     -- Common Extensions
     -- Additional Extensions
     -- Zend Optimizer+
     -- Zend Debugger
     -- Zend Data Cache
    - Zend Framework 1.8.2
     -- Zend Framework Base
    - phpMyAdmin
    - MySQL Server
    - Apache Web Server on port 80
  7. Жмем Install. Будет загруженно дополнительно phpmyadmin (почему то 2.11.9.3 – я обычно потом ставлю ветку 3.x) и mysql сервер.

Настройка Zend Server CE

Заходим в панель управления:
http://localhost/ZendServer/

zs5

Вводим свой пароль, входим. Там можете поиграть с GUI =)

Но мы пойдем дальше…

Первое что я меняю, так это делаю vhosts т.к. все таки мы не один сайт разрабатываем, а много, для этого делаем изменения:

1. У меня все сайты лежать в папке c:/www

2. Создаем файл c:/www/vhosts.conf в нем пишем наши сайты:

NameVirtualHost *:80

<VirtualHost 127.0.0.1>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\phpmyadmin»
ServerName 127.0.0.1
ServerAlias www.phpmyadmin
</VirtualHost>

<VirtualHost 127.0.0.2>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\site1″
ServerName 127.0.0.2
ServerAlias www.site1
</VirtualHost>

и т.д., меняем айпи и папку где лежит сайт.

3. Меняем конфиг апача c:/zs/Apache2/conf/httpd.conf

Добавим строку в конце:

Include c:/www/vhosts.conf

Строки:

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>

переделываем на

<Directory />
#    Options FollowSymLinks
#    AllowOverride None
#    Order deny,allow
#    Deny from all
</Directory>

4. Запустим апач, если все запустилось, то при открытии http://127.0.0.1 у нас будет phpMyAdmin (предварительно туда его желательно залить -) )

Собственно это все.

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 1 718

Июн 5

Zend Server 4.0.3 & Zend Studio 7.0 Early Access Release

Posted on Пятница, июня 5, 2009 in php, ZendFramework, Новости

studio-7-0-ea-imageВышли обновления для таких вещей как Zend Server до версии 4.0.3.

Основное это переход на PHP 5.3 (RC2).

Скачать Zend Server можно по ссылке:
http://www.zend.com/en/products/server/downloads-ea

Теперь более глобальное обновление Zend Studio до версии 7.0 !!!!

  • Zend Studio базируется на последней версии Eclipse (Galileo).
  • Поддержка PHP 5.3 (Namespace)
  • Улучшение редактора кода
  • Поддержка интеграции Zend Server

Теперь Zend Studio еще больше интегриновать с Zend Framework:

  • Легкое создание любых элементов Zend Framework
  • Настраиваемый дефолтный проект
  • Обновленные примеры работы
  • Интеграция Zend Tool

Скачать Zend Studio 7.0 и потестить можете по ссылке:
http://www.zend.com/en/products/studio/studio-7-early-access

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 30

мая 13

Обновления Zend Framework 1.8.1 и Doctrine 1.1.1

Posted on Среда, мая 13, 2009 in Doctrine, ZendFramework, Новости

Обновляемся  на новые версии фреймворка и doctrine.

Zend Framework качаем тут:
http://framework.zend.com/download/latest

обзор прошлой версии смотрим тут
http://devzone.zend.com/article/4524-Zend-Framework-1.8.0-Released

В данной версии исправленно более 68 ошибок в коде,  ошибки в документации и «Быстром старте». Так же сделанны изменения (без перевода)

  • Zend_Loader::registerAutoload() now proxies to Zend_Loader_Autoloader, and marks the instance as a fallback autoloader. This will ensure equivalent functionality, and reduces the number of deprecation notices emitted to one.
  • Many bugfixes and improvements to Zend_Application.
  • Addition of module generation capabilities to Zend_Tool
  • Addition of strong object typing capabilities to Zend_Amf
  • Many more manual translations!

Полный список тут: http://short.ie/zf1-8-1-issues

Doctrine

Качаем как обычно с http://www.doctrine-project.org/download

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 19

Мар 30

Debug Bar для Zend Framework

Posted on Понедельник, марта 30, 2009 in php, ZendFramework, Новости

2009-scienta_debugbar

Сначала подобная штука появилась в Symfony, потом сделали для Kohana и CodeIgniter и теперь сделали для Zend Framework.

Читаем как установить и настроить по адресу: http://jokke.dk/software/scientadebugbar

Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

Уникальных посетителей темы: 38

Мар 24

ZendFramework 1.7.7

Posted on Вторник, марта 24, 2009 in php, ZendFramework, Новости

Как ни странно, но не в новостях на самом zend.com, ни в их рассылке (видемо сейчас вся команда _упорно_ работает над Zend Server) но вышла версия ZendFramework 1.7.7 !!!

Вот список изменений:

  • Zend_Amf with support for AMF0 and AMF3 protocols
  • Dojo Toolkit 1.2.1
  • Support for dijit editor available in the Dojo Toolkit
  • ZendX_JQuery in extras library (see extras folder in the full package
  • Metadata API in Zend_Cache
  • Google book search API in Zend_Gdata
  • Preliminary support for GData Protocol v2 in Zend_Gdata
  • Support for skip data processing in Zend_Search_Lucene
  • Support for Open Office XML documents in Zend_Search_Lucene indexer
  • Performance enhancements in Zend_Loader, Zend_Controller, and server components
  • Zend_Mail_Storage_Writable_Maildir enhancements for mail delivery
  • Zend_Tool in incubator (see incubator folder in the full package)
  • Zend_Text_Table for formatting table using characters
  • Zend_ProgressBar
  • Zend_Config_Writer
  • ZendX_Console_Unix_Process in the extras library
  • Zend_Db_Table_Select support for Zend_Paginator
  • Global parameters for routes
  • Using Chain-Routes for Hostname-Routes via Zend_Config
  • I18N improvements:
    - Application wide locale for all classes
    - Data retrieving methods are now static
    - Additional cache handling methods in all I18N classes
    - Zend_Translate API simplified

    • File transfer enhancements
      - Support for file elements in subforms
      - Support for multifile elements
      - Support for MAX_FILES_SIZE in form
      - Support for breaking validation chain
      - Support for translation of failure ,messages
      - New IsCompressed, IsImage, ExcludeMimeType, ExcludeExtension validators
      - Support for FileInfo extension in MimeType validator
    • Zend_Db_Table_Select adapater for Zend_Paginator
    • Support for custom adapters in Zend_Paginator
    • More flexible handling of complex types in Zend_Soap

    Полный список изменений и фиксов доступен по адресу:

    http://framework.zend.com/issues/secure/IssueNavigator.jspa?requestId=10970

    Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

    Уникальных посетителей темы: 27

    Мар 19

    Doctrine 1.1 Released !

    Posted on Четверг, марта 19, 2009 in Doctrine, php, Новости

    Сегодня была зарелизина Doctrine 1.1 !

    Новшества:
    * Новый hydration метод
    * Новый иструмент для «объединений» миграций
    * Улучшена поддержка и интеграция для accessor и mutator в fromArray() и toArray()
    * Усовершенствования в getModified(), toArray(), fromArray(), synchronizeWithArray()
    * Усовершенствования ядро для поиска, SoftDelete, Versionable
    * и т.д.

    Более подробную информацию о новшествах можно прочитать тут http://www.doctrine-project.org/upgrade/1_1

    Скачать Doctrine 1.1

    или обновляем по svn:

    $ svn co http://svn.doctrine-project.org/tags/1.1.0/lib doctrine

    upd: Нашел удобную для себя функцию:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    $q = Doctrine_Query::create()
        ->from('User u');
    $users = $q->execute();
     
    $array = $users->toKeyValueArray('id', 'name');
    print_r($array);
     
    /*
    array(
      4 => 'zYne',
      5 => 'Arnold Schwarzenegger',
      6 => 'Michael Caine',
      7 => 'Takeshi Kitano',
      8 => 'Sylvester Stallone',
      9 => 'Kurt Russell',
      10 => 'Jean Reno',
      11 => 'Edward Furlong',
    )
    */

    Что есть очень удобно для передачи потом виеву для формирование полей значений для select!

    Google Bookmarks Digg Reddit del.icio.us Ma.gnolia Technorati Slashdot Yahoo My Web News2.ru БобрДобр.ru RUmarkz Ваау! Memori.ru rucity.com МоёМесто.ru Mister Wong

    Уникальных посетителей темы: 17