<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkQBQ3o8fSp7ImA9WxNUGEg.&quot;"><id>tag:blogger.com,1999:blog-37345659</id><updated>2009-11-10T14:59:12.475+03:00</updated><title>Заметки разработчика</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://broderix.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/web-development-notes" type="application/atom+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DkYHSXwzfip7ImA9WxJUFks.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1512399967541427520</id><published>2009-07-15T17:13:00.003+04:00</published><updated>2009-07-15T17:22:18.286+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-15T17:22:18.286+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Полезные заметки по symfony - 2</title><content type="html">Если надо использовать функции из View в Controller, то надо вопользоваться sfLoader&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class blogActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function preExecute(){&lt;br /&gt;   ...&lt;br /&gt;  }&lt;br /&gt;  public function executeRedirect(sfWebRequest $request)&lt;br /&gt;  {&lt;br /&gt;    sfLoader::loadHelpers('Url');&lt;br /&gt;    $this-&gt;redirect(url_for('@archive_blog?id='.$this-&gt;currentBlog-&gt;getId(), 301);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Но лучше использовать внутренние средства, в symfony почти для каждого из составляющих MVC если дублирующие средства:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class blogActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function preExecute(){&lt;br /&gt;   ...&lt;br /&gt;  }&lt;br /&gt;  public function executeRedirect(sfWebRequest $request)&lt;br /&gt;  {&lt;br /&gt;    sfLoader::loadHelpers('Url');&lt;br /&gt;    $this-&gt;redirect(&lt;br /&gt;      $this-&gt;getController()-&gt;genUrl('@archive_blog?id='.$this-&gt;currentBlog-&gt;getId()),&lt;br /&gt;      301&lt;br /&gt;    );&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Исключение составляет вызов action из View, как например в ZendFramework, но в symfony похоже это не трубуется (прим. автора: по крайней мере в моей практике).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1512399967541427520?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/BbgLsj-XSRlDjnujpYhi-i3Btmc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BbgLsj-XSRlDjnujpYhi-i3Btmc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/BbgLsj-XSRlDjnujpYhi-i3Btmc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/BbgLsj-XSRlDjnujpYhi-i3Btmc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1512399967541427520/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=1512399967541427520" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1512399967541427520?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1512399967541427520?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/s_alXM0CtSU/symfony-2.html" title="Полезные заметки по symfony - 2" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/07/symfony-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQESXo-cCp7ImA9WxJUEEg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-908767855766564438</id><published>2009-07-08T16:11:00.008+04:00</published><updated>2009-07-08T16:31:48.458+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-08T16:31:48.458+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="sfWidget" /><title>Как добавить в форму admin генератора ссылку</title><content type="html">К примеру у вас есть backend (admin) и вам нужно поставить ссылку на какой нибудь ресурс. &lt;br /&gt;Для этого нужно создать свой виджет, например, такой:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;class sfWidgetFormHtmlLink extends sfWidgetForm&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  protected function configure($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;addOption('url', false);&lt;br /&gt;    $this-&gt;addOption('target', 'self');  // self, blank&lt;br /&gt;    $this-&gt;addOption('route', false);&lt;br /&gt;    $this-&gt;addOption('name', true);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public function render($name, $value = null, $attributes = array(), $errors = array())&lt;br /&gt;  {&lt;br /&gt;    if($this-&gt;getOption('route')){&lt;br /&gt;      return link_to(&lt;br /&gt;        $this-&gt;getOption('name'),&lt;br /&gt;        $this-&gt;getOption('route'),&lt;br /&gt;        array('target'=&gt;'_'.$this-&gt;getOption('target'))&lt;br /&gt;      );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    if($this-&gt;getOption('url')){&lt;br /&gt;      return "&amp;lt;a href='".$this-&gt;getOption('name').&lt;br /&gt;        "' target='_".$this-&gt;getOption('target')."'&amp;gt;".&lt;br /&gt;        $this-&gt;getOption('name')."&amp;lt;/a&amp;gt;";&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Теперь его просто использовать:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class SomeForm extends BaseSomeForm&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  public function configure()&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;setWidget('external_link',new sfWidgetFormHtmlLink(array('url'=&gt;'http://ya.ru','name'=&gt;'Поискать')));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Меняя метод render можно создать свой виджет по выводу какого-либо html текста и т.д.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-908767855766564438?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/srN9Mw6ObsIndTPhyrSvDD9HYa8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/srN9Mw6ObsIndTPhyrSvDD9HYa8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/srN9Mw6ObsIndTPhyrSvDD9HYa8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/srN9Mw6ObsIndTPhyrSvDD9HYa8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/908767855766564438/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=908767855766564438" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/908767855766564438?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/908767855766564438?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/Tk7yaUIaXTI/admin.html" title="Как добавить в форму admin генератора ссылку" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/07/admin.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0INQ385eyp7ImA9WxJWEk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-5323530814654485108</id><published>2009-06-17T13:01:00.002+04:00</published><updated>2009-06-17T13:06:32.123+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T13:06:32.123+04:00</app:edited><title>Полезные заметки по symfony - 1</title><content type="html">Установка meta html данных:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class SomeObjectActions extends sfActions&lt;br /&gt;{&lt;br /&gt;  public function executeShowObject(sfWebRequest $request){&lt;br /&gt;    ...&lt;br /&gt;    $this-&gt;getResponse()-&gt;setTitle($this-&gt;object-&gt;getMetaTitle());&lt;br /&gt;    $this-&gt;getResponse()-&gt;addMeta('meta_keywords', $this-&gt;object-&gt;getMetaKeywords());&lt;br /&gt;    $this-&gt;getResponse()-&gt;addMeta('meta_description', $this-&gt;object-&gt;getMetaDescription());&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-5323530814654485108?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IHn2IHUOucBLMnmEl8JXzk7g7EY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IHn2IHUOucBLMnmEl8JXzk7g7EY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IHn2IHUOucBLMnmEl8JXzk7g7EY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IHn2IHUOucBLMnmEl8JXzk7g7EY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/5323530814654485108/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=5323530814654485108" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5323530814654485108?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/5323530814654485108?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/uoLSBOHEelk/symfony-1.html" title="Полезные заметки по symfony - 1" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/symfony-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYCSHgzfip7ImA9WxJWEk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3237339801534369977</id><published>2009-06-17T11:24:00.003+04:00</published><updated>2009-06-17T11:36:09.686+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-17T11:36:09.686+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Правильное использование sfWidgetFormTextareaTinyMCE</title><content type="html">sfWidgetFormTextareaTinyMCE - это виджет, HTML WYSIWYG editor. Очень удобная вешь, но в &lt;a href="http://www.symfony-project.org/blog/2008/10/18/spice-up-your-forms-with-some-nice-widgets-and-validators"&gt;блоге&lt;/a&gt; symfony очень скудно описан принцип работы, точнее в последней версии возникает ошибка:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;You must pass a "class" attribute for a TinyMCE widget&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Вот, как и какой класс надо указывать:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;    $this-&gt;setWidget('text', new sfWidgetFormTextareaTinyMCE(array(&lt;br /&gt;      'width'  =&gt; 650,&lt;br /&gt;      'height' =&gt; 550,&lt;br /&gt;      'config' =&gt; 'theme_advanced_disable: "anchor,image,cleanup,help"',&lt;br /&gt;    )&lt;br /&gt;    ,array(&lt;br /&gt;   'class' =&gt; 'tinyMCE',&lt;br /&gt;    )&lt;br /&gt;  ));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;в генераторе (если вы используете его в backend) generator.yml укажите class в атрибутах&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;    config:&lt;br /&gt;      actions: ~&lt;br /&gt;      fields:&lt;br /&gt;        text:  { label: 'Текст', attributes: { class: "tinyMCE" } }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;еще обсуждение &lt;a href="http://forum.symfony-project.org/index.php/t/18293/"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3237339801534369977?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7GO5ebcy9nlU9ptbJerhd-9cAi4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GO5ebcy9nlU9ptbJerhd-9cAi4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7GO5ebcy9nlU9ptbJerhd-9cAi4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GO5ebcy9nlU9ptbJerhd-9cAi4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3237339801534369977/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=3237339801534369977" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3237339801534369977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3237339801534369977?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dG3z3WITq1E/sfwidgetformtextareatinymce.html" title="Правильное использование sfWidgetFormTextareaTinyMCE" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/sfwidgetformtextareatinymce.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMFQX06fSp7ImA9WxJWEUg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3857245966501749304</id><published>2009-06-16T14:55:00.003+04:00</published><updated>2009-06-16T15:06:50.315+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-16T15:06:50.315+04:00</app:edited><title>Как заставить mysql5 использовать нужный вам default-character и collation</title><content type="html">Для начала посмотрите что у вас есть&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;SHOW VARIABLES LIKE 'character_set%';&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| Variable_name            | Value                      |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| character_set_client     | utf8                       | &lt;br /&gt;| character_set_connection | utf8                       | &lt;br /&gt;| character_set_database   | utf8                       | &lt;br /&gt;| character_set_filesystem | binary                     | &lt;br /&gt;| character_set_results    | utf8                       | &lt;br /&gt;| character_set_server     | utf8                       | &lt;br /&gt;| character_set_system     | utf8                       | &lt;br /&gt;| character_sets_dir       | /usr/share/mysql/charsets/ | &lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;8 rows in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;По умолчанию Value=latin1&lt;br /&gt;&lt;br /&gt;Теперь вы хотите чтобы все клиенты mysql сразу использовали нужную ва кодировку:&lt;br /&gt;utf8,cp1251 или koi8r&lt;br /&gt;&lt;br /&gt;Нужно добавить в файл my.cnf&lt;br /&gt;/etc/mysql/my.cnf&lt;br /&gt;&lt;br /&gt;Слудущие переменные:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;[client]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;[mysqld]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;default-collation=utf8_general_ci&lt;br /&gt;character-set-server=utf8&lt;br /&gt;init-connect='SET NAMES utf8;'&lt;br /&gt;collation-server=utf8_general_ci&lt;br /&gt;[mysql]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;После изменений перезагружайте сервер.&lt;br /&gt;/etc/init.d/mysql restart&lt;br /&gt;&lt;br /&gt;Если не работает еще раз проверьте что у вас происходит:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;SHOW VARIABLES LIKE 'character_set%';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;проверьте кодировку базы данных:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;mysql&gt; show create database yourdatabase;&lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;| Database    | Create Database                                                      |&lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;| yourdatabase | CREATE DATABASE `yourdatabase` /*!40100 DEFAULT CHARACTER SET utf8 */ | &lt;br /&gt;+-------------+----------------------------------------------------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Кодировка по умолчанию для создания таблиц наследуется.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3857245966501749304?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/MtSC7KUQXqz9Mp2LtktUJeFI2pM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtSC7KUQXqz9Mp2LtktUJeFI2pM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/MtSC7KUQXqz9Mp2LtktUJeFI2pM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/MtSC7KUQXqz9Mp2LtktUJeFI2pM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3857245966501749304/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=3857245966501749304" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3857245966501749304?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3857245966501749304?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/WGugnxym9lM/mysql5-default-character-collation.html" title="Как заставить mysql5 использовать нужный вам default-character и collation" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/mysql5-default-character-collation.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4CQHYzfip7ImA9WxJWEEo.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-643971718967182737</id><published>2009-06-15T17:34:00.001+04:00</published><updated>2009-06-15T17:36:01.886+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-15T17:36:01.886+04:00</app:edited><title>Смена часового пояса в linux</title><content type="html">$ cd /etc; ln -sf /usr/share/zoneinfo/Europe/Moscow localtime&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-643971718967182737?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/pc7riFD8BWgfcoNkeHJVPxhTERA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pc7riFD8BWgfcoNkeHJVPxhTERA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/pc7riFD8BWgfcoNkeHJVPxhTERA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/pc7riFD8BWgfcoNkeHJVPxhTERA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/643971718967182737/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=643971718967182737" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/643971718967182737?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/643971718967182737?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/gUDFknYIlaI/linux.html" title="Смена часового пояса в linux" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/06/linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEINR3g9eCp7ImA9WxJSF0U.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3986923997191341908</id><published>2009-05-08T16:43:00.001+04:00</published><updated>2009-05-08T16:43:16.660+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T16:43:16.660+04:00</app:edited><title>Полезные команды для web-разработчика</title><content type="html">Искать любое упоминание чего-либо в проекте, исключая системные svn файлы:&lt;br&gt;&lt;b&gt;grep -Rn &amp;#39;mysql.php&amp;#39; ./ | grep -v svn&lt;/b&gt;&lt;br&gt;&lt;br&gt;Перенести изменения из одного проекта в другой методом патча:&lt;br&gt;&lt;b&gt;project1 $ svn diff &amp;gt; filename.patch&lt;br&gt;  &lt;/b&gt;&lt;b&gt;project2 $ &lt;/b&gt;&lt;b&gt;patch -p0 -i ../project1/filename.patch&lt;/b&gt;&lt;br&gt;&lt;br&gt;Собрать файлы в архив по определенному принципу, в данном случае измененные и добавленные файлы: &lt;br&gt;&lt;b&gt;perl -e &amp;#39;$res = `svn stat|grep -E &amp;quot;A|M&amp;quot;`; $res =~ s/^.\s*//g; $res =~ s/(\n.\s*)/ /g; `tar cfz 1.tgz $res`;&amp;#39;&lt;/b&gt;&lt;br&gt; &lt;br&gt;&lt;br&gt;В буду дальнейшем буду пополнять, есть что то вспомню.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3986923997191341908?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kFvbS6-rBb5ber6GE-9PuBotP1Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kFvbS6-rBb5ber6GE-9PuBotP1Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kFvbS6-rBb5ber6GE-9PuBotP1Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kFvbS6-rBb5ber6GE-9PuBotP1Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3986923997191341908/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=3986923997191341908" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3986923997191341908?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3986923997191341908?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dgwXAk5zL4I/web.html" title="Полезные команды для web-разработчика" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/05/web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkcBR3gyeSp7ImA9WxVbEkg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-32996035933057508</id><published>2009-03-28T17:14:00.003+03:00</published><updated>2009-03-28T17:20:56.691+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-28T17:20:56.691+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Segmentation fault в php5</title><content type="html">Взгляните на этот код:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class A extends B&lt;br /&gt;{&lt;br /&gt;  public function getA(){&lt;br /&gt;    if($this-&gt;getA()){&lt;br /&gt;      return $this-&gt;getA();&lt;br /&gt;    } else {&lt;br /&gt;      return $this-&gt;getB();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;С первого взгляда все верно. Но выдает:&lt;br /&gt;[Sat Mar 28 17:12:59 2009] [notice] child pid 11239 exit signal Segmentation fault (11)&lt;br /&gt;&lt;br /&gt;Образуется цикл, тогда надо:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class A extends B&lt;br /&gt;{&lt;br /&gt;  public function getA(){&lt;br /&gt;    if(parent::getA()){&lt;br /&gt;      return parent::getA();&lt;br /&gt;    } else {&lt;br /&gt;      return $this-&gt;getB();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-32996035933057508?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/j_YlMeCcazr2xjfZCTzSwMk-p1c/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j_YlMeCcazr2xjfZCTzSwMk-p1c/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/j_YlMeCcazr2xjfZCTzSwMk-p1c/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/j_YlMeCcazr2xjfZCTzSwMk-p1c/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/32996035933057508/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=32996035933057508" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/32996035933057508?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/32996035933057508?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/qwNwD7Y-Pls/segmentation-fault-php5.html" title="Segmentation fault в php5" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/segmentation-fault-php5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMRXg8cCp7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4098507895609117545</id><published>2009-03-25T16:28:00.002+03:00</published><updated>2009-03-25T18:53:04.678+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T18:53:04.678+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ssh" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Монтирование(mount) файловой системы по ssh</title><content type="html">sudo apt-get install sshfs&lt;br /&gt;&lt;br /&gt;sudo sshfs -o allow_other username@hostname.ru:/home/usernamedir /home/usermountdir&lt;br /&gt;&lt;br /&gt;Можно создать файл mount.sh и сделать ярлык для запуска на него. Gnome легко определяет что надо ввести пароль для ssh и предлагает сделать это через GUI&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s1600-h/open_ssh.png"&gt;&lt;img style="cursor: pointer; width: 240px; height: 174px;" src="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s320/open_ssh.png" alt="" id="BLOGGER_PHOTO_ID_5317153830742121954" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4098507895609117545?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q7LKWyGLbaOc5swYRrTmPNKcx7M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7LKWyGLbaOc5swYRrTmPNKcx7M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q7LKWyGLbaOc5swYRrTmPNKcx7M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q7LKWyGLbaOc5swYRrTmPNKcx7M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4098507895609117545/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=4098507895609117545" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4098507895609117545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4098507895609117545?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/pL6rwVVfyW0/mount-ssh.html" title="Монтирование(mount) файловой системы по ssh" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_67GcH7V6PNQ/ScpTPNF93eI/AAAAAAAAFkA/Ys7UmZPoiME/s72-c/open_ssh.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/mount-ssh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YGRnY7eyp7ImA9WxVUGUQ.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1731639332615448193</id><published>2009-03-24T02:11:00.006+03:00</published><updated>2009-03-25T19:38:47.803+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-25T19:38:47.803+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>Необходимые компоненты для работы symfony в Ubuntu</title><content type="html">Недавно переставил систему с ubuntu 8.10 x86 на ubuntu 9.04 x86_64 на свой рабочий acer aspire 5720G.&lt;br /&gt;Пришлось настраивать систему заново, но так как я сейчас разрабатываю только под symfony. Настраивал работу системы как раз для симфони, поэтому можно рассматривать этот пост как &lt;span style="font-weight: bold;"&gt;Необходимые компоненты для работы symfony в Ubuntu&lt;/span&gt;.&lt;br /&gt;Поставим apache и php5.&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;sudo apt-get install apache2 php5-mysql libapache2-mod-php5 php5-common mysql-server mysql-common mysql-client-5.0 php5-cli php5-xsl&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Устанавливаем кодировку по умолчанию для mysql:&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;sudo mcedit /etc/mysql/my.cnf&lt;br /&gt;или&lt;br /&gt;sudo nano /etc/mysql/my.cnf&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;добавить в конец строчки:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;default-character-set=utf8&lt;br /&gt;character_set_client=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;вместо utf8 можно любую другую, например cp1251&lt;br /&gt;&lt;br /&gt;Ставим svn. Если не используете, то можно пропустить.&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;apt-get install subversion&lt;br /&gt;&lt;br /&gt;libapache2-svn ssl-cert libapache2-svn - опционально&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="prettyprint"&gt;&lt;br /&gt;Ставим symfony:&lt;br /&gt;sudo mkdir -p /usr/share/php5/symfony-1.2/&lt;br /&gt;sudo svn co http://svn.symfony-project.com/branches/1.2 /usr/share/php5/symfony-1.2/&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;VirtualHost 127.0.0.1:80&amp;gt;&lt;br /&gt;       ServerAdmin webmaster@localhost&lt;br /&gt;       DocumentRoot /var/www/symfony/web/&lt;br /&gt;       &amp;lt;Directory /&gt;&lt;br /&gt;               Options FollowSymLinks Indexes&lt;br /&gt;               AllowOverride All&lt;br /&gt;       &amp;lt;/Directory&amp;gt;&lt;br /&gt;       ErrorLog /var/log/apache2/error.log&lt;br /&gt;       LogLevel warn&lt;br /&gt;       CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Если проект начинаете с нуля:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;wget http://www.symfony-project.org/get/sf_sandbox_1_2.tgz&lt;br /&gt;&lt;br /&gt;tar xfz sf_sandbox_1_2.tgz&lt;br /&gt;cp sf_sandbox&lt;br /&gt;mv sf_sandbox/* /var/www/symfony/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Подключаем библиотеку symfony. В файле:&lt;br /&gt;&lt;pre class="prettyprint"&gt;/var/www/symfony/config/ProjectConfiguration.class.php&lt;br /&gt;&lt;br /&gt;меняем на:&lt;br /&gt;&lt;br /&gt;require_once '/usr/share/php5/symfony-1.2/lib/autoload/sfCoreAutoload.class.php';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Проверяем&lt;br /&gt;cp /var/www/symfony/&lt;br /&gt;./symfony&lt;br /&gt;&lt;br /&gt;если все без ошибок, то можно приступать к работе&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1731639332615448193?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/29koelVjYnag0WSw8OBbH9JJ6g4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/29koelVjYnag0WSw8OBbH9JJ6g4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/29koelVjYnag0WSw8OBbH9JJ6g4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/29koelVjYnag0WSw8OBbH9JJ6g4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1731639332615448193/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=1731639332615448193" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1731639332615448193?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1731639332615448193?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/n1fPtIL_qTc/symfony-ubuntu.html" title="Необходимые компоненты для работы symfony в Ubuntu" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/symfony-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMEQH0-eCp7ImA9WxVUGEg.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-3227562177499645171</id><published>2009-03-23T22:33:00.004+03:00</published><updated>2009-03-24T02:53:21.350+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-24T02:53:21.350+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="sfWidget" /><title>Группировка виджетов(sfWidget) в админ генераторе(admin-generator) для symfony 1.2</title><content type="html">Сегодня мне понадобилось динамически стороить элементы формы в админ генераторе и группировать их.&lt;br /&gt;Это оказалось не столь простой задачей.&lt;br /&gt;Я использую symfony 1.2.5-DEV из svn.&lt;br /&gt;Сразу оговорюсь, что строить из embedded forms я не хочу, т.к. элементы динамические.&lt;br /&gt;Вот мои действия. Постоим простейший вариант:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;   $this-&gt;widgetSchema['group0'] = new sfWidgetFormSchema(array(&lt;br /&gt;     'name0'    =&gt; new sfWidgetFormInput(),&lt;br /&gt;     'email0'   =&gt; new sfWidgetFormInput(),&lt;br /&gt;   ));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0_name0"&amp;gt;Name0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;input name="t_object_key[group0][name0]" id="t_object_key_group0_name0" type="text"&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;input name="t_object_key[group0][email0]"id="t_object_key_group0_email0" type="text"&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh6.ggpht.com/_67GcH7V6PNQ/ScIJ05P8pnI/AAAAAAAAFjo/cpeopqdAY4w/001.png"/&gt;&lt;br /&gt;&lt;br /&gt;Смотрится - не очень. Тогда покопавшись в коде я попробовал указать FormFormatter:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$decorator = new sfWidgetFormSchemaFormatterTable($this-&gt;widgetSchema&lt;br /&gt;['group0']);&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;addFormFormatter('custom', $decorator);&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;setFormFormatterName('custom');&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Эффект тот же.&lt;br /&gt;Тогда я использовал RowFormat:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$this-&gt;widgetSchema['group0']-&gt;getFormFormatter()-&gt;setRowFormat&lt;br /&gt;("\n&amp;lt;table&amp;gt;  &amp;lt;th&amp;gt;%label%&amp;lt;/th&amp;gt;\n  &amp;lt;td&amp;gt;%error%%field%%help%&lt;br /&gt;%hidden_fields&lt;br /&gt;%&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_name0"&lt;br /&gt;  &amp;gt;Name0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][name0]"id="t_object_key_group0_name0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;lt;label&lt;br /&gt;for="t_object_key_group0_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][email0]" id="t_object_key_group0_email0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh5.ggpht.com/_67GcH7V6PNQ/ScIJ10PrZrI/AAAAAAAAFjw/Mky9MT0VoZc/002.png"/&gt;&lt;br /&gt;&lt;br /&gt;Тоже не то что я ожидал.&lt;br /&gt;И выходом из всего этого будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;   $this-&amp;gt;widgetSchema['group0'] = new sfWidgetFormSchema(array(&lt;br /&gt;     'grouped' =&amp;gt; new sfWidgetFormSchema(array(&lt;br /&gt;     'name0'    =&amp;gt; new sfWidgetFormInput(),&lt;br /&gt;     'email0'   =&amp;gt; new sfWidgetFormInput(),&lt;br /&gt;   ))&lt;br /&gt;   ));&lt;br /&gt;$this-&amp;gt;widgetSchema['group0']-&amp;gt;getFormFormatter()-&amp;gt;setRowFormat&lt;br /&gt;("\n&amp;lt;table&amp;gt;  &amp;lt;th&amp;gt;%label%&amp;lt;/th&amp;gt;\n  &amp;lt;td&amp;gt;%error%%field%%help%&lt;br /&gt;%hidden_fields&lt;br /&gt;%&amp;lt;/td&amp;gt;\n&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;сгенерированный html код будет:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;div&amp;gt;&lt;br /&gt;  &amp;lt;label for="t_object_key_group0"&amp;gt;Group0&amp;lt;/label&amp;gt;&lt;br /&gt;  &amp;lt;table&amp;gt;  &amp;lt;tbody&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Grouped&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_grouped_name0"&amp;gt;Name0&amp;lt;/label&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][grouped][name0]"&lt;br /&gt;id="t_object_key_group0_grouped_name0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;  &amp;lt;th&amp;gt;&amp;lt;label for="t_object_key_group0_grouped_email0"&amp;gt;Email0&amp;lt;/label&amp;gt;&amp;lt;/&lt;br /&gt;th&amp;gt;&lt;br /&gt;  &amp;lt;td&amp;gt;&amp;lt;input name="t_object_key[group0][grouped][email0]"&lt;br /&gt;id="t_object_key_group0_grouped_email0" type="text"&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/tbody&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_67GcH7V6PNQ/ScIJ2J4ZXSI/AAAAAAAAFj4/GGgFUzxcAdM/003.png"/&gt;&lt;br /&gt;&lt;br /&gt;Это и есть то что нам надо.&lt;br /&gt;Похоже на то, что setFormFormatterName работает только с embedded forms.&lt;br /&gt;Я пытался попросить объяснений это на &lt;a href="http://groups.google.com/group/symfony-users/browse_thread/thread/4cd842e30f9ed0eb"&gt;гугл групс&lt;/a&gt;, но без результатно.&lt;br /&gt;&lt;br /&gt;Теперь самое интересное. Как же будет выглядеть валидатор:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;$this-&gt;validatorSchema['group0'] = new sfValidatorSchema(array(&lt;br /&gt;  'grouped' =&gt; new sfValidatorSchema(array(&lt;br /&gt;    'name0'    =&gt; new sfValidatorInteger(),&lt;br /&gt;    'email0'   =&gt; new sfValidatorString(),&lt;br /&gt;  ))&lt;br /&gt;));&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Таким образом используя sfWidgetFormSchema можно делать сгруппированные формы любой вложенности.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-3227562177499645171?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/e04vaCp39ZZLidgX7Gj_H-wJjjc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e04vaCp39ZZLidgX7Gj_H-wJjjc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/e04vaCp39ZZLidgX7Gj_H-wJjjc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/e04vaCp39ZZLidgX7Gj_H-wJjjc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/3227562177499645171/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=3227562177499645171" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3227562177499645171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/3227562177499645171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/xLEbsMmz1BU/sfwidget-admin-generator-symfony-12.html" title="Группировка виджетов(sfWidget) в админ генераторе(admin-generator) для symfony 1.2" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/sfwidget-admin-generator-symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEAQHY5eSp7ImA9WxVUF0g.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4358012449083314082</id><published>2009-03-23T00:03:00.002+03:00</published><updated>2009-03-23T00:17:21.821+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-23T00:17:21.821+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><title>Интересный момент в mysql 5 для foreign key</title><content type="html">&lt;pre class="prettyprint"&gt;CREATE TABLE `key` (&lt;br /&gt;  `id` int(11) NOT NULL auto_increment,&lt;br /&gt;  `name` varchar(255) NOT NULL,&lt;br /&gt;  `slug` varchar(128) NOT NULL,&lt;br /&gt;  `group_id` int(11) NOT NULL,&lt;br /&gt;  `parent_id` int(11) default '0',&lt;br /&gt;  `comp_id` int(11) default NULL,&lt;br /&gt;  PRIMARY KEY  (`id`),&lt;br /&gt;  KEY `key_FI_1` (`group_id`),&lt;br /&gt;  KEY `key_FI_2` (`parent_id`),&lt;br /&gt;  CONSTRAINT `key_FK_1` FOREIGN KEY (`group_id`) REFERENCES `key_group` (`id`) ON DELETE CASCADE,&lt;br /&gt;  CONSTRAINT `key_FK_2` FOREIGN KEY (`parent_id`) REFERENCES `key` (`id`) ON DELETE CASCADE&lt;br /&gt;) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;С первого взгляда все ок.&lt;br /&gt;Теперь попробуем вставить запись:&lt;br /&gt;&lt;pre class="prettyprint"&gt;insert into key (name,group_id) values ('ключ1',1)&lt;/pre&gt;&lt;br /&gt;выходит ошибка&lt;br /&gt;&lt;pre class="prettyprint"&gt;mysql&gt;ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`database/key`, CONSTRAINT `key_FK_2` FOREIGN KEY (`parent_id`) REFERENCES `key` (`id`) ON DELETE CASCADE)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Дело оказывается в `parent_id` int(11) default '0' , т.к. нет записи с id=0. &lt;br /&gt;Правильнее сделать `parent_id` int(11) default NULL. &lt;br /&gt;&lt;br /&gt;Мне кажется в propel при генерации из схемы можно сделать проверку на defaultValue, т.к. в купе с foreign key это уже ошибочно в большинстве случаев.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4358012449083314082?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b1rwe96LabnlNWm1Hhkbl51h7Ws/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b1rwe96LabnlNWm1Hhkbl51h7Ws/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b1rwe96LabnlNWm1Hhkbl51h7Ws/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b1rwe96LabnlNWm1Hhkbl51h7Ws/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4358012449083314082/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=4358012449083314082" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4358012449083314082?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4358012449083314082?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/1fOcbOimnaw/mysql-5-foreign-key.html" title="Интересный момент в mysql 5 для foreign key" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/mysql-5-foreign-key.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkANSHk_fip7ImA9WxNQEUs.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4266163805679197742</id><published>2009-03-22T12:59:00.004+03:00</published><updated>2009-09-17T08:13:19.746+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-17T08:13:19.746+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="Propel" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Правильное расширение базовых классов Propel в symfony 1.2</title><content type="html">Пусть наша модель называется SomeModel, тогда методом для извлечения объекта по строке(slug) будет:&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;class SomeModelPeer extends BaseSomeModelPeer&lt;br /&gt;{&lt;br /&gt;  public static function retrieveBySlug($slug, PropelPDO $con = null){&lt;br /&gt;    if (null !== ($obj = SomeModelPeer::getInstanceFromPool((string) $slug))) {&lt;br /&gt;      return $obj;&lt;br /&gt;    }&lt;br /&gt;    if ($con === null) {&lt;br /&gt;      $con = Propel::getConnection(self::DATABASE_NAME, Propel::CONNECTION_READ);&lt;br /&gt;    }&lt;br /&gt;    $criteria = new Criteria();&lt;br /&gt;    self::addSelectColumns($criteria);&lt;br /&gt;    $criteria-&gt;add(self::SLUG,$slug);&lt;br /&gt;    $object = self::doSelectOne($criteria,$con);&lt;br /&gt;    if($object instanceof SomeModel){&lt;br /&gt;      self::addInstanceToPool($object);&lt;br /&gt;    }&lt;br /&gt;    return $object;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4266163805679197742?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7pqt36gOAzy99pcozH-k5Po56j8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7pqt36gOAzy99pcozH-k5Po56j8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7pqt36gOAzy99pcozH-k5Po56j8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7pqt36gOAzy99pcozH-k5Po56j8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4266163805679197742/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=4266163805679197742" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4266163805679197742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4266163805679197742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/ZQrupW0noM4/propel-symfony-12.html" title="Правильное расширение базовых классов Propel в symfony 1.2" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/propel-symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYARno6fSp7ImA9WxVUFEw.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-2051938539759714718</id><published>2009-03-18T19:32:00.005+03:00</published><updated>2009-03-19T02:15:47.415+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T02:15:47.415+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="layout" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="sfFilter" /><title>Как динамически изменить layout для всего application</title><content type="html">Иногда нужно менять layout для всего приложения, на пример в празничные дни. &lt;br /&gt;Но писать условия в каждом модуле - не красиво.&lt;br /&gt;Поэтому можно сделать это заранее в фильтре.&lt;br /&gt;В файле app/your_module/config/filters.yml добавь ваш фильтр:&lt;br /&gt;&lt;pre class="prettyprint"&gt;rendering: ~&lt;br /&gt;security:  ~&lt;br /&gt;&lt;br /&gt;# insert your own filters here&lt;br /&gt;&lt;br /&gt;change_layuot:&lt;br /&gt;  class: changeLayoutFilter&lt;br /&gt;  param:&lt;br /&gt;&lt;br /&gt;cache:     ~&lt;br /&gt;common:    ~&lt;br /&gt;execution: ~&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Создайте класс changeLayoutFilter и положите его в lib/:&lt;br /&gt;&lt;pre class="prettyprint"&gt;class changeLayoutFilter extends sfFilter&lt;br /&gt;{&lt;br /&gt;  public function execute($filterChain)&lt;br /&gt;  {&lt;br /&gt;    $request = $this-&gt;getContext()-&gt;getRequest();&lt;br /&gt;    $user    = $this-&gt;getContext()-&gt;getUser();&lt;br /&gt;    //устанавливаю layuot&lt;br /&gt;    if(isNY()){&lt;br /&gt;      sfConfig::set('symfony.view.'.&lt;br /&gt;          $this-&gt;getContext()-&gt;getModuleName().'_'.&lt;br /&gt;          $this-&gt;getContext()-&gt;getActionName().'_layout',&lt;br /&gt;        'your_layout');&lt;br /&gt;    }&lt;br /&gt;    // Execute next filter&lt;br /&gt;    $filterChain-&gt;execute();&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;isNY() - это ваше условие, 'your_layout' - ваш layout.&lt;br /&gt;&lt;br /&gt;Кстати, почему я не использовал конструкцию по учебнику:&lt;br /&gt;&lt;pre class="prettyprint"&gt;class changeLayoutFilter extends sfFilter&lt;br /&gt;{&lt;br /&gt;  public function execute($filterChain)&lt;br /&gt;  {&lt;br /&gt;    // Execute this filter only once&lt;br /&gt;    if ($this-&gt;isFirstCall())&lt;br /&gt;    {&lt;br /&gt;      [... ...]&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;?&lt;br /&gt;Потому что если будет использован forward в контроллере(sfAction), то&lt;br /&gt;цепочка фильтров будет запущено заново и наш хак не сработает.&lt;br /&gt;Посмотрите сами в дебагере, вкладка "log" как ваш фильтр будет запущен 2 раза.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-2051938539759714718?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/k1CO6GqNsbmbynXzqNGb4dHak8w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1CO6GqNsbmbynXzqNGb4dHak8w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/k1CO6GqNsbmbynXzqNGb4dHak8w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/k1CO6GqNsbmbynXzqNGb4dHak8w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/2051938539759714718/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=2051938539759714718" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/2051938539759714718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/2051938539759714718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/I8v9lPTnZT4/layout-application.html" title="Как динамически изменить layout для всего application" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/layout-application.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8MQXg-eSp7ImA9WxVUE08.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-603714279953067634</id><published>2009-03-17T23:17:00.005+03:00</published><updated>2009-03-17T23:48:00.651+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T23:48:00.651+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Валидатор телефонного номера в symfony 1.2</title><content type="html">Телефонный номер вида: +7(495)1234567&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;/**&lt;br /&gt; * sfValidatorTelephone&lt;br /&gt; *&lt;br /&gt; * @package    &lt;br /&gt; * @subpackage validator&lt;br /&gt; * @author     broderix&lt;br /&gt; * @version    &lt;br /&gt; */&lt;br /&gt;class sfValidatorTelephone extends sfValidatorRegex&lt;br /&gt;{&lt;br /&gt;  /**&lt;br /&gt;   * @see sfValidatorRegex&lt;br /&gt;   */&lt;br /&gt;  protected function configure($options = array(), $messages = array())&lt;br /&gt;  {&lt;br /&gt;    parent::configure($options, $messages);&lt;br /&gt;&lt;br /&gt;    $this-&gt;setOption('pattern', '/^(\+\d\(\d+\)\d*)$/i');&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;чтобы заработал положить в lib/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-603714279953067634?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/776B90kLufI7RKPEbZoRtFO9CFo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/776B90kLufI7RKPEbZoRtFO9CFo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/776B90kLufI7RKPEbZoRtFO9CFo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/776B90kLufI7RKPEbZoRtFO9CFo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/603714279953067634/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=603714279953067634" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/603714279953067634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/603714279953067634?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/1_ToMiblOjA/symfony-12.html" title="Валидатор телефонного номера в symfony 1.2" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/symfony-12.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cBRno4eip7ImA9WxVUE08.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-8630509798214560839</id><published>2009-03-14T21:46:00.017+03:00</published><updated>2009-03-17T23:17:37.432+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-17T23:17:37.432+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="symfony" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Упрощение работы с sfWidgetFormSelect в sfForm</title><content type="html">Этим постом я начну серию статьёй по  symfony 1.2&lt;br /&gt;&lt;br /&gt;Иногда необходимо использовать ограниенные списки select в админе в  symfony 1.2.&lt;br /&gt;Но не хочется выбирать данные для sfWidgetFormSelect из массива или yaml файла.&lt;br /&gt;Поэтому можно создать свой виджет sfWidgetFormYamlSelect:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class sfWidgetFormYamlSelect extends sfWidgetFormChoice&lt;br /&gt;{&lt;br /&gt;  public function __construct($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    $options['choices'] = new sfCallable(array($this, 'getChoices'));&lt;br /&gt;    parent::__construct($options, $attributes);&lt;br /&gt;  }&lt;br /&gt;  protected function configure($options = array(), $attributes = array())&lt;br /&gt;  {&lt;br /&gt;    addRequiredOption('form_name', null);&lt;br /&gt;    $this-&gt;addRequiredOption('field_name', null);&lt;br /&gt;    $this-&gt;addOption('add_empty', false);&lt;br /&gt;    parent::configure($options, $attributes);&lt;br /&gt;  }&lt;br /&gt;  public function getChoices()&lt;br /&gt;  {&lt;br /&gt;    $conf_array = sfConfig::get('app_'.$this-&gt;getOption('form_name'));&lt;br /&gt;    $choices = array();&lt;br /&gt;    if(false !== $this-&gt;getOption('add_empty')){&lt;br /&gt;      $choices[''] = true === $this-&gt;getOption('add_empty') ? '' :&lt;br /&gt;        $this-&gt;getOption('add_empty');&lt;br /&gt;    }&lt;br /&gt;   $choices = array_merge($choices,$conf_array[$this-&gt;getOption('field_name')]);&lt;br /&gt;   return $choices;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В файле config/app.yml (если его нет, то создайте) опишите ваши поля для форм:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;span style="font-size:100%;"&gt;all:&lt;br /&gt; .form_settings:&lt;br /&gt;   my_form1:&lt;br /&gt;     type: { 'yes': 'да', 'no': 'нет }&lt;br /&gt;   my_form2:&lt;br /&gt;     status: { 0: 'новый', 1: 'подтвержденный', 2: 'редактируется' }&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;В самой форме это будет выглядеть так:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;class MyFormForm1 extends BaseMyForm1Form&lt;br /&gt;{&lt;br /&gt;  public function configure()&lt;br /&gt;  {&lt;br /&gt;    $this-&gt;setWidget('status' , new sfWidgetFormYamlSelect(array(&lt;br /&gt;      'form_name'=&gt;'my_form1',&lt;br /&gt;      'field_name'=&gt;'status'&lt;br /&gt;    )));&lt;br /&gt;  }&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s1600-h/select_example.png"&gt;&lt;img style="cursor: pointer; width: 265px; height: 50px;" src="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s320/select_example.png" alt="" id="BLOGGER_PHOTO_ID_5313125421386949618" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Так же это можно использовать в фильтрах.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-8630509798214560839?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xm6tuecV8lP4PDdQduguwLsnulc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xm6tuecV8lP4PDdQduguwLsnulc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xm6tuecV8lP4PDdQduguwLsnulc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xm6tuecV8lP4PDdQduguwLsnulc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/8630509798214560839/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=8630509798214560839" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8630509798214560839?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/8630509798214560839?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/-D9E2I2itac/sfwidgetformselect-sfform.html" title="Упрощение работы с sfWidgetFormSelect в sfForm" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_67GcH7V6PNQ/SbwDa6zd4_I/AAAAAAAAFic/aHq2pboF3Wk/s72-c/select_example.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/03/sfwidgetformselect-sfform.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINSXs8eip7ImA9WxVRFk8.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-559376485752189975</id><published>2009-01-22T13:20:00.002+03:00</published><updated>2009-01-22T14:43:18.572+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-22T14:43:18.572+03:00</app:edited><title>Обзор шаблонов проектирования</title><content type="html">Сегодня наткнулся на хороший обзор &lt;span style="font-weight: bold;"&gt;шаблонов проектирования&lt;/span&gt;. Автор проекта &lt;a href="http://monkeycode.ru"&gt;monkeycode.ru&lt;/a&gt; периодически выкладывает &lt;span style="font-weight: bold;"&gt;шаблоны проектирования&lt;/span&gt; с краткими пояснениями пока только на языке php5.&lt;br /&gt;Думаю чтобы понять смысл этого достаточно.&lt;br /&gt;Будем следить.&lt;br /&gt;Все шаблоны можно вытащить по тегу &lt;a href="http://monkeycode.ru/tag/%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B+%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F"&gt;шаблоны проектирования&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-559376485752189975?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PssKe9OUeJOgDmI1yiFs0Ep5DoM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PssKe9OUeJOgDmI1yiFs0Ep5DoM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PssKe9OUeJOgDmI1yiFs0Ep5DoM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PssKe9OUeJOgDmI1yiFs0Ep5DoM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/559376485752189975/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=559376485752189975" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/559376485752189975?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/559376485752189975?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/4pxzsGdPVEA/blog-post.html" title="Обзор шаблонов проектирования" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2009/01/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYAR34-fSp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4593199938576239213</id><published>2007-06-18T14:42:00.000+04:00</published><updated>2007-06-15T15:15:46.055+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T15:15:46.055+04:00</app:edited><title>Миграция с MySQL 5.X на Oracle 10.X с обратной совместимостью на платформе php</title><content type="html">Этая серия статей направлена на помощь при миграция с MySQL 5.X на Oracle 10.X на платформе php для разработчиков, которые еще не сталкивались СУБД Oracle. Она была написана в ходе собственных проб и ошибок при переносе данных в 700 Мб.&lt;br /&gt;Данную серию статей рассматривайте как рекомендации для новичков, естесственно в них есть удачные и не удачные решения. И тем не мение процесс миграции прошел успешно с поддержкой двух СУБД.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Содержание:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/oracle-client-10x.html"&gt;Установка и настройка Oracle&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-5x-oracle-10x.html"&gt;Разработка ПО на php под Oracle 10.X и MySQL&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-oracle.html"&gt;Перенос данных с Mysql на Oracle&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4593199938576239213?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/70upJt5PuhemvtmZZCNFBgQOZ4o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70upJt5PuhemvtmZZCNFBgQOZ4o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/70upJt5PuhemvtmZZCNFBgQOZ4o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70upJt5PuhemvtmZZCNFBgQOZ4o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4593199938576239213/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=4593199938576239213" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4593199938576239213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4593199938576239213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/Y6c15u2IlL4/mysql-5x-oracle-10x-php.html" title="Миграция с MySQL 5.X на Oracle 10.X с обратной совместимостью на платформе php" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2007/06/mysql-5x-oracle-10x-php.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08CSHY6cCp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-6103753365321366261</id><published>2007-06-17T15:00:00.000+04:00</published><updated>2007-06-15T15:11:09.818+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T15:11:09.818+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sqplus" /><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><title>Установка и настройка Oracle Client 10.X</title><content type="html">&lt;b&gt;Другие статьи:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Установка и настройка Oracle&lt;/b&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-5x-oracle-10x.html"&gt;Разработка ПО на php под Oracle 10.X и MySQL&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-oracle.html"&gt;Перенос данных с Mysql на Oracle&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-6103753365321366261?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cg0l2jZR3adNHp8b9x0bwcEj_kk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cg0l2jZR3adNHp8b9x0bwcEj_kk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cg0l2jZR3adNHp8b9x0bwcEj_kk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cg0l2jZR3adNHp8b9x0bwcEj_kk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/6103753365321366261/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=6103753365321366261" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/6103753365321366261?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/6103753365321366261?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/cBt3AI39mG0/oracle-client-10x.html" title="Установка и настройка Oracle Client 10.X" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2007/06/oracle-client-10x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDQH4-fSp7ImA9WB5RFEw.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-7805057816544009923</id><published>2007-06-16T14:55:00.000+04:00</published><updated>2007-06-21T13:32:51.055+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-21T13:32:51.055+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><title>Разработка ПО на php под Oracle 10.X и MySQL</title><content type="html">&lt;span class="header1"&gt;Даты, время&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Используйте CURRENT_TIMESTAMP для совместимости с MySQL вместо NOW(), SYSDATE().&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;Oracle&gt; select CURRENT_TIMESTAMP from dual;&lt;br /&gt;CURRENT_TIMESTAMP&lt;br /&gt;------------------------------------------&lt;br /&gt;14-JUN-07 02.47.52.987970 PM +04:00&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;mysql&gt; select CURRENT_TIMESTAMP;&lt;br /&gt;+---------------------+&lt;br /&gt;| CURRENT_TIMESTAMP   |&lt;br /&gt;+---------------------+&lt;br /&gt;| 2007-06-14 14:58:23 |&lt;br /&gt;+---------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Установите стандартное время для MySQL в формате 'YYYY-MM-DD HH24:MI:SS'&lt;br /&gt;&lt;span class="code"&gt;Oracle&gt; ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';&lt;br /&gt;Session altered.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Старайтесь выкручиваться разными приёмами:&lt;br /&gt;&lt;span class="code"&gt;mysql&gt; select hour(timediff(now(), t_timestamp)) from table1;&lt;br /&gt;Oracle&gt; select CEIL(SYSDATE - t_timestamp) from table1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;если неудаётся, то ...&lt;br /&gt;&lt;span class="header1"&gt;Создайте недостающие функции:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;FIND_IN_SET&lt;/span&gt;&lt;br /&gt;&lt;span class="code"&gt;CREATE OR REPLACE FUNCTION &lt;br /&gt;FIND_IN_SET(TWHAT VARCHAR2, TWHERE VARCHAR2) RETURN INTEGER&lt;br /&gt;IS&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE&lt;br /&gt;CDATA varchar2(4000);&lt;br /&gt;CURSOR TDATA IS&lt;br /&gt;SELECT REGEXP_REPLACE(REGEXP_SUBSTR(TWHERE,  ','||TWHAT||',|^'||TWHAT||',|^'||TWHAT||'$|,'||TWHAT||'$'),',','') FROM DUAL;&lt;br /&gt;FROM DUAL;&lt;br /&gt;BEGIN&lt;br /&gt;    open TDATA;&lt;br /&gt;    FETCH TDATA into CDATA;&lt;br /&gt;    close TDATA;&lt;br /&gt;    IF (TO_CHAR(CDATA) = TWHAT) THEN&lt;br /&gt;        return 1;&lt;br /&gt;    ELSE&lt;br /&gt;        return 0;&lt;br /&gt;    END IF;&lt;br /&gt;END;&lt;br /&gt;END FIND_IN_SET;&lt;br /&gt;/&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Тесты:&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;Oracle&gt; SELECT table1.field1 from table1 &lt;br /&gt;WHERE find_in_set('5',table1.field1) &gt;= 1;&lt;br /&gt;&lt;br /&gt;table1.field1&lt;br /&gt;-------------&lt;br /&gt;',5,1,2,3,4,'&lt;br /&gt;&lt;br /&gt;mysql&gt; SELECT table1.field1 from table1 &lt;br /&gt;WHERE find_in_set('5',table1.field1) &gt;= 1;&lt;br /&gt;&lt;br /&gt;+---------------+&lt;br /&gt;| table1.field1 |&lt;br /&gt;+---------------+&lt;br /&gt;|   ,5,1,2,3,4, |&lt;br /&gt;+---------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CONCAT_WS&lt;/span&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;Oracle&gt; CREATE OR REPLACE FUNCTION &lt;br /&gt;CONCAT_WS(PATTERN VARCHAR2,&lt;br /&gt;STR1 VARCHAR2 DEFAULT '',&lt;br /&gt;STR2 VARCHAR2 DEFAULT '',&lt;br /&gt;STR3 VARCHAR2 DEFAULT '',&lt;br /&gt;STR4 VARCHAR2 DEFAULT '',&lt;br /&gt;STR5 VARCHAR2 DEFAULT '',&lt;br /&gt;STR6 VARCHAR2 DEFAULT '',&lt;br /&gt;STR7 VARCHAR2 DEFAULT '',&lt;br /&gt;STR8 VARCHAR2 DEFAULT '',&lt;br /&gt;STR9 VARCHAR2 DEFAULT '',&lt;br /&gt;STR10 VARCHAR2 DEFAULT '',&lt;br /&gt;STR11 VARCHAR2 DEFAULT '',&lt;br /&gt;STR12 VARCHAR2 DEFAULT ''&lt;br /&gt;) RETURN VARCHAR2&lt;br /&gt;IS&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE&lt;br /&gt;CDATA varchar2(4000):='';&lt;br /&gt;BEGIN&lt;br /&gt;    IF (LENGTH(STR1) &gt; 0) THEN &lt;br /&gt;        CDATA := STR1; &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR2) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR2); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR3) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR3); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR4) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR4); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR5) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR5); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR6) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR6); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR7) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR7); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR8) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR8); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR9) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR9); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR10) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR10); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR11) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR11); &lt;br /&gt;    END IF;&lt;br /&gt;    IF (LENGTH(STR12) &gt; 0) THEN &lt;br /&gt;        CDATA := CONCAT(CDATA,PATTERN); &lt;br /&gt;        CDATA := CONCAT(CDATA,STR12); &lt;br /&gt;    END IF;&lt;br /&gt;return CDATA;&lt;br /&gt;END;&lt;br /&gt;END;&lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;Function created.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Тесты:&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;Oracle&gt; select concat_ws('::','1','2') from dual;&lt;br /&gt;CONCAT_WS('::','1','2')&lt;br /&gt;------------------------------------------------&lt;br /&gt;1::2&lt;br /&gt;&lt;br /&gt;Oracle&gt; select concat_ws('::','1') from dual;&lt;br /&gt;CONCAT_WS('::','1')&lt;br /&gt;------------------------------------------------&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;mysql&gt; select concat_ws('::','1','2');&lt;br /&gt;+-------------------------+&lt;br /&gt;| concat_ws('::','1','2') |&lt;br /&gt;+-------------------------+&lt;br /&gt;| 1::2                    |&lt;br /&gt;+-------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&gt; select concat_ws('::','1');&lt;br /&gt;+---------------------+&lt;br /&gt;| concat_ws('::','1') |&lt;br /&gt;+---------------------+&lt;br /&gt;| 1                   |&lt;br /&gt;+---------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Но не всегда получается сделать универсальный код или создать недостающие функции, слишком проблематично или сложно, учитывая временные рамки. Чтобы выкрутится, переложите часть забот с sql на плечи вашего скриптового языка.&lt;br /&gt;&lt;br /&gt;&lt;span class="header1"&gt;PHP&lt;/span&gt;&lt;br /&gt;Если множество решений для разработки приложений поддерживающих множество СУБД. Можно пойти:&lt;br /&gt;&lt;br /&gt;1) путем обработки запроса регулярными выражениями подаваемого в php-класс под каждую СУБД(пример в исходных кодах phpbb.com, 3-я версия поддерживает mysql, oracle, postgresql).&lt;br /&gt;Преимущества:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;можно добавить поддержку СУБД на любом этапе разработки;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Недостатки&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;сложность в составлении регулярных выражениях, есть вероятность ошибки, т.е. в равно приходится возвращаться к старому коду;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;2) путем обработки запроса перед тем как подать его в php-класс.&lt;br /&gt;Преимущества:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;надежность кода, вы всегда знаете как будет выполняться тот или иной запрос;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Недостатки&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;для добавления поддержки новой СУБД придется изменять все запросы во всем коде;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Я выбрал 2 способ:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;if($config['driver'] == "mysql"){&lt;br /&gt;    $db_limit = " LIMIT 1";&lt;br /&gt;} else {&lt;br /&gt;    if($['driver'] == "oracle"){&lt;br /&gt;        $db_limit = " AND rownum = 1";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;$sql = "&lt;br /&gt;    SELECT field1 f1,field2 f2&lt;br /&gt;    FROM table1&lt;br /&gt;    WHERE f1 = f2 ".$db_limit;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Если запрос сложнее, то необходимо обрабатывать его начиная с блока WHERE:&lt;br /&gt;(заметьте, что в блоке GROUP BY для Oracle приходится перечислять все поля)&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;if($config['driver'] == "mysql"){&lt;br /&gt;    $db_stuff = "&lt;br /&gt;        WHERE f1 = f2&lt;br /&gt;        GROUP BY field1&lt;br /&gt;        ORDER BY field1 DESC&lt;br /&gt;        LIMIT 1";&lt;br /&gt;} else {&lt;br /&gt;    if($['driver'] == "oracle"){&lt;br /&gt;        $db_stuff = "&lt;br /&gt;        WHERE f1 = f2 AND rownum = 1&lt;br /&gt;        GROUP BY field1,field2&lt;br /&gt;        ORDER BY field1 DESC";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;$sql = "&lt;br /&gt;    SELECT field1 f1,field2 f2&lt;br /&gt;    FROM table1 ".&lt;br /&gt;    $db_stuff;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Еще пример:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;if($config['driver'] == "mysql"){&lt;br /&gt;    $db_hour = "hour(timediff(now(), t_timestamp))";&lt;br /&gt;} else {&lt;br /&gt;    if($config['driver'] == "oracle"){&lt;br /&gt;        $db_hour = "CEIL(SYSDATE - t_timestamp)";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;$sql = "&lt;br /&gt;    SELECT field1 f1,field2 f2, ".&lt;br /&gt;    $db_hour." t_hour"&lt;br /&gt;    ."FROM table1"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="header1"&gt;ORA ERRORS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;ORA-00923: ключевое слово FROM не найдено там, где оно ожидалось.&lt;/span&gt;&lt;br /&gt;возникает, если использовать ключевые слова: number, char, date , ...&lt;br /&gt;в конструкциях:&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;sql&gt; select somename &lt;span style="font-weight: bold;"&gt;number&lt;/span&gt;, somedate date from sometable;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;ORA-00933: неверное завершение SQL-предложения&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Возникает, если вы использовали посторонние символы. &lt;br /&gt;Как правило это 'AS', Oracle не понимает эту конструкцию:&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;Oracle&gt; SELECT table1.field1 &lt;span style="font-weight:bold;"&gt;AS&lt;/span&gt; f FROM table1;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Другие статьи:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/oracle-client-10x.html"&gt;Установка и настройка Oracle&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Разработка ПО на php под Oracle 10.X и MySQL&lt;/b&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-oracle.html"&gt;Перенос данных с Mysql на Oracle&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-7805057816544009923?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NzrfSml_BVqpB0H9f8vp0nkYASk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NzrfSml_BVqpB0H9f8vp0nkYASk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NzrfSml_BVqpB0H9f8vp0nkYASk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NzrfSml_BVqpB0H9f8vp0nkYASk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/7805057816544009923/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=7805057816544009923" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/7805057816544009923?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/7805057816544009923?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/6QaAiFHl3K4/mysql-5x-oracle-10x.html" title="Разработка ПО на php под Oracle 10.X и MySQL" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2007/06/mysql-5x-oracle-10x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0IGRnc_fSp7ImA9WB5REkk.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1666348086927723951</id><published>2007-06-15T15:06:00.000+04:00</published><updated>2007-06-19T14:38:47.945+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-19T14:38:47.945+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="Oracle" /><category scheme="http://www.blogger.com/atom/ns#" term="sed" /><title>Перенос данных с Mysql на Oracle</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_67GcH7V6PNQ/RneTsbDqLAI/AAAAAAAAADA/DM3NYqrGDZo/s1600-h/manual-editing.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp0.blogger.com/_67GcH7V6PNQ/RneTsbDqLAI/AAAAAAAAADA/DM3NYqrGDZo/s320/manual-editing.png" alt="" id="BLOGGER_PHOTO_ID_5077689496270154754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Есть самый простой вариант - это &lt;a href="http://www.mysql.com/products/tools/migration-toolkit/"&gt;MySQL Migration Toolkit&lt;/a&gt;(&lt;a href="http://www.mysql.com/products/tools/migration-toolkit/tutorials/OracleMigrationTutorial.html"&gt;флэш-туториал&lt;/a&gt;), доступен под все платформы. Очень удобно и просто.&lt;br /&gt;&lt;br /&gt;Но если вам нужна миграция под ваши потребности и вы хотите понять как все это работает, то предлагаю сделать все самими своими руками.&lt;br /&gt;&lt;br /&gt;Для начала создайте копию структуры базыданных с MySQL в Oracle:&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;mysqldump --no-data -uUSER -pPASSWORD -hHOST DATABASE&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;понятно, что вместо USER, PASSWORD, HOST, DATABASE вписать свои значения.&lt;br /&gt;&lt;br /&gt;Измените вручную описание таблиц и помните, что длина имен таблиц и полей не должна превышать 30 символов: &lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;mysql&gt; CREATE TABLE some_table (&lt;br /&gt;table_id INT(11) NOT NULL AUTO_INCREMENT,&lt;br /&gt;table_field_name1 INT(11) NOT NULL,&lt;br /&gt;table_field_name2 VARCHAR(255) NULL DEFAULT 'some',&lt;br /&gt;table_field_name3 TEXT NOT NULL,&lt;br /&gt;PRIMARY KEY (table_id),INDEX(table_field_name1)&lt;br /&gt;);&lt;br /&gt;Query OK, 0 rows affected (0.05 sec)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;oracle&gt; CREATE TABLE some_table (&lt;br /&gt;table_id NUMBER(11) NOT NULL,&lt;br /&gt;table_field_name1 NUMBER(11) NOT NULL,&lt;br /&gt;table_field_name2 VARCHAR2(255) NOT NULL,&lt;br /&gt;table_field_name3 VARCHAR2(4000) NOT NULL&lt;br /&gt;);&lt;br /&gt;Table created.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Пропало описание AUTO_INCREMENT - в Oracle для этого существует sequences(последовательности), PRIMARY KEY и INDEX - ключи создаются иначе, DEFAULT 'some' - в Oracle не совместимо понятие NULL  и DEFAULT, т.е. надо выбрать либо DEFAULT 'some', либо NULL.&lt;br /&gt;&lt;br /&gt;Изменилось описание INT на NUMBER, VARCHAR - VARCHAR2, TEXT - VARCHAR2(4000). Таблицу соответствия можно посмотреть &lt;a href="http://download-east.oracle.com/docs/cd/B10501_01/win.920/a97249/ch3.htm#1026907"&gt;здесь&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Далее сделайте дамп данных с MySQL:&lt;br /&gt;span class="code"&gt;&lt;br /&gt;mysqldump --add-drop-table --default-character-set=latin1 --no-create-info --single-transaction=TRUE --add-locks=FALSE --extended-insert=FALSE -uUSER -pPASSWORD -hHOST DATABASE &gt; data.sql&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Важным параметром является single-transaction=TRUE - создаст записи по одной строчке, что позволит  по строчно обработать данные с помощью &lt;a href="http://www.google.com/search?q=sed"&gt;sed&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;cat './tables/table1.table' \&lt;br /&gt;&lt;li&gt;| sed -e 's/[`]//g'  \&lt;br /&gt;&lt;li&gt;| sed -e 's/^\/\*/\-\-/'  \&lt;br /&gt;&lt;li&gt;| sed -e 's/^LOCK TABLES/\-\-/'  \&lt;br /&gt;&lt;li&gt;| sed -e 's/^UNLOCK TABLES/\-\-/' \&lt;br /&gt;&lt;li&gt;| sed -e \"s/'\(\-\)\{0,1\}\([0-9]\{1,\}\)\,\([0-9]\{0,2\}\)'/'\1\2.\3'/g\" \&lt;br /&gt;&lt;li&gt;| sed -e \"s/'0000-00-00 00:00:00'/NULL/\"  &gt; 'tables/table1.sql'&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Пояснение:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt; построчное чтение&lt;br /&gt;&lt;li&gt; замена всех символов `&lt;br /&gt;&lt;li&gt; замена коментариев начинающихся с /* на --&lt;br /&gt;&lt;li&gt; комментирование строк начинающихся с LOCK TABLES&lt;br /&gt;&lt;li&gt; комментирование строк начинающихся с UNLOCK TABLES&lt;br /&gt;&lt;li&gt; замена строкового значения числа вида '99,99' на 99.99 (об этом ниже)&lt;br /&gt;&lt;li&gt; замена '0000-00-00 00:00:00' на NULL&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;В базе данных MySQL были строковые поля к которых были числа в формате 99,99 и 99.99, было решено при переходе на Oracle привести эти поля в тип NUMBER и вставка '99,99' привела бы к ошибке.&lt;br /&gt;&lt;br /&gt;После того как данные подготовлены, внести их можно из sqlplus:&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;sqlplus&gt; @./tables/table1.sql&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Теперь когда целостность данных сохранена, можно создать sequences(последовательности), которые заменяют AUTO_INCREMENT в MySQL. &lt;br /&gt;Создадим одну последовательность на все таблицы, и чтобы небыло дублирования id-номеров, последовательность нужно начать с максимального значения id-поля среди всех таблиц.&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;&amp;lt?php&lt;br /&gt;$oracle = array(&lt;br /&gt;     'name'=&gt;'DB_NAME',&lt;br /&gt;     'user'=&gt;'USER_NAME',&lt;br /&gt;     'password'=&gt;'PASSWORD',&lt;br /&gt;     'host'=&gt;'XXX.XXX.XXX.XXX',&lt;br /&gt;     'port'=&gt;'PORT');&lt;br /&gt;$mode = OCI_COMMIT_ON_SUCCESS;&lt;br /&gt;&lt;br /&gt;$config = "&lt;br /&gt;(DESCRIPTION = &lt;br /&gt;  (ADDRESS_LIST = &lt;br /&gt;    (ADDRESS = &lt;br /&gt;      (COMMUNITY = PHP)&lt;br /&gt;      (PROTOCOL = TCP)&lt;br /&gt;      (Host = {$oracle['host']})&lt;br /&gt;      (Port = {$oracle['port']})&lt;br /&gt;    )&lt;br /&gt;  )&lt;br /&gt;  (CONNECT_DATA = &lt;br /&gt;    (SERVICE_NAME = {$oracle['name']}) &lt;br /&gt;  )&lt;br /&gt;)";&lt;br /&gt;&lt;br /&gt;$link = oci_connect($oracle['user'], &lt;br /&gt;                    $oracle['password'], &lt;br /&gt;                    $config) &lt;br /&gt;  or die("Couldn't connect");&lt;br /&gt;   &lt;br /&gt;#Читаю список таблиц&lt;br /&gt;$tables = file("tables.dat");&lt;br /&gt;array_shift($tables);&lt;br /&gt;$max_row_id = 1;&lt;br /&gt;foreach($tables as $table){&lt;br /&gt; $table = preg_replace("/[\r\n]/","",$table);&lt;br /&gt; $sql = "SELECT * FROM $table WHERE rownum=1 ORDER BY 1 DESC  \n";&lt;br /&gt; $result = oci_parse($link, $sql);&lt;br /&gt; oci_execute($result,$mode);&lt;br /&gt; $row = oci_fetch_row($result);&lt;br /&gt; if($row[0] &gt; $max_row_id){&lt;br /&gt;  $max_row_id = $row[0];&lt;br /&gt; }&lt;br /&gt; $column_name  = oci_field_name($result, 1);&lt;br /&gt; #Создаем триггер для последовательности&lt;br /&gt; $sql_trigger[] = "&lt;br /&gt;CREATE OR REPLACE trigger \"TG_".strtoupper($table)."_BI\"&lt;br /&gt;  before insert on \"".strtoupper($table)."\"&lt;br /&gt;  for each row &lt;br /&gt;begin  &lt;br /&gt;    select \"MY_SEQ\".nextval into :NEW.".$column_name." from dual;&lt;br /&gt;end TG_$table;&lt;br /&gt;/";&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;print "Create sequence and start from $max_row_id+1\n";&lt;br /&gt;#Удаляем последовательность&lt;br /&gt;print $sql = "DROP sequence MY_SEQ ;/\n";&lt;br /&gt;#Создаем последовательность&lt;br /&gt;print $sql = "CREATE sequence MY_SEQ START WITH  ".($max_row_id+1)." ;/\n";&lt;br /&gt;&lt;br /&gt;#Создаем триггеры&lt;br /&gt;foreach($sql_trigger as $sql){&lt;br /&gt; print $sql."\n";&lt;br /&gt; #$db-&gt;($sql);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;oci_close($link);&lt;br /&gt;?&amp;gt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Все файлы для миграции можно скачать одним архивом &lt;a href="http://brody.broderix.googlepages.com/mysql2oracle.tar.gz"&gt;здесь&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Дополнительные ссылки:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2006/11/mysql-5x.html"&gt;переход к другой кодировке в MySQL&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.google.com/search?q=sed"&gt;Мануал по sed&lt;/a&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Другие статьи:&lt;/b&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/oracle-client-10x.html"&gt;Установка и настройка Oracle&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://broderix.blogspot.com/2007/06/mysql-5x-oracle-10x.html"&gt;Разработка ПО на php под Oracle 10.X и MySQL&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Перенос данных с Mysql на Oracle&lt;/b&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1666348086927723951?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RORZOnfBT2TEa1-cBbuxbPH_GRk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RORZOnfBT2TEa1-cBbuxbPH_GRk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RORZOnfBT2TEa1-cBbuxbPH_GRk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RORZOnfBT2TEa1-cBbuxbPH_GRk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1666348086927723951/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=1666348086927723951" title="Комментарии: 0" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1666348086927723951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1666348086927723951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/pbKSeXa94ts/mysql-oracle.html" title="Перенос данных с Mysql на Oracle" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp0.blogger.com/_67GcH7V6PNQ/RneTsbDqLAI/AAAAAAAAADA/DM3NYqrGDZo/s72-c/manual-editing.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://broderix.blogspot.com/2007/06/mysql-oracle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHQHY6fyp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-1329758837050630897</id><published>2006-12-07T15:40:00.000+03:00</published><updated>2007-06-15T15:37:11.817+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T15:37:11.817+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="joomla" /><category scheme="http://www.blogger.com/atom/ns#" term="Eclipse" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>Eclipse PHP IDE 3.2</title><content type="html">&lt;a href="http://eclipse.org/"&gt;Eclipse &lt;/a&gt;оказывается не только JAVA IDE, но и &lt;a href="http://www.eclipse.org/php/"&gt;PHP IDE&lt;/a&gt;.&lt;br /&gt;Впервый раз я услышал об этом &lt;a href="http://en.wikipedia.org/wiki/Integrated_development_environment"&gt;ide&lt;/a&gt; в &lt;a href="http://dev.joomla.org/component/option,com_jd-wp/Itemid,33/p,232/"&gt;блоге&lt;/a&gt; у &lt;a href="http://dev.joomla.org/component/option,com_jd-wp/Itemid,33/cat,10/" title="View all posts filed under Louis Landry"&gt;Louis Landry&lt;/a&gt;  одного из разработчиков &lt;a href="http://joomla.org/"&gt;joomla!&lt;/a&gt; Мне стало интересно, в чем разрабатывают другие. Ставить среду долго не пришлось, все было в одном tar включая откомпилированный&lt;br /&gt;eclipse.&lt;br /&gt;Очень понравилась среда: приятный интефейс, удобные  и понятные меню, фильтр в выбора параметров в настройках,  не надо бегать по всем натсройкам, если вы хотите изменить шрифт, просто введите font в фильтре и появятся все параметры по font, что очень экономит время и нервы.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_67GcH7V6PNQ/RXgVAARbdAI/AAAAAAAAAAY/aurt8M29Nk4/s1600-h/eclipse.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_67GcH7V6PNQ/RXgVAARbdAI/AAAAAAAAAAY/aurt8M29Nk4/s320/eclipse.png" alt="" id="BLOGGER_PHOTO_ID_5005774075639591938" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Одним словом - все сделано для разработчиков, но , к сожалению, пока для англоговоряших. В этой версии отсутствует поддержка кодировок, кроме UTF-X, ISO-XXXX. К тому же за 1 день использования среда ругалась несколько раз с неизвестными ошибками, один раз повредился файл-проекта(по вине программы), и после этого ни один файл открыть было не возможно. Помогло лишь удаление этого проекта. Вообщем сыровато, надо попробовать со следующей версией.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-1329758837050630897?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/cHekgSEKelTPi9jp8nr1mzlFKvQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cHekgSEKelTPi9jp8nr1mzlFKvQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/cHekgSEKelTPi9jp8nr1mzlFKvQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/cHekgSEKelTPi9jp8nr1mzlFKvQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/1329758837050630897/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=1329758837050630897" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1329758837050630897?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/1329758837050630897?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/4zV5jH-qLOM/eclipse-php-ide-32.html" title="Eclipse PHP IDE 3.2" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_67GcH7V6PNQ/RXgVAARbdAI/AAAAAAAAAAY/aurt8M29Nk4/s72-c/eclipse.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2006/12/eclipse-php-ide-32.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMAQnkycCp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-4442838473216565998</id><published>2006-11-14T13:45:00.000+03:00</published><updated>2007-06-15T13:40:43.798+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T13:40:43.798+04:00</app:edited><title>Вложенные теги form</title><content type="html">Недавно столкнулся с такой ситуацией, когда случайным образом у меня в php-коде получилась вложенная одна в другую форма. Причем часть полей input пропала после отправки (submit). Я не понимал в чем дело, но потом меня осенило и я задал себе вопрос "Бывают ли вложенные формы?".&lt;br /&gt;Поискал в яндексе, на многих сайтах говорят что: &lt;blockquote&gt;HTML-документ может содержать в себе несколько форм, однако формы не должны находиться одна внутри другой.&lt;/blockquote&gt;&lt;br /&gt;Я этому не поверил, рассуждая по принципу "подобия": если все парные теги могут быть&lt;br /&gt;вложенными(table,b,p,font,...,etc.), то почему нет такого свойства у тега form.&lt;br /&gt;Решил заглянуть в "источники" на w3c.org и ничего похожего не нашел по вложенным &lt;a href="http://www.w3.org/TR/html4/interact/forms.html"&gt;формам&lt;/a&gt;.&lt;br /&gt;Примечатьльно, что в спецификации XHTML &lt;a href="http://academ.hvcc.edu/%7Ekantopet/old/xhtml/index.php?page=xhtml+forms"&gt;предпологается&lt;/a&gt;, что формы должны быть контейнерами для различных мульти-медийных, поисковых и прочих элементов, наряду с обыкновенными полями, так почему не разработать схему вложенных форм?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-4442838473216565998?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ks5KhQ255IWHBmJ09HBtnviNEU4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ks5KhQ255IWHBmJ09HBtnviNEU4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ks5KhQ255IWHBmJ09HBtnviNEU4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ks5KhQ255IWHBmJ09HBtnviNEU4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/4442838473216565998/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=4442838473216565998" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4442838473216565998?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/4442838473216565998?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/SMjBuMSi7eA/form.html" title="Вложенные теги form" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2006/11/form.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUNRHw7eSp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-116302064103007406</id><published>2006-11-09T00:17:00.000+03:00</published><updated>2007-06-15T15:34:55.201+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T15:34:55.201+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><title>Не используйте условия IF в MySQL запросах</title><content type="html">При изучении почти всех языков, начинающим разработчикам   говорят: "не используйте абсолютные переходы &lt;strong&gt;goto&lt;/strong&gt;", кроме языка &lt;strong&gt;Perl&lt;/strong&gt;, что означает "старайтесь не использовать" или &lt;br/&gt;"используйте, но крайне редко". Тоже я могу сказать и про &lt;a href="http://www.mysql.ru/docs/man/Control_flow_functions.html"&gt;IF в MySQL&lt;/a&gt;: &lt;strong&gt;"старайтесь не использовать конструкцию IF в MySQL запросах"&lt;/strong&gt;. &lt;br/&gt;Разрабатывая внутреннюю программу для фирмы на php+mysql в силу обстоятельств мне пришлось прибегнуть к такой конструкции при запросе в MySQL:&lt;br/&gt;&lt;br /&gt;&lt;span class="code"&gt;&lt;br /&gt;SELECT&lt;br /&gt;    t1.*, t2.*, t3.* &lt;br /&gt;FROM&lt;br /&gt;    t1, t2, t3&lt;br /&gt;WHERE&lt;br /&gt;    IF (t1.field1 = 0,&lt;br /&gt;        t1.field2 = t3.field2,&lt;br /&gt;        t1.field3 = t2.field3&lt;br /&gt;    )&lt;br /&gt;GROUP BY t1.field3&lt;br /&gt;ORDER BY  DESC&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;Что, на первый взгляд, спасало положение, но я проверял это на 5, максимумна 10 записях в таблице. При введение в эксплуотацию этого кода при количестве записей 200 и выше, сервер MySQL просто "вешался". Страница генерировалась от 60 до 250 секунд. Сначала я грешил что я использую слишком много запросов в внешней базе данных на другом хосте, но даже исключение этих запросов не помогло. &lt;br/&gt; Как я понял дело заключается в механизме &lt;strong&gt;IF&lt;/strong&gt;, т.е. код просит пройти все записи таблицы &lt;strong&gt;t1&lt;/strong&gt;, где поле&lt;strong&gt; field1 = 0&lt;/strong&gt; &lt;br/&gt;и выбрать данные или из t2 или из t3. Получается очень долгий запрос.&lt;br/&gt; Пришлось потратить больше времени и переделать структуру программы. Еще раз прихожу к выводу, что нельзя экономить на времени проектировании проекта, но это уже другая тема.&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-116302064103007406?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qEiYO7mC_1ABXVYyRnEufuLEmoI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qEiYO7mC_1ABXVYyRnEufuLEmoI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qEiYO7mC_1ABXVYyRnEufuLEmoI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qEiYO7mC_1ABXVYyRnEufuLEmoI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/116302064103007406/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=116302064103007406" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/116302064103007406?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/116302064103007406?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/5fYxQnRZC2A/blog-post.html" title="Не используйте условия IF в MySQL запросах" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2006/11/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEBRXk-cCp7ImA9WB5SGU0.&quot;"><id>tag:blogger.com,1999:blog-37345659.post-116299066787247590</id><published>2006-11-08T14:57:00.000+03:00</published><updated>2007-06-15T15:40:54.758+04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-15T15:40:54.758+04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="konwert" /><title>Переход к другой кодировке на MySQL 5.X</title><content type="html">Передо мной встала задача перейдти к другой кодировке в рабочей базе данных MySQL.&lt;br /&gt;Первоначально данные   хранились в MySQL 4.Х, но после перехода к MySQL 5 версии данные были внесены в кодировке UTF-8. Причем в MySQL 5 появилась параметр "сравнение", по умолчанию значение которого равно "latin1".&lt;br /&gt;&lt;br /&gt;&lt;span class="code"&gt;$ mysqldump database_name -uroot -p &gt; base.sql&lt;/span&gt;&lt;br /&gt;Установка konwert:&lt;br /&gt;&lt;span class="code"&gt;$ apt-get install konwert&lt;/span&gt;&lt;br /&gt;Смотрим список доступных фильтров:&lt;br /&gt;&lt;span class="code"&gt;$ ls /usr/share/konwert/filters/&lt;/span&gt;&lt;br /&gt;Конвертируем:&lt;br /&gt;&lt;span class="code"&gt;$ konwert UTF8-cp1251 base.sql -o base-1.sql&lt;/span&gt;&lt;br /&gt;Конвертацию под windows можно сделать с помощью программы Штирлиц.&lt;br /&gt;Заменяем текущую кодировку на нужную:&lt;br /&gt;&lt;span class="code"&gt;$ cat base-1.sql | awk '{gsub(/latin1/,"cp1251");print}' &gt; base-1251.sql&lt;/span&gt;&lt;br /&gt;где latin1 - текущая кодировка БД, cp1251 - новая кодировка.&lt;br /&gt;Тоже самое можно сделать в любом редакторе простой заменой.&lt;br /&gt;И результат заносим в нашу базу:&lt;br /&gt;&lt;span class="code"&gt;$ mysql -uroot -p -d database_name &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37345659-116299066787247590?l=broderix.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8oyMeI_XU0DMl7Op9LiBJ6HIjS8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8oyMeI_XU0DMl7Op9LiBJ6HIjS8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8oyMeI_XU0DMl7Op9LiBJ6HIjS8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8oyMeI_XU0DMl7Op9LiBJ6HIjS8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://broderix.blogspot.com/feeds/116299066787247590/comments/default" title="Комментарии к сообщению" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=37345659&amp;postID=116299066787247590" title="Комментарии: 1" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/116299066787247590?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/37345659/posts/default/116299066787247590?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/web-development-notes/~3/dsXbJBZjx0c/mysql-5x.html" title="Переход к другой кодировке на MySQL 5.X" /><author><name>Broderix</name><uri>http://www.blogger.com/profile/03596951512669857288</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="12346641250951719912" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://broderix.blogspot.com/2006/11/mysql-5x.html</feedburner:origLink></entry></feed>
