<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    <title>Mike's sudden inspirations - PHP</title>
    <link>http://blog.iworks.at/</link>
    <description>Geek; Keep Away</description>
    <dc:language>en</dc:language>
    
    <generator>Serendipity 0.9 - http://www.s9y.org/</generator>
    <pubDate>Tue, 11 May 2010 10:58:08 GMT</pubDate>

    <image>
        <url>http://blog.iworks.at/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Mike's sudden inspirations - PHP - Geek; Keep Away</title>
        <link>http://blog.iworks.at/</link>
        <width>100</width>
        <height>21</height>
    </image>
<item>
    <title>WebSockets Handshake non HTTP conforming?</title>
    <link>http://blog.iworks.at/?/archives/69-WebSockets-Handshake-non-HTTP-conforming.html</link>
<category>WTF</category><category>PHP</category><category>WEB</category>    <comments>http://blog.iworks.at/?/archives/69-WebSockets-Handshake-non-HTTP-conforming.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=69</wfw:comment>
    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=69</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just found a &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3dlYi5hcmNoaXZlb3JhbmdlLmNvbS9hcmNoaXZlL3YvYzJKYXFIWGNqTXlkSGZxajhqamk=&amp;amp;entry_id=69&quot; title=&quot;http://web.archiveorange.com/archive/v/c2JaqHXcjMydHfqj8jji&quot;  onmouseover=&quot;window.status='http://web.archiveorange.com/archive/v/c2JaqHXcjMydHfqj8jji';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;revelatory discussion&lt;/a&gt;. The &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3dlYi5hcmNoaXZlb3JhbmdlLmNvbS9hcmNoaXZlL3YvYzJKYXFIWGNqTXlkSGZxajhqamkjRjQ3V3p4ZDdKdVJjMEZF&amp;amp;entry_id=69&quot; title=&quot;http://web.archiveorange.com/archive/v/c2JaqHXcjMydHfqj8jji#F47Wzxd7JuRc0FE&quot;  onmouseover=&quot;window.status='http://web.archiveorange.com/archive/v/c2JaqHXcjMydHfqj8jji#F47Wzxd7JuRc0FE';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;summary of Bjoern Hoehrmann&lt;/a&gt; is especially interesting with regards to that topic.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;While skimming through the new &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi53My5vcmcvaHRtbDUvd2Vic29ja2V0cy8=&amp;amp;entry_id=69&quot; title=&quot;http://dev.w3.org/html5/websockets/&quot;  onmouseover=&quot;window.status='http://dev.w3.org/html5/websockets/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;HTML5 WebSocket draft&lt;/a&gt;, I noticed the following exemplar HTTP message demonstrating the client message of a WebSocket handshake:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
        GET /demo HTTP/1.1
        Host: example.com
        Connection: Upgrade
        Sec-WebSocket-Key2: 12998 5 Y3 1  .P00
        Sec-WebSocket-Protocol: sample
        Upgrade: WebSocket
        Sec-WebSocket-Key1: 4 @1  46546xW%0l 1 5
        Origin: http://example.com

        ^n:ds[4U&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To me this looks non conforming to the &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi5odG1s&amp;amp;entry_id=69&quot; title=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616.html&quot;  onmouseover=&quot;window.status='http://www.w3.org/Protocols/rfc2616/rfc2616.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;HTTP spec&lt;/a&gt; due to the lack of an indicator that the request contains a message body.&lt;/p&gt;

&lt;p&gt;Quoting &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM0Lmh0bWwjc2VjNC4z&amp;amp;entry_id=69&quot; title=&quot;http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3&quot;  onmouseover=&quot;window.status='http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.3';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;the 4th paragraph of section 4.3 of RFC2616&lt;/a&gt;:&lt;/p&gt;

    &lt;blockquote&gt;The &lt;strong&gt;presence of a message-body&lt;/strong&gt; in a request &lt;strong&gt;is signaled&lt;/strong&gt; by the inclusion of a &lt;strong&gt;Content-Length or Transfer-Encoding header&lt;/strong&gt; field in the request's message-headers. A message-body MUST NOT be included in a request if the specification of the request method (section 5.1.1) does not allow sending an entity-body in requests. A server SHOULD read and forward a message-body on any request; if the request method does not include defined semantics for an entity-body, then the message-body SHOULD be ignored when handling the request.    &lt;/blockquote&gt;
&lt;p&gt;Huh?&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Mon, 10 May 2010 10:16:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/69-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Looking for PHP Geeks in Austria</title>
    <link>http://blog.iworks.at/?/archives/68-Looking-for-PHP-Geeks-in-Austria.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/68-Looking-for-PHP-Geeks-in-Austria.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=68</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=68</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;You guessed. I'm desperately looking for decent PHP Coders in Vienna, Austria.&lt;/p&gt;

&lt;p&gt;The job posting (in german) can be found here: &lt;br /&gt;
&lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3d3dy5pbnFuZXQuYXQvam9iMDkuaHRtbA==&amp;amp;entry_id=68&quot; title=&quot;http://www.inqnet.at/job09.html&quot;  onmouseover=&quot;window.status='http://www.inqnet.at/job09.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;http://www.inqnet.at/job09.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just ping me if you're interested in an face-to-face interview.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Mon, 20 Apr 2009 15:55:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/68-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>PHP commandline highlighter</title>
    <link>http://blog.iworks.at/?/archives/67-PHP-commandline-highlighter.html</link>
<category>WTF</category><category>PHP</category>    <comments>http://blog.iworks.at/?/archives/67-PHP-commandline-highlighter.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=67</wfw:comment>
    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=67</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;Just chewed up a &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi5pd29ya3MuYXQvY29kZS9jaGwucGhwcw==&amp;amp;entry_id=67&quot; title=&quot;http://dev.iworks.at/code/chl.phps&quot;  onmouseover=&quot;window.status='http://dev.iworks.at/code/chl.phps';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;command line highlighter for php code&lt;/a&gt;.&lt;br /&gt;
It's hacky, but it fullfills my needs.&lt;/p&gt;

&lt;p&gt;Cheers-&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Fri, 10 Apr 2009 12:29:16 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/67-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>pecl_http and sub-second timeouts</title>
    <link>http://blog.iworks.at/?/archives/66-pecl_http-and-sub-second-timeouts.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/66-pecl_http-and-sub-second-timeouts.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=66</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=66</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;Just a quick info, because I forget this again and again--and it's not noted in the &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BocC5uZXQvbWFudWFsL2VuL3JlZi5odHRwLnBocA==&amp;amp;entry_id=66&quot; title=&quot;http://php.net/manual/en/ref.http.php&quot;  onmouseover=&quot;window.status='http://php.net/manual/en/ref.http.php';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;documentation&lt;/a&gt; yet either.&lt;/p&gt;

&lt;p&gt;Sub-second timeouts are supported by &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsLw==&amp;amp;entry_id=66&quot; title=&quot;http://curl.haxx.se/libcurl/&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/libcurl/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;libcurl&lt;/a&gt; and thus by &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wZWNsX2h0dHA=&amp;amp;entry_id=66&quot; title=&quot;http://pecl.php.net/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl_http&lt;/a&gt;--yes but only if libcurl is built with &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2MtYXJlcy5oYXh4LnNl&amp;amp;entry_id=66&quot; title=&quot;http://c-ares.haxx.se&quot;  onmouseover=&quot;window.status='http://c-ares.haxx.se';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;(c-)ares&lt;/a&gt; support:&lt;/p&gt;

&lt;p&gt;&amp;lt;quote url=&amp;quot;&lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9lYXN5X3NldG9wdC5odG1sI0NVUkxPUFRUSU1FT1VUTVM=&amp;amp;entry_id=66&quot; title=&quot;http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTTIMEOUTMS&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTTIMEOUTMS';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;curl_easy_setopt.html&lt;/a&gt;&amp;quot;&amp;gt;&lt;br /&gt;
    &lt;blockquote&gt;If libcurl is built to use the standard system name resolver, that portion of the transfer will still use full-second resolution for timeouts with a minimum timeout allowed of one second.    &lt;/blockquote&gt;
&lt;br /&gt;
&amp;lt;/quote&amp;gt;&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Fri, 05 Dec 2008 13:13:00 +0100</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/66-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Introducing libcurls multi socket API</title>
    <link>http://blog.iworks.at/?/archives/62-Introducing-libcurls-multi-socket-API.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/62-Introducing-libcurls-multi-socket-API.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=62</wfw:comment>
    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=62</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;So, finally a first beta of &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=62&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl_http&lt;/a&gt; 1.6 has been released.&lt;/p&gt;

&lt;p&gt;This is the first version which supports &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsLw==&amp;amp;entry_id=62&quot; title=&quot;http://curl.haxx.se/libcurl/&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/libcurl/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;libcurl&lt;/a&gt;s &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvY3VybF9tdWx0aV9zb2NrZXQuaHRtbA==&amp;amp;entry_id=62&quot; title=&quot;http://curl.haxx.se/libcurl/c/curl_multi_socket.html&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/libcurl/c/curl_multi_socket.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;multi socket API&lt;/a&gt; introduced in 7.16 through libevent.&lt;/p&gt;

&lt;p&gt;Here's a not very impressive comparison of the performance of the traditional multi API vs. the new multi socket API:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html

&amp;gt;   1.134667s

mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html

&amp;gt;   1.151088s

mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html

&amp;gt;   1.131867s

mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html -e

&amp;gt;   0.993878s

mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html -e

&amp;gt;   0.998832s

mike@honeybadger:~/build/php-5.2-debug$ cli \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php \
    -u http://honeybadger/empty.html -e

&amp;gt;   0.997121s&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Above empty.html is, well, empty. The following test requests a 100k file:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin

&amp;gt;   2.205190s

mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin

&amp;gt;   2.210525s

mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin

&amp;gt;   2.254281s

mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin -e

&amp;gt;   2.007220s

mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin -e

&amp;gt;   1.945564s

mike@honeybadger:~/build/php-5.2-debug$ cli  \
    ~/cvs/pecl/http/scripts/bench_select_vs_event.php  \
    -u http://honeybadger/100k.bin -e

&amp;gt;   1.969575s&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;So, apparently time savings are not huge, but noticable.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Tue, 11 Sep 2007 17:09:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/62-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Silence</title>
    <link>http://blog.iworks.at/?/archives/60-Silence.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/60-Silence.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=60</wfw:comment>
    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=60</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;It's been &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Jsb2cuaXdvcmtzLmF0Lz8vYXJjaGl2ZXMvNTAtSFRUUCwtQ1VSTC1hbmQtc3R1ZmYuaHRtbA==&amp;amp;entry_id=60&quot; title=&quot;http://blog.iworks.at/?/archives/50-HTTP,-CURL-and-stuff.html&quot;  onmouseover=&quot;window.status='http://blog.iworks.at/?/archives/50-HTTP,-CURL-and-stuff.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;more than 3 months&lt;/a&gt; that I brought back to mind, what was happening in my PHP/HTTP/CURL world, so here we go.&lt;/p&gt;


&lt;h4 id=&quot;toc0&quot;&gt;February:&lt;/h4&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=60&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/http&lt;/a&gt; with support for persistent handles has been released.&lt;/p&gt;

&lt;p&gt;A &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL21hcmMuaW5mby8/bD1waHAtZGV2JmFtcDttPTExNzE4ODAzNTYxMDAxMSZhbXA7dz0y&amp;amp;entry_id=60&quot; title=&quot;http://marc.info/?l=php-dev&amp;amp;m=117188035610011&amp;amp;w=2&quot;  onmouseover=&quot;window.status='http://marc.info/?l=php-dev&amp;amp;m=117188035610011&amp;amp;w=2';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;proposal of mine at internals&lt;/a&gt; to change the behaviour of read_property/write_property and get_property_ptr_ptr object handlers has successfully been ignored.&lt;/p&gt;

&lt;p&gt;The idea was the following:&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Wouldn't it be reasonable for the engine to use get_property_ptr_ptr() whenever it wants to modify a property and get rid of using read_property() for write access?&lt;/p&gt;

&lt;p&gt;That would make rather simple ops like concatenation, in-/decrementation etc work again with overloaded internal classes.  Just make the engine use read_property() followed by a write_property() when there's no get_property_ptr_ptr().&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Nobody was interested.&lt;/p&gt;


&lt;h4 id=&quot;toc1&quot;&gt;March:&lt;/h4&gt;
&lt;p&gt;I &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N2cy5waHAubmV0L3ZpZXd2Yy5jZ2kvcGhwLXNyYy9leHQvZGF0ZS9waHBfZGF0ZS5jP3IxPTEuMTMxJmFtcDtyMj0xLjEzMiZhbXA7ZGlmZl9mb3JtYXQ9dQ==&amp;amp;entry_id=60&quot; title=&quot;http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.131&amp;amp;r2=1.132&amp;amp;diff_format=u&quot;  onmouseover=&quot;window.status='http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.131&amp;amp;r2=1.132&amp;amp;diff_format=u';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;added a comparison object handler&lt;/a&gt; to the DateTime class, which means that comparisons of DateTime objects should work in recent PHP5 versions.&lt;/p&gt;

&lt;p&gt;I started development of pecl/libetpan, but &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL21hcmMuaW5mby8/bD1wZWNsLWRldiZhbXA7bT0xMTc0NjQ0NTI2MDA5OTQmYW1wO3c9Mg==&amp;amp;entry_id=60&quot; title=&quot;http://marc.info/?l=pecl-dev&amp;amp;m=117464452600994&amp;amp;w=2&quot;  onmouseover=&quot;window.status='http://marc.info/?l=pecl-dev&amp;amp;m=117464452600994&amp;amp;w=2';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;dropped it again&lt;/a&gt; because of pretty huge differences between how the library works and how PHP is supposed to work. What a pity.&lt;/p&gt;

&lt;p&gt;A less fine guy, some Omid, wanted me to write a PHP extension which calculates the strength of &amp;quot;poker hands&amp;quot;, but he jumped off when I had done the algos.&lt;/p&gt;


&lt;h4 id=&quot;toc2&quot;&gt;April:&lt;/h4&gt;
&lt;p&gt;A fine guy, pretending his name was Andreas Weber, noticed that pecl/http's request method implementation was completely b0rked. Thanks to his report it was fixed in 1.5.3.&lt;/p&gt;

&lt;p&gt;All fame Lukas Smith, queried me about what might have changed with my new output layer implementation for PHP6, but I noticed too late that it's been for a conference talk he was preparing, so I feel like I didn't spend enough attention to his questions. Sorry Lukas.&lt;/p&gt;

&lt;p&gt;I started to implement &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZQ==&amp;amp;entry_id=60&quot; title=&quot;http://curl.haxx.se&quot;  onmouseover=&quot;window.status='http://curl.haxx.se';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;libcurl's&lt;/a&gt; new multi_socket AKA hiper API in conjunction with &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL21vbmtleS5vcmcvfnByb3Zvcy9saWJldmVudC8=&amp;amp;entry_id=60&quot; title=&quot;http://monkey.org/~provos/libevent/&quot;  onmouseover=&quot;window.status='http://monkey.org/~provos/libevent/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;libevent&lt;/a&gt;, but stumbled across a few &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA3LTA0LzAzMDguaHRtbA==&amp;amp;entry_id=60&quot; title=&quot;http://curl.haxx.se/mail/lib-2007-04/0308.html&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/mail/lib-2007-04/0308.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;problem&lt;/a&gt;s.&lt;/p&gt;


&lt;h4 id=&quot;toc3&quot;&gt;May:&lt;/h4&gt;
&lt;p&gt;My journey with libcurl's multi_socket API &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA3LTA1LzAxMjUuaHRtbA==&amp;amp;entry_id=60&quot; title=&quot;http://curl.haxx.se/mail/lib-2007-05/0125.html&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/mail/lib-2007-05/0125.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;continues&lt;/a&gt;, which eventually causes the delay of a first pecl/http 1.6 release candidate.&lt;/p&gt;

&lt;p&gt;I &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi5pd29ya3MuYXQ=&amp;amp;entry_id=60&quot; title=&quot;http://dev.iworks.at&quot;  onmouseover=&quot;window.status='http://dev.iworks.at';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;tried&lt;/a&gt; &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2RydXBhbC5vcmc=&amp;amp;entry_id=60&quot; title=&quot;http://drupal.org&quot;  onmouseover=&quot;window.status='http://drupal.org';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Drupal&lt;/a&gt; for the first time.&lt;/p&gt;

&lt;hr /&gt;
&lt;p&gt;Well, that'd be it. If it reads like an extrusion of junk, it probably was. &lt;img src=&quot;http://blog.iworks.at/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Wed, 23 May 2007 17:14:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/60-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>nuff!</title>
    <link>http://blog.iworks.at/?/archives/59-nuff!.html</link>
<category>WTF</category><category>PHP</category>    <comments>http://blog.iworks.at/?/archives/59-nuff!.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=59</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=59</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;I cancelled my &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BocG1hZy5kZQ==&amp;amp;entry_id=59&quot; title=&quot;http://phpmag.de&quot;  onmouseover=&quot;window.status='http://phpmag.de';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;German PHP-Magazine&lt;/a&gt; subscription last fall. I even got a cancellation confirmation letter on behalf of them on 10/10/2006.&lt;/p&gt;

&lt;p&gt;The funny journey began shortly after. I got each 2007 issue twice, last month an issue of the dot-net magazine and now again the 04.07 issue of the PHP magazine.  The subscription was supposed to end with issue 03.07.&lt;/p&gt;

&lt;p&gt;I already wrote mails to abo-at-phpmagazin.de and info-at-software-support.biz, without response.&lt;/p&gt;

&lt;p&gt;Now I'm sitting here--quite puzzled--with issue 04.07 and am looking forward to my 2007 subscription invoice... hm... now I wonder if it will be for the dot-net or the PHP magazine :-/&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Tue, 22 May 2007 10:42:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/59-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>New development page</title>
    <link>http://blog.iworks.at/?/archives/58-New-development-page.html</link>
<category>WTF</category><category>PHP</category><category>WEB</category>    <comments>http://blog.iworks.at/?/archives/58-New-development-page.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=58</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=58</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;I've finally created the basement for a &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi5pd29ya3MuYXQ=&amp;amp;entry_id=58&quot; title=&quot;http://dev.iworks.at&quot;  onmouseover=&quot;window.status='http://dev.iworks.at';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;development homepage&lt;/a&gt;, where I'll be hosting all my &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi5pd29ya3MuYXQvcHJvamVjdA==&amp;amp;entry_id=58&quot; title=&quot;http://dev.iworks.at/project&quot;  onmouseover=&quot;window.status='http://dev.iworks.at/project';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;projects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2RydXBhbC5vcmc=&amp;amp;entry_id=58&quot; title=&quot;http://drupal.org&quot;  onmouseover=&quot;window.status='http://drupal.org';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Drupal&lt;/a&gt; serves as the CMS, and I'm pondering moving my &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3M5eS5vcmc=&amp;amp;entry_id=58&quot; title=&quot;http://s9y.org&quot;  onmouseover=&quot;window.status='http://s9y.org';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;s9y&lt;/a&gt;--which &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Jsb2cuaXdvcmtzLmF0Lz8vYXJjaGl2ZXMvNTItSkZDLmh0bWw=&amp;amp;entry_id=58&quot; title=&quot;http://blog.iworks.at/?/archives/52-JFC.html&quot;  onmouseover=&quot;window.status='http://blog.iworks.at/?/archives/52-JFC.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;sucks&lt;/a&gt;--blog over &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Rldi5pd29ya3MuYXQvYmxvZy9taWtl&amp;amp;entry_id=58&quot; title=&quot;http://dev.iworks.at/blog/mike&quot;  onmouseover=&quot;window.status='http://dev.iworks.at/blog/mike';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;to this site&lt;/a&gt;. It seems that there'd be everything I needed.&lt;/p&gt;

&lt;p&gt;Let's see if I get the menu for the blog right... &lt;img src=&quot;http://blog.iworks.at/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Sat, 19 May 2007 19:45:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/58-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Phar vs World</title>
    <link>http://blog.iworks.at/?/archives/56-Phar-vs-World.html</link>
<category>WTF</category><category>PHP</category>    <comments>http://blog.iworks.at/?/archives/56-Phar-vs-World.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=56</wfw:comment>
    <slash:comments>7</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=56</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;Recent &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL21hcmMuaW5mby8/dD0xMTc4NTczMTM2MDAwNDcmYW1wO3I9MSZhbXA7dz0y&amp;amp;entry_id=56&quot; title=&quot;http://marc.info/?t=117857313600047&amp;amp;r=1&amp;amp;w=2&quot;  onmouseover=&quot;window.status='http://marc.info/?t=117857313600047&amp;amp;r=1&amp;amp;w=2';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;discussions&lt;/a&gt; about inclusion of &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BoYXI=&amp;amp;entry_id=56&quot; title=&quot;http://pecl.php.net/package/phar&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/phar';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/phar&lt;/a&gt; into the core distribution shows again that we are missing a defined process of handling additions to the PHP main distibution. How many people are really reading through all mails of 100+ message threads?&lt;/p&gt;

&lt;p&gt;It's going to be a chaos. Always. Once a developer has got his new, shiny and soon-to-be-world-dominating extension into the core, he'll be a even stronger advocator of the &amp;quot;no-new-extensions&amp;quot; camp. Not to disrespect any work, but this is pure rivalism, masculine--really!&lt;/p&gt;

&lt;p&gt;The idea of moving extensions from core to pecl is honorous, but we all know the current problems of this ideology.&lt;/p&gt;

&lt;p&gt;Many people have asked me when &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=56&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/http&lt;/a&gt; will be included in the main distribution. My answer is short and simple: &amp;quot;Never&amp;quot; (I usually add a tiny sentence, but that's nothing encouraging either).&lt;/p&gt;

&lt;p&gt;Ah... and please do me a favour: rather keep your comments to yourself &lt;img src=&quot;http://blog.iworks.at/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; (...or toss it into the nonsense thread@internals).&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Wed, 09 May 2007 10:30:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/56-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Upgrading to 5.2</title>
    <link>http://blog.iworks.at/?/archives/53-Upgrading-to-5.2.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/53-Upgrading-to-5.2.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=53</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=53</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;So I finally came around to upgrade to PHP 5.2 (I was running 4.4 on the production server until now). I know, what a shame! &lt;img src=&quot;http://blog.iworks.at/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Anyway the only issue I really had, in spite testing the code really well over time, was with class_exists() and millions of warnings becaus of a missing __autoload(). I blame the people who introduced the second parameter to class_exists() &lt;strong&gt;and&lt;/strong&gt; changing the default behaviour at the very same moment. Actually, it was an annoying but rather easy to fix compatibility brake.&lt;/p&gt;

&lt;p&gt;APC in conjunction with PHP-5.2 seems to work very well either, it even feels a lot less memory exhaustive than running APC+PHP-4.&lt;/p&gt;

&lt;p&gt;Ah yes, just on a side note, I also upgraded to Apache-2.2 in the same run. Somehow I now have a warm and fuzzy feeling running this up-to-date software, it really was already like a brinck in my stomach. Anyway, what's left is to migrate from the Apache module to the FastCGI SAPI and switching to the worker MPM... but I'm done already.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Sun, 01 Apr 2007 12:14:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/53-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>Something I didn't even know I was missing</title>
    <link>http://blog.iworks.at/?/archives/51-Something-I-didnt-even-know-I-was-missing.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/51-Something-I-didnt-even-know-I-was-missing.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=51</wfw:comment>
    <slash:comments>7</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=51</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;$ php --ri extension&lt;/p&gt;

&lt;p&gt;Nice.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Sat, 10 Feb 2007 09:06:00 +0100</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/51-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>HTTP, CURL and stuff</title>
    <link>http://blog.iworks.at/?/archives/50-HTTP,-CURL-and-stuff.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/50-HTTP,-CURL-and-stuff.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=50</wfw:comment>
    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=50</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;News, news, yawn.&lt;/p&gt;

&lt;p&gt;Daniel Stenberg, head of the &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZQ==&amp;amp;entry_id=50&quot; title=&quot;http://curl.haxx.se&quot;  onmouseover=&quot;window.status='http://curl.haxx.se';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;cURL&lt;/a&gt; project, &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3Blcm1hbGluay5nbWFuZS5vcmcvZ21hbmUuY29tcC53ZWIuY3VybC5saWJyYXJ5LzEzNDM5&amp;amp;entry_id=50&quot; title=&quot;http://permalink.gmane.org/gmane.comp.web.curl.library/13439&quot;  onmouseover=&quot;window.status='http://permalink.gmane.org/gmane.comp.web.curl.library/13439';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;accepted&lt;/a&gt; a patch for sub second time out support within libcurl. That means that you can use float values as time outs with a millisecond resolution, as soon as you use libcurl &amp;gt;= v7.16.2, that is, a minimum supported time out of 0.001 seconds (which is &lt;strong&gt;not&lt;/strong&gt; reasonable, just in case you wonder). On a side note, you should build libcurl with &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2RhbmllbC5oYXh4LnNlL3Byb2plY3RzL2MtYXJlcy8=&amp;amp;entry_id=50&quot; title=&quot;http://daniel.haxx.se/projects/c-ares/&quot;  onmouseover=&quot;window.status='http://daniel.haxx.se/projects/c-ares/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;c-ares&lt;/a&gt; to get working sub second DNS lookup time out support, AFAICT.&lt;/p&gt;

&lt;p&gt;Clay Loveless, usually &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2tpbGxlcnNvZnQuY29tL3JhbmRvbXN0cmluZ3Mv&amp;amp;entry_id=50&quot; title=&quot;http://killersoft.com/randomstrings/&quot;  onmouseover=&quot;window.status='http://killersoft.com/randomstrings/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;killing people softly with his random strings&lt;/a&gt;, &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL21hc2hlcnkuY29t&amp;amp;entry_id=50&quot; title=&quot;http://mashery.com&quot;  onmouseover=&quot;window.status='http://mashery.com';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;mashing up APIs&lt;/a&gt; or &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BodHRwLw==&amp;amp;entry_id=50&quot; title=&quot;http://code.google.com/p/phttp/&quot;  onmouseover=&quot;window.status='http://code.google.com/p/phttp/';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;providing compatibility libraries&lt;/a&gt;, kindly asked me, if there were persistent connection support in &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=50&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/http&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Is there an option in pecl_http that I'm overlooking that would be the equivalent of STREAM_CLIENT_PERSISTENT?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was already about to answer that libcurl already does that all for us, realizing that we destroy the used CURL handles at the end of each PHP request at the latest, thus killing any alive connections. This happened about two weeks ago, and pecl/http 1.5, of which RC1 had just been released, will support per process persistent CURL handles. It can be enabled at compile time only, as it's a quite intrusive feature. Yet I'm still unsure about the implementation of this feature and it might change in the future to become a bit more user-friendly.&lt;/p&gt;

&lt;p&gt;To use it, there's nothing else to be done than tossing --enable-http-persistent-handles at configure.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Thu, 08 Feb 2007 15:08:00 +0100</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/50-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>pecl_http response performance</title>
    <link>http://blog.iworks.at/?/archives/49-pecl_http-response-performance.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/49-pecl_http-response-performance.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=49</wfw:comment>
    <slash:comments>2</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=49</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;I made some small tests to get an idea of the current response performance of &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=49&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/http&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Test victim was a &amp;gt;300k PDF file served by Apache 2.0.55 running the worker MPM.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://blog.iworks.at/uploads/data.serendipityThumb.png&quot; alt=&quot;http://blog.iworks.at/uploads/data.serendipityThumb.png&quot; title=&quot;http://blog.iworks.at/uploads/data.serendipityThumb.png&quot; /&gt;&lt;!-- http://blog.iworks.at/uploads/data.serendipityThumb.png --&gt;&lt;br /&gt;
&lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Jsb2cuaXdvcmtzLmF0L3VwbG9hZHMvZGF0YS5wbmc/&amp;amp;entry_id=49&quot; title=&quot;http://blog.iworks.at/uploads/data.png?&quot;  onmouseover=&quot;window.status='http://blog.iworks.at/uploads/data.png?';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;Full size chart&lt;/a&gt;, &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2Jsb2cuaXdvcmtzLmF0L3VwbG9hZHMvZGF0YS5wZGY/&amp;amp;entry_id=49&quot; title=&quot;http://blog.iworks.at/uploads/data.pdf?&quot;  onmouseover=&quot;window.status='http://blog.iworks.at/uploads/data.pdf?';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;PDF with stats&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The legend should be read as follows:&lt;br /&gt;


&lt;table&gt;
    &lt;tr&gt;
        &lt;td&gt;php&lt;/td&gt;
        &lt;td&gt;=&lt;/td&gt;
        &lt;td&gt;request to a PHP script serving the PDF file by HttpResponse&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;php-c&lt;/td&gt;
        &lt;td&gt;=&lt;/td&gt;
        &lt;td&gt;just like above, cached by ETag&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;file&lt;/td&gt;
        &lt;td&gt;=&lt;/td&gt;
        &lt;td&gt;request to the PDF file served directly by Apache&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
        &lt;td&gt;file-c&lt;/td&gt;
        &lt;td&gt;=&lt;/td&gt;
        &lt;td&gt;just like above, cached by ETag&lt;/td&gt;
    &lt;/tr&gt;
&lt;/table&gt;

&lt;/p&gt;

&lt;p&gt;The results surprised me, because it clearly shows that the performance drop for starting the PHP engine and doing the neccessary negotiation to provide caching is not that bad. On the other side, PHPs throughput when actually serving the file is not exciting. The current CVS version of pecl/http contains some tweaks to improve that situation, but it didn't really work out as well as I hoped.&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Wed, 22 Nov 2006 22:04:00 +0100</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/49-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>HttpRequestDataShare</title>
    <link>http://blog.iworks.at/?/archives/48-HttpRequestDataShare.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/48-HttpRequestDataShare.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=48</wfw:comment>
    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=48</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;There are some news to talk about development of &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL3BlY2wucGhwLm5ldC9wYWNrYWdlL3BlY2xfaHR0cA==&amp;amp;entry_id=48&quot; title=&quot;http://pecl.php.net/package/pecl_http&quot;  onmouseover=&quot;window.status='http://pecl.php.net/package/pecl_http';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;pecl/http&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I recently implemented an interface to the &lt;a href=&quot;http://blog.iworks.at/exit.php?url=aHR0cDovL2N1cmwuaGF4eC5zZS9saWJjdXJsL2MvbGliY3VybC1zaGFyZS5odG1s&amp;amp;entry_id=48&quot; title=&quot;http://curl.haxx.se/libcurl/c/libcurl-share.html&quot;  onmouseover=&quot;window.status='http://curl.haxx.se/libcurl/c/libcurl-share.html';return true;&quot; onmouseout=&quot;window.status='';return true;&quot; onclick=&quot;window.open(this.href, '_blank'); return false;&quot;&gt;curl-share&lt;/a&gt; functionality in form of an HttpRequestDataShare class.&lt;/p&gt;

&lt;br /&gt;&lt;a href=&quot;http://blog.iworks.at/?/archives/48-guid.html#extended&quot;&gt;Continue reading &quot;HttpRequestDataShare&quot;&lt;/a&gt;    </content:encoded>
                
    <pubDate>Sat, 16 Sep 2006 14:10:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/48-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
<item>
    <title>__get() and array rumors</title>
    <link>http://blog.iworks.at/?/archives/47-__get-and-array-rumors.html</link>
<category>PHP</category>    <comments>http://blog.iworks.at/?/archives/47-__get-and-array-rumors.html#comments</comments>
    <wfw:comment>http://blog.iworks.at/wfwcomment.php?cid=47</wfw:comment>
    <slash:comments>3</slash:comments>
    <wfw:commentRss>http://blog.iworks.at/rss.php?version=2.0&amp;type=comments&amp;cid=47</wfw:commentRss>
    <author>nospam@example.com (Mike)</author>
    <content:encoded>
&lt;p&gt;There've been lots of rumors about overloaded array properties lately.&lt;/p&gt;

&lt;p&gt;The following code&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;funky &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{
  private &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$p &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= array();
  function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;__get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$p&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {
    return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
  }
}
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$o &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;funky&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$o&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;br /&gt;
will yield:&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;Notice: Indirect modification of overloaded property funky::$p has no effect&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;As arrays are the only complex types that are passed by value (resources don't really count here) the solution to described problem is simple: use an object; either an instance of stdClass or ArrayObject will do well, depending if you want to use array index notation.&lt;/p&gt;

&lt;p&gt;So the folloiwng code will work as expected, because the ArrayObject instance will pe passed by handle:&lt;br /&gt;

&lt;pre&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt;
&lt;span style=&quot;color: #0000BB&quot;&gt;&amp;lt;?php
&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;class &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;smarty &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;{
  private &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$p&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
  function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;__construct&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;() {
    &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;p &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;ArrayObject&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
  }
  function &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;__get&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$p&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;) {
    return &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$this&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
  }
}
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$o &lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;= new &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;smarty&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;$o&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;prop&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;color: #DD0000&quot;&gt;&quot;key&quot;&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;] = &lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #007700&quot;&gt;;
&lt;/span&gt;&lt;span style=&quot;color: #0000BB&quot;&gt;?&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p&gt;I guess most of you already knew, but anyway... &lt;img src=&quot;http://blog.iworks.at/templates/default/img/emoticons/wink.png&quot; alt=&quot;;-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;/p&gt;

    </content:encoded>
                
    <pubDate>Mon, 21 Aug 2006 09:42:00 +0200</pubDate>
    <guid isPermaLink="false">http://blog.iworks.at/?/archives/47-guid.html</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nd/2.5/</creativeCommons:license></item>
</channel>
</rss>
