<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>PHP on Roman Dushko - Personal blog</title><link>https://www.rodush.com/categories/php/</link><description>Recent content in PHP on Roman Dushko - Personal blog</description><image><title>Roman Dushko - Personal blog</title><url>https://www.rodush.com/images/rodush-og.png</url><link>https://www.rodush.com/images/rodush-og.png</link></image><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 19 Oct 2016 12:16:05 +0000</lastBuildDate><atom:link href="https://www.rodush.com/categories/php/index.xml" rel="self" type="application/rss+xml"/><item><title>Functional approach in PHP</title><link>https://www.rodush.com/2016/10/functional-approach-in-php/</link><pubDate>Wed, 19 Oct 2016 12:16:05 +0000</pubDate><guid>https://www.rodush.com/2016/10/functional-approach-in-php/</guid><description>&lt;p&gt;The code snippet below will only work in PHP-5.3+!.&lt;/p&gt;
&lt;p&gt;Isn’t it the famous functional programming with &lt;em&gt;functions as first class citizens&lt;/em&gt;, closures and other functional bla-bla?&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;one&lt;/span&gt;($a &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;callable&lt;/span&gt; $b) &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($a) {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;call_user_func&lt;/span&gt;($b, $a);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; };
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;print_r&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;call_user_func&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;one&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;), &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($x) { &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $x &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;; } ));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This was created just for fun. As you may see, in place of callable you can put any valid PHP callable, e.g.in a form &lt;code&gt;['Class', 'method']&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Form builder — entity field: «Class BundleAliasName:EntityClassName does not exist «</title><link>https://www.rodush.com/2012/07/form-builder-entity-field-class-bundlealiasnameentityclassname-does-not-exist/</link><pubDate>Thu, 26 Jul 2012 12:54:31 +0000</pubDate><guid>https://www.rodush.com/2012/07/form-builder-entity-field-class-bundlealiasnameentityclassname-does-not-exist/</guid><description>&lt;p&gt;После обновления symfony-2.1 до версии из транка (symfony-2.1.0-beta4) отвалилась форма, в которой я использовал поле типа entity, где в качестве класса сущности указал не полный путь к классу, а через bundle alias:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$builder&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;field_name, &amp;#39;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;entity&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; array(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#39;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39; =&amp;gt; &amp;#39;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;BundleAliasName&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;EntityClassName&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#e6db74"&gt; &amp;#39;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;multiple&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// .....
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Код выбрасывал исключение с сообщением&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Class BundleAliasName:EntityClassName does not exist»&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Если прописать полный путь через пространство имен:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;class&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Full\Bundle\Path\Entity\EntityClassName&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;то все работало хорошо.&lt;/p&gt;</description></item><item><title>Как обновить проект с symfony-2.0 до symfony-2.1</title><link>https://www.rodush.com/2012/07/%D0%BA%D0%B0%D0%BA-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82-%D1%81-symfony-2-0-%D0%B4%D0%BE-symfony-2-1/</link><pubDate>Sat, 07 Jul 2012 19:57:18 +0000</pubDate><guid>https://www.rodush.com/2012/07/%D0%BA%D0%B0%D0%BA-%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82-%D1%81-symfony-2-0-%D0%B4%D0%BE-symfony-2-1/</guid><description>&lt;p&gt;Изначально я создавал свой проект на версии symfony 2.0 без vendors (standard edition). Все зависимости были установлены через&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;php bin/vendors install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проект находился в git-репозитории.&lt;/p&gt;
&lt;p&gt;Сразу оговорка — на момент написания статьи версия symfony 2.1 находилась в стадии бета-тестирования.&lt;/p&gt;
&lt;p&gt;Тем не менее, основная тенденция уже была понятна и значительных изменений в АПИ не предвиделось.&lt;/p&gt;
&lt;p&gt;Одно из ключевых нововведений в symfony 2.1 — использование &lt;a href="http://getcomposer.org/"&gt;Composer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;На вебсайте фреймворка Symfony можно найти описание процесса создания &lt;strong&gt;нового&lt;/strong&gt; проекта, но нет информации как обновить существующий.&lt;/p&gt;</description></item><item><title>Symfony 2.0 FOSUserBundle — ошибка «Could not load type»</title><link>https://www.rodush.com/2012/06/symfony-2-0-fosuserbundle-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-could-not-load-type/</link><pubDate>Tue, 19 Jun 2012 10:05:33 +0000</pubDate><guid>https://www.rodush.com/2012/06/symfony-2-0-fosuserbundle-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0-could-not-load-type/</guid><description>&lt;p&gt;Если вы используете &lt;code&gt;FOSUserBundle&lt;/code&gt; вместе с symfony 2.0 и вам понадобилось переопределить какую-либо из форм, идущих «в комплекте» с этим плагином,&lt;/p&gt;
&lt;p&gt;то, без сомнения, вы прочитали эту заметку: &lt;a href="https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md"&gt;https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/overriding_forms.md&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;После обновления вашей страницы может случиться прискорбная ситуация — сообщение об ошибке «Could not load type ….» (вместо многоточия ваш &lt;em&gt;alias&lt;/em&gt; для кастомной формы).&lt;/p&gt;
&lt;p&gt;Вроде бы и в файле app/config.yml все верно с отступами (имеется ввиду конфигурация fos_user сервиса), и файл конфигурации вашего сервиса &lt;code&gt;service.xml&lt;/code&gt; (или &lt;code&gt;service.yml&lt;/code&gt;) (в CustomUserBundle) описан правильно, и везде совпадает alias, getName() и т.п…. а все та же ошибка. Бывало? Не беда! 🙂 Есть решение вашей проблемы! Читайте далее, и все окажется просто!&lt;/p&gt;</description></item><item><title>How to change PHPMyAdmin session timeout</title><link>https://www.rodush.com/2011/03/how-to-change-phpmyadmin-session-timeout/</link><pubDate>Sun, 27 Mar 2011 12:26:40 +0000</pubDate><guid>https://www.rodush.com/2011/03/how-to-change-phpmyadmin-session-timeout/</guid><description>&lt;p&gt;By default, the session lifetime in a new PhpMyAdmin installation using the &amp;ldquo;cookie&amp;rdquo;; authentication method is 1440 seconds (24 minutes). That is, after 24 minutes of inactivity, the next request will take the user to the login page. To increase the session lifetime, set the value of the variable to say, 60x longer:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$cfg[&lt;span style="color:#e6db74"&gt;&amp;#39;LoginCookieValidity&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1440&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;60&lt;/span&gt;; &lt;span style="color:#75715e"&gt;// 86400 means one day (24-hours)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Отслеживание ошибок и уведомлений PHP</title><link>https://www.rodush.com/2011/03/%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-%D0%B8-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-php/</link><pubDate>Sun, 20 Mar 2011 20:04:48 +0000</pubDate><guid>https://www.rodush.com/2011/03/%D0%BE%D1%82%D1%81%D0%BB%D0%B5%D0%B6%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA-%D0%B8-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B9-php/</guid><description>&lt;p&gt;Иногда бывает необходимо отследить некритические ошибки, возникающие в работе РНР скрипта (&lt;code&gt;E_WARNING&lt;/code&gt;, &lt;code&gt;E_NOTICE&lt;/code&gt;, etc.) и куда-то их грамотно собрать.&lt;/p&gt;
&lt;p&gt;К примеру, мы хотим сделать валидацию XML файла с помощью &lt;code&gt;XMLReader&lt;/code&gt; (кстати, об этом, думаю, можно рассказать в отдельной публикации). В случае, если XML невалидный, то выбросить исключение, прекратив дальнейшую работу.&lt;/p&gt;
&lt;p&gt;Все ошибки валидации выдаются через &amp;ldquo;WARNING&amp;rdquo;-сообщения.&lt;/p&gt;
&lt;p&gt;Для того, чтобы получить такое сообщение можно поступить следующим образом:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Track the errors (to be able to store the PHP error message)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$oldConfigValue &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ini_set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;track_errors&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; ($xmlReader&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;read&lt;/span&gt;()) {} &lt;span style="color:#75715e"&gt;// полностью читаем XML
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;$xmlReader&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isValid&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;throw&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Exception&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;XML does not conform to schema. &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $php_errormsg);
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// Set back track_errors setting:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;ini_set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;track_errors&amp;#39;&lt;/span&gt;, $oldConfigValue);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь мы сначала устанавливаем директиву РНР &lt;code&gt;'track_errors'&lt;/code&gt; (Отслеживать ошибки) в TRUE (1). А далее — magic! 🙂&lt;/p&gt;</description></item></channel></rss>