<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Victor Farazdagi &#187; Tips</title>
	<atom:link href="http://www.phpmag.ru/category/programming/php5/cookbook/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phpmag.ru</link>
	<description>Phrozn, Phing &#38; Zend Framework Musings</description>
	<lastBuildDate>Fri, 19 Aug 2011 08:47:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Vim 7.3 is out!!</title>
		<link>http://www.phpmag.ru/2010/08/17/vim-7-3-is-out/</link>
		<comments>http://www.phpmag.ru/2010/08/17/vim-7-3-is-out/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 13:07:07 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[cli]]></category>

		<guid isPermaLink="false">http://www.phpmag.ru/?p=1085</guid>
		<description><![CDATA[Couple of days ago, Vim team released new version of their great text editor. Once I had a little time, that&#8217;s today, I upgraded all my boxes. There couple of new features that are particularly interesting: a) Persistent undo Small but nevertheless very useful addition. Basically, your undo lists are dumped into undo files allowing [...]]]></description>
			<content:encoded><![CDATA[<p>Couple of days ago, Vim team <a href="https://groups.google.com/group/vim_announce/browse_thread/thread/66c02efd1523554b">released</a> new version of their great text editor. Once I had a little time, that&#8217;s today, I upgraded all my boxes. There couple of new features that are particularly interesting:<br />
<span id="more-1085"></span></p>
<h3>a) Persistent undo</h3>
<p>Small but nevertheless very useful addition. Basically, your undo lists are dumped into undo files allowing you to undo/redo even if buffer is unloaded (or even if editor closed). Plus now you are able to undo even after buffer reload (this is separate feature actually).</p>
<p>To enable, add to your .vimrc:</p>
<pre name="code" class="bash">
set undofile
set undodir=/tmp
</pre>
<p>That will enable dumping undo lists into undofile, which will be located in /tmp folder.</p>
<h3>b) Arbitrary columns</h3>
<p>Main use for me is to highlight maximum line length. You could have similar functionality before, but now it is supported out of box:</p>
<pre name="code" class="bash">
" make sure that max lines are displayed
" (80 and 120 are from ZF Coding standards)
set colorcolumn=80,120
</pre>
<p>To update the color of the ruler use hl-ColorColumn. In our custom theme (based on <a href="http://dengmao.wordpress.com/2007/01/22/vim-color-scheme-wombat/">wombat</a>), I set color as:</p>
<pre name="code" class="bash">
hi ColorColumn guibg=#2d2d2d
</pre>
<h3>c) Relative line numbers</h3>
<p>Well, at first I though this kind of controversial feature, but once I tried to navigate inside document using it &#8211; I suppose I like this feature. In any case, not added to my .vimrc by default. I turn it manually:</p>
<pre name="code" class="bash">
:set rnu
</pre>
<p>and to get back to original line numbers:</p>
<pre name="code" class="bash">
:set nu
</pre>
<h3>d) Conceal text</h3>
<p>Well, this feature is mainly for syntax file writers, as it <em>might</em> make markup text more readable. I, honestly, haven&#8217;t enough incentive to dig into it any deeper, as I don&#8217;t really see how can I use it in my immediate work (I actually like to see all the markup).</p>
<h3>Conclusion</h3>
<p>Although 7.3 is a minor release, it is still the result of two-years of work, with a lot of issues fixed and several very cool additions.</p>
<h3>Couple of notes on installation</h3>
<p>On our <a href="http://4cinc.com/">4C&#8217;s development server</a> (running CentOS), I was able to compile 7.3 without any issues whatsoever. </p>
<p>While recently switching to Mac, I still program on my old Ubuntu box and updating the Vim installation didn&#8217;t work the first time I tried. I noticed that my Ubuntu installation needed <strong>xorg-dev</strong> and <strong>libgtk2.0-dev</strong> packages, once installed I was able to compile an complete the Vim&#8217;s installation.</p>
<p>Here is little script I use to compile and install Vim on CentOS (used it on Ubuntu as well):</p>
<pre name="code" class="php">
#!/bin/bash
export CONF_OPT_GUI='--enable-gui=gtk2'
export CONF_OPT_PYTHON='--enable-pythoninterp'
export CONF_OPT_MULTIBYTE='--enable-multibyte'
export CONF_OPT_FEAT='--with-features=huge'
export CONF_OPT_COMPBY='--with-compiledby="yourname@here.com'

make distclean
./configure $CONF_OPT_FEAT $CONF_OPT_MULTIBYTE $CONF_OPT_PYTHON $CONF_OPT_COMPBY $CONF_OPT_GUI
make
make install
</pre>
<p>Save it into extracted <strong>vim73</strong> directory (I prefer to use name &#8220;configure-my&#8221;), then simply source:</p>
<pre name="code" class="shell">
source configure-my
</pre>
<p>Hope that saves you some time and happy Viming!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2010/08/17/vim-7-3-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Uri and spaces/unwise chars in URLs</title>
		<link>http://www.phpmag.ru/2010/01/13/zend_uri-and-unwise-chars-in-urls/</link>
		<comments>http://www.phpmag.ru/2010/01/13/zend_uri-and-unwise-chars-in-urls/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:15:06 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Zend_Uri]]></category>

		<guid isPermaLink="false">http://www.phpmag.ru/?p=928</guid>
		<description><![CDATA[Usage of Zend_Http_Client is pretty straight-forward: $client = new Zend_Http_Client($uri); $client->request(Zend_Http_Client::HEAD); // HTTP HEAD request However, today, on my Ubuntu box I had real problems as HTTP client constantly ended in segmentation fault (SIGTERM in apache logs). When debugging, I noticed that it does so only if $uri contains so called &#8220;unwise&#8221; characters, such as [...]]]></description>
			<content:encoded><![CDATA[<p>Usage of Zend_Http_Client is pretty straight-forward:</p>
<pre name="code" class="php">
$client = new Zend_Http_Client($uri);
$client->request(Zend_Http_Client::HEAD); // HTTP HEAD request
</pre>
<p>However, today, on my Ubuntu box I had real problems as HTTP client constantly ended in segmentation fault (SIGTERM in apache logs). When debugging, I noticed that it does so only if $uri contains so called &#8220;unwise&#8221; characters, such as spaces, &#8220;{&#8220;, &#8220;}&#8221;, &#8220;^&#8221; etc.</p>
<p>Going deeper, I reviewed the source code of Zend_Http_Client::setUri($uri) method, only to discover that it relies on Zend_Uri::factory($uri), to initialize the URLs. From there it was pretty simple. Zend_Uri is aware of &#8220;unwise&#8221; chars problem and disallows them by default (why exception thrown by Zend_Uri ended in SIGTERM is yet to discover, however). In order to allow such a characters:</p>
<pre name="code" class="php">
Zend_Uri::setConfig(array('allow_unwise' => true));
$client = new Zend_Http_Client($uri); // $uri may contain unwise chars now
</pre>
<p>After issuing above instruction Zend_Uri accepts those unwisely formed URIs. Plus, you have to URL-encode white-spaces (i.e. make sure that white-spaces in query string, or actually in URI part after the host name are replaced with &#8220;%20&#8243; char) to make them acceptable.</p>
<p>Further info available in <a href="http://framework.zend.com/manual/en/zend.uri.html#zend.uri.validation.allowunwise">offical documentation</a>.</p>
<p>Please note, that I still think that having unreliable chars in URI is really bad practice. If you work with some system that already gone far on this path, it&#8217;s nice to have a method to actually consume such a wildly formed URIs. Kudos to Zend_Uri maintainers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2010/01/13/zend_uri-and-unwise-chars-in-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NetBeans + PHP: type hinting</title>
		<link>http://www.phpmag.ru/2009/07/15/netbeans-php-type-hinting/</link>
		<comments>http://www.phpmag.ru/2009/07/15/netbeans-php-type-hinting/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 20:42:21 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://www.phpmag.ru/?p=676</guid>
		<description><![CDATA[Sometimes, especially when dealing with variations of factory pattern, single method (namely factory()) can return objects of different types, so NetBeans is unable to guess the exact type of returned instance and as such cannot auto-complete. Indeed, you can setup return type using phpDoc syntax: /** * @return Some_Base_Abstract_Class_Name */ public function factory($adapter) but that [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes, especially when dealing with variations of factory pattern, single method (namely <em>factory()</em>) can return objects of different types, so NetBeans is unable to guess the exact type of returned instance and as such cannot auto-complete. Indeed, you can setup return type using phpDoc syntax:</p>
<pre name="code" class="php">
/**
 * @return Some_Base_Abstract_Class_Name
 */
public function factory($adapter)
</pre>
<p>but that doesn&#8217;t work if returned objects are specifications of more general abstract class (exactly the case with factory).</p>
<p>As it turned out, you can easily resolve this issue &#8211; just document your variable with @var, before calling factory() method:</p>
<pre name="code" class="php">
/**
 * @var Some_Specific_Class $foo
 */
$foo = Magic::factory('adapterName');
$foo-> // and NetBeans opens pop-up list with available attributes and methods
</pre>
<p>The good news, you can use this method in any scope &#8211; it just works <img src='http://www.phpmag.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I love NetBeans!!</p>
<p><strong>UPD:</strong> Well, actually NetBeans seems to be picky of scope &#8211; as reported by others (and confirmed by myself).</p>
<p><strong>UPD1:</strong> Actually NetBeans handles this quite well, just use vdoc (review <a href="http://blogs.sun.com/netbeansphp/entry/defining_a_variable_type_in">this</a> and <a href="http://blogs.sun.com/netbeansphp/entry/defining_variable_type_in_a">this</a> for details)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2009/07/15/netbeans-php-type-hinting/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Игнорирование файлов при работе с репозиторем svn</title>
		<link>http://www.phpmag.ru/2009/01/10/%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d0%b8-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b5-%d1%81-%d1%80%d0%b5%d0%bf/</link>
		<comments>http://www.phpmag.ru/2009/01/10/%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d0%b8-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b5-%d1%81-%d1%80%d0%b5%d0%bf/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 04:08:45 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tricks & Tips]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=269</guid>
		<description><![CDATA[В случае когда определенные файлы/каталоги не должны попадать под контроль версий, достаточно установить свойство svn:ignore: svn propset svn:ignore *.pyc dirname В случае если такое свойство уже существует: svn propedit svn:ignore dirname Например, на UMapper&#8216;е для игнорирования авто-сгенеренных CAPTCHA файлов находящихся в каталоге /files/captcha и имеющих названия вида &#8220;cap_RANDOM_STRING&#8221;, я использовал следующую комманду: svn propset svn:ignore [...]]]></description>
			<content:encoded><![CDATA[<p>В случае когда определенные файлы/каталоги не должны попадать под контроль версий, достаточно установить свойство svn:ignore:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">svn propset svn:ignore *.pyc dirname</pre></div></div>

<p>В случае если такое свойство уже существует:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">svn propedit svn:ignore dirname</pre></div></div>

<p>Например, на <a href="http://www.umapper.com">UMapper</a>&#8216;е для игнорирования авто-сгенеренных CAPTCHA файлов находящихся в каталоге /files/captcha и имеющих названия вида &#8220;cap_RANDOM_STRING&#8221;, я использовал следующую комманду:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">svn propset svn:ignore cap_* /files/captcha/</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2009/01/10/%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%84%d0%b0%d0%b9%d0%bb%d0%be%d0%b2-%d0%bf%d1%80%d0%b8-%d1%80%d0%b0%d0%b1%d0%be%d1%82%d0%b5-%d1%81-%d1%80%d0%b5%d0%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Поиск по каталогу с игнорированием .svn диреторий</title>
		<link>http://www.phpmag.ru/2009/01/10/%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%bf%d0%be-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d1%83-%d1%81-%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5%d0%bc-svn-%d0%b4/</link>
		<comments>http://www.phpmag.ru/2009/01/10/%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%bf%d0%be-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d1%83-%d1%81-%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5%d0%bc-svn-%d0%b4/#comments</comments>
		<pubDate>Sat, 10 Jan 2009 03:05:06 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[Tricks & Tips]]></category>
		<category><![CDATA[find command]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=264</guid>
		<description><![CDATA[Еще кое-что о развертке приложения с использованием svn. Бывает что нужно изменить все файлы или каталоги (а также подкаталоги), скажем сменить permission mask. Это легко сделать используя: find . [pattern] -exec chmod +x '{}' \; Однако, в наших каталогах, кроме собственно данных, находяться также системные папки Subversion &#8211; .svn, и изменения в них вноситься вручную [...]]]></description>
			<content:encoded><![CDATA[<p>Еще кое-что о развертке приложения с использованием svn. Бывает что нужно изменить все файлы или каталоги (а также подкаталоги), скажем сменить permission mask. Это легко сделать используя:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">find . [pattern] -exec chmod +x '{}' \;</pre></div></div>

<p>Однако, в наших каталогах, кроме собственно данных, находяться также системные папки Subversion &#8211; .svn, и изменения в них вноситься вручную никак не должны. Чтобы игнорировать все .svn каталоги, используем опцию -prune:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">find .  -path '*/.svn' -prune -o -type d -print</pre></div></div>

<p>Возвратяться все каталоги кроме .svn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2009/01/10/%d0%bf%d0%be%d0%b8%d1%81%d0%ba-%d0%bf%d0%be-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d1%83-%d1%81-%d0%b8%d0%b3%d0%bd%d0%be%d1%80%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5%d0%bc-svn-%d0%b4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache + Subversion: защита каталогов .svn</title>
		<link>http://www.phpmag.ru/2009/01/09/apache-subversion-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%be%d0%b2-svn/</link>
		<comments>http://www.phpmag.ru/2009/01/09/apache-subversion-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%be%d0%b2-svn/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 03:17:25 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=259</guid>
		<description><![CDATA[В случае если вы решили развернуть web-приложение с использованием Subversion, стоит позаботиться о том чтобы административные каталоги .svn были недоступны через http-протокол. Для этого используется либо файл .htaccess, либо (что предпочтительнее, но не всегда возможно) вносятся изменения в httpd.conf. Для защиты каталогов от внешнего доступа в корневую директорию помещается файл .htaccess со следующим содержимым: &#60;IfModule [...]]]></description>
			<content:encoded><![CDATA[<p>В случае если вы решили развернуть web-приложение с использованием Subversion, стоит позаботиться о том чтобы административные каталоги .svn были недоступны через http-протокол. Для этого используется либо файл .htaccess, либо (что предпочтительнее, но не всегда возможно) вносятся изменения в httpd.conf.</p>
<p>Для защиты каталогов от внешнего доступа в корневую директорию помещается файл .htaccess со следующим содержимым:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>IfModule mod_rewrite.c<span style="color: #000000; font-weight: bold;">&gt;</span>
  RewriteRule ^<span style="color: #7a0874; font-weight: bold;">&#40;</span>.<span style="color: #000000; font-weight: bold;">*/</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>?\.svn<span style="color: #000000; font-weight: bold;">/</span> - <span style="color: #7a0874; font-weight: bold;">&#91;</span>F,L<span style="color: #7a0874; font-weight: bold;">&#93;</span>
  ErrorDocument <span style="color: #000000;">403</span> <span style="color: #ff0000;">&quot;Access Forbidden&quot;</span>
<span style="color: #000000; font-weight: bold;">&lt;/</span>IfModule<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Для защиты всех каталогов .svn (а также каталогов CVS) в конфигурационный файл Apache &#8211; httpd.conf &#8211; вносится следующая директива:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;</span>DirectoryMatch <span style="color: #ff0000;">&quot;^/.*/(\.svn|CVS)/&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span>
  Order deny,allow
  Deny from all 
<span style="color: #000000; font-weight: bold;">&lt;/</span>DirectoryMatch<span style="color: #000000; font-weight: bold;">&gt;</span></pre></div></div>

<p>Буквально это ознaчает, что все пути содержащие .svn или CVS будут плеваться 403 &#8211; Forbidden.</p>
<p>Удачи на дорогах!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2009/01/09/apache-subversion-%d0%b7%d0%b0%d1%89%d0%b8%d1%82%d0%b0-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%be%d0%b2-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Проверка обязательных параметров</title>
		<link>http://www.phpmag.ru/2008/09/13/php-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%be%d0%b1%d1%8f%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d0%be%d0%b2/</link>
		<comments>http://www.phpmag.ru/2008/09/13/php-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%be%d0%b1%d1%8f%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d0%be%d0%b2/#comments</comments>
		<pubDate>Sat, 13 Sep 2008 15:03:29 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[PHP5]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=193</guid>
		<description><![CDATA[Иногда возникает ситуация, когда нужно проверить существует ли заданный ключ в массиве или нет. Предположим, что если ключа нет, нужно выдать сообщение об ошибке. Если такой ключ один, то 1 2 3 4 $myArr = array&#40;&#41;; if &#40;!isset&#40;$myArr&#91;'needle'&#93;&#41;&#41; &#123; printf&#40;'Ключ &#34;%s&#34; не найден!!', 'needle'&#41;; &#125; легко решит эту задачу. Однако когда ключей несколько стоит использовать [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда возникает ситуация, когда нужно проверить существует ли заданный ключ в массиве или нет. Предположим, что если ключа нет, нужно выдать сообщение об ошибке. Если такой ключ один, то</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$myArr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$myArr</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'needle'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Ключ &quot;%s&quot; не найден!!'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'needle'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>легко решит эту задачу. Однако когда ключей несколько стоит использовать <a href="http://ru.php.net/manual/ru/function.array-diff.php">array_diff</a>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$requiredParams</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'needle'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'anotherOne'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// список ключей</span>
<span style="color: #000088;">$myArr</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'someKey'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$params</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_diff</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$requiredParams</span><span style="color: #339933;">,</span> <span style="color: #990000;">array_keys</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$myArr</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Следующие ключи не найденны: %s!!'</span><span style="color: #339933;">,</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">', '</span><span style="color: #339933;">,</span> <span style="color: #000088;">$params</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>В случае если все обязательные ключи найденны, результат выполнения функции будет равен пустому массиву (при преобразовании в булев, которое происходит автоматом внутри if(), пустой массив интерпритируется как false), соответственно блок не будет выполнен. Если же массив непустой, то блок if() будет выполнен.</p>
<p>Данный метод очень удобен, если вы имеете функцию/метод, который получает одним из аргументов массив, в котором должны содержаться какие-либо обязательные ключи, для корректного исполнения дальшейшего кода.</p>
<p>Удачных выходных!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2008/09/13/php-%d0%bf%d1%80%d0%be%d0%b2%d0%b5%d1%80%d0%ba%d0%b0-%d0%be%d0%b1%d1%8f%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8c%d0%bd%d1%8b%d1%85-%d0%bf%d0%b0%d1%80%d0%b0%d0%bc%d0%b5%d1%82%d1%80%d0%be%d0%b2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL: Вывести те строки таблицы, ID которых не присутвтсует в другой таблице..</title>
		<link>http://www.phpmag.ru/2008/09/09/mysql-%d0%b2%d1%8b%d0%b2%d0%b5%d1%81%d1%82%d0%b8-%d1%82%d0%b5-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d1%8b-id-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d1%85-%d0%bd/</link>
		<comments>http://www.phpmag.ru/2008/09/09/mysql-%d0%b2%d1%8b%d0%b2%d0%b5%d1%81%d1%82%d0%b8-%d1%82%d0%b5-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d1%8b-id-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d1%85-%d0%bd/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 14:34:26 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=180</guid>
		<description><![CDATA[На самом деле проблема встречается очень даже часто: Дано две таблицы (tableA, tableB), в которых присутсвует семантически эквивалентная колонка, для простоты предположим что поле id, таблицы A, указывает на поле uid, таблицы B (простейший внешний ключ). Далее предположим нам нужно получить список пользователей из таблицы А, которые не представленны в таблице B. Как это сделать? [...]]]></description>
			<content:encoded><![CDATA[<p>На самом деле проблема встречается очень даже часто:</p>
<p>Дано две таблицы (tableA, tableB), в которых присутсвует семантически эквивалентная колонка, для простоты предположим что поле id, таблицы A, указывает на поле uid, таблицы B (простейший внешний ключ). Далее предположим нам нужно получить список пользователей из таблицы А, которые не представленны в таблице B. Как это сделать? Легко! Используем LEFT JOIN (обратите внимание на IS NULL):</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> a<span style="color: #66cc66;">.*</span> <span style="color: #993333; font-weight: bold;">FROM</span> tableA a <span style="color: #993333; font-weight: bold;">LEFT</span> <span style="color: #993333; font-weight: bold;">JOIN</span> tableB b <span style="color: #993333; font-weight: bold;">ON</span> a<span style="color: #66cc66;">.</span>id <span style="color: #66cc66;">=</span> b<span style="color: #66cc66;">.</span>uid <span style="color: #993333; font-weight: bold;">WHERE</span> b<span style="color: #66cc66;">.</span>uid <span style="color: #993333; font-weight: bold;">IS</span> <span style="color: #993333; font-weight: bold;">NULL</span></pre></div></div>

<p>Удачного дня!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2008/09/09/mysql-%d0%b2%d1%8b%d0%b2%d0%b5%d1%81%d1%82%d0%b8-%d1%82%d0%b5-%d1%81%d1%82%d1%80%d0%be%d0%ba%d0%b8-%d1%82%d0%b0%d0%b1%d0%bb%d0%b8%d1%86%d1%8b-id-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d1%85-%d0%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ссылки не являются указателями!</title>
		<link>http://www.phpmag.ru/2008/09/05/%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8-%d0%bd%d0%b5-%d1%8f%d0%b2%d0%bb%d1%8f%d1%8e%d1%82%d1%81%d1%8f-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8f%d0%bc%d0%b8/</link>
		<comments>http://www.phpmag.ru/2008/09/05/%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8-%d0%bd%d0%b5-%d1%8f%d0%b2%d0%bb%d1%8f%d1%8e%d1%82%d1%81%d1%8f-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8f%d0%bc%d0%b8/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 21:51:02 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=154</guid>
		<description><![CDATA[Хотя это очевидно и подчеркивается в PHP мануале, тем не менее поймал себя на мысли, что неверно интерпретировал следующий код: 1 2 3 4 5 $a = 12; $b = &#38;$a; unset&#40;$b&#41;; // удаляем ссылку var_dump&#40;$b&#41;; var_dump&#40;$a&#41;; Результат исполнения: NULL int&#40;12&#41; Таким образом, при удалении ссылки, удаляется именно ссылка, оригинальная переменная остается нетронутой, и указывает [...]]]></description>
			<content:encoded><![CDATA[<p>Хотя это очевидно и подчеркивается в <a href="http://www.php.net/manual/ru/language.references.arent.php">PHP мануале</a>, тем не менее поймал себя на мысли, что неверно интерпретировал следующий код:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$a</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">12</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$b</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$a</span><span style="color: #339933;">;</span>
<span style="color: #990000;">unset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// удаляем ссылку</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$b</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$a</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Результат исполнения:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #009900; font-weight: bold;">NULL</span>
int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Таким образом, при удалении ссылки, удаляется именно ссылка, оригинальная переменная остается нетронутой, и указывает на все то же значение. В общем, в PHP, ссылки (reference) являются не чем иным, как алиасами (alias) &#8211; думать о них как об указателях (pointers) неправильно.</p>
<p>UPDATE: When you unset the reference, you just break the binding between variable name and variable content. This does not mean that variable content will be destroyed. Т.е. когда ссылка удаляется, на деле уничтожается лишь связь между именем переменной и ее значением. Это значит, что при уничтожении переменной путем <a href="http://ru2.php.net/manual/en/function.unset.php">unset()</a>, значение не уничтожается.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2008/09/05/%d1%81%d1%81%d1%8b%d0%bb%d0%ba%d0%b8-%d0%bd%d0%b5-%d1%8f%d0%b2%d0%bb%d1%8f%d1%8e%d1%82%d1%81%d1%8f-%d1%83%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d0%b5%d0%bb%d1%8f%d0%bc%d0%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5: показать содержимое каталога..</title>
		<link>http://www.phpmag.ru/2008/08/11/php5-%d0%bf%d0%be%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d1%8c-%d1%81%d0%be%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d0%bc%d0%be%d0%b5-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%b0/</link>
		<comments>http://www.phpmag.ru/2008/08/11/php5-%d0%bf%d0%be%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d1%8c-%d1%81%d0%be%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d0%bc%d0%be%d0%b5-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%b0/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 14:16:16 +0000</pubDate>
		<dc:creator>Victor Farazdagi</dc:creator>
				<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[php iterators]]></category>
		<category><![CDATA[SPL]]></category>

		<guid isPermaLink="false">http://www.php-alania.ru/?p=83</guid>
		<description><![CDATA[Вопрос: Как, используя PHP5, показать содержимое определенного каталога? Рецепт: Легко! Используйте итераторы (в данном случае DirectoryIterator): 1 2 3 foreach &#40;new DirectoryIterator&#40;'./'&#41; as $Item&#41; &#123; echo $Item-&#62;current&#40;&#41;; &#125; Для просмотра доступных методов DirectoryIterator &#8211; смотрите в мануал. N.B. Итератор DirectoryIterator возвращает объект собственного типа, т.е. $Item является объектом класса DirectoryIterator.]]></description>
			<content:encoded><![CDATA[<p>Вопрос: Как, используя PHP5, показать содержимое определенного каталога?</p>
<p>Рецепт:</p>
<p>Легко! Используйте итераторы (в данном случае <a href="http://ru.php.net/manual/en/class.directoryiterator.php">DirectoryIterator</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> DirectoryIterator<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./'</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$Item</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$Item</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">current</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Для просмотра доступных методов DirectoryIterator &#8211; <a href="http://ru.php.net/manual/en/class.directoryiterator.php">смотрите в мануал</a>. </p>
<p>N.B. Итератор DirectoryIterator возвращает объект собственного типа, т.е. $Item является объектом класса DirectoryIterator.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.phpmag.ru/2008/08/11/php5-%d0%bf%d0%be%d0%ba%d0%b0%d0%b7%d0%b0%d1%82%d1%8c-%d1%81%d0%be%d0%b4%d0%b5%d1%80%d0%b6%d0%b8%d0%bc%d0%be%d0%b5-%d0%ba%d0%b0%d1%82%d0%b0%d0%bb%d0%be%d0%b3%d0%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

