<?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>BOHUCO &#187; PHP</title>
	<atom:link href="http://bohuco.net/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://bohuco.net/blog</link>
	<description>Die Sollbruchstelle im Internet</description>
	<lastBuildDate>Mon, 06 Sep 2010 07:50:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PHP WebSocket Server &#8211; The Handshake</title>
		<link>http://bohuco.net/blog/2010/07/php-websocket-server-the-handshake/</link>
		<comments>http://bohuco.net/blog/2010/07/php-websocket-server-the-handshake/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 14:10:30 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Websockets]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=1451</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2010/07/php-websocket-server-the-handshake/';
var dzone_title = 'PHP WebSocket Server &#8211; The Handshake';
var dzone_blurb = '';
var dzone_style = '1';




WebSockets are the new cool boys in town, but the specs are in a very early state and so it&#8217;s hard to keep up to date with the different browser implementations &#8230;

Current stable browser-versions, like Chrome 5, only [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2010/07/php-websocket-server-the-handshake/';
var dzone_title = 'PHP WebSocket Server &#8211; The Handshake';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2010%252F07%252Fphp-websocket-server-the-handshake%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9JDmNz%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22PHP%20WebSocket%20Server%20-%20The%20Handshake%22%20%7D);"></div>
<p>WebSockets are the new cool boys in town, but the specs are in a very early state and so it&#8217;s hard to keep up to date with the different browser implementations &#8230;</p>
<p><span id="more-1451"></span></p>
<p>Current stable browser-versions, like Chrome 5, only supports the old specification (<a href="http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75">aka -75</a>), Firefox 3.6 don&#8217;t know the WebSockets object at all. The new Beta-/Dev-versions of Firefox and Chrome now supports the new <a href="http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76">spec-version -76</a>. There is one major change in the new draft, the handshake is much more complicated now &#8230;</p>
<p>The Browsers now sends some security strings and the WebSocket server have to implement a handling for this new headers (Sec-WebSocket-Key1 and Sec-WebSocket-Key2), and must return a security-hash:</p>
<blockquote><p>To prove that the handshake was received, the server has to take three pieces of information and combine them to form a response.  The first two pieces of information come from the |Sec-WebSocket-Key1| and |Sec-WebSocket-Key2| fields in the client handshake &#8230; The third piece of information is given after the fields, in the last eight bytes of the handshake, expressed here as they would be seen if interpreted as ASCII</p></blockquote>
<p>Here is the PHP Method for handling the new security hashes:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> getHandshakeSecurityKey<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$code</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span>
            <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">handleSecurityKey</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
            <span style="color: #990000;">pack</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'N'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">handleSecurityKey</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span>
            <span style="color: #000088;">$code</span><span style="color: #339933;">,</span>
            <span style="color: #009900; font-weight: bold;">true</span>
        <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handleSecurityKey<span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    	<span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/[0-9]/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$number</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	<span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/ /'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$space</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: #000088;">$number</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$space</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    		<span style="color: #b1b100;">return</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;">$number</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$space</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    	<span style="color: #009900;">&#125;</span>
    	<span style="color: #b1b100;">return</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>For the full source code of a PHP5 WebSockets server <a href="http://bohuco.net/dev/websocket/?source=WebSocketServer.php">view the source</a> of my  <a href="http://bohuco.net/dev/websocket/?source=WebSocketServer.php">WebSocketServer.php</a> Class. If you want to see it in action, try my <a href="http://bohuco.net/dev/websocket/">WebSockets example</a> with Firefox 4 Beta or Chrome/Safari 5.</p>
<p>The original code comes from <a href="http://webreflection.blogspot.com/2010/06/websocket-handshake-76-simplified.html">Web Reflection Blog</a> by Andrea Giammarchi.</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2010/07/php-websocket-server-the-handshake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Ranking Checker Class in PHP</title>
		<link>http://bohuco.net/blog/2010/07/google-ranking-checker-class-in-php/</link>
		<comments>http://bohuco.net/blog/2010/07/google-ranking-checker-class-in-php/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 17:51:24 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web Entwicklung]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ranking]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=1455</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2010/07/google-ranking-checker-class-in-php/';
var dzone_title = 'Google Ranking Checker Class in PHP';
var dzone_blurb = '';
var dzone_style = '1';




The only goal for an SEO is a good or very good google ranking. To ensure this you have to monitor your rankings and compare it to the positions of your competitors. With the Google AJAX Search API [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2010/07/google-ranking-checker-class-in-php/';
var dzone_title = 'Google Ranking Checker Class in PHP';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2010%252F07%252Fgoogle-ranking-checker-class-in-php%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Google%20Ranking%20Checker%20Class%20in%20PHP%22%20%7D);"></div>
<p>The only goal for an SEO is a good or very good google ranking. To ensure this you have to monitor your rankings and compare it to the positions of your competitors. With the <a href="http://code.google.com/apis/ajaxsearch/">Google AJAX Search API</a> and my little PHP Class you can easy build a Google Ranking Checker &#8230;</p>
<p>The class needs an Google API key for the AJAX Search API (<a href="http://code.google.com/apis/ajaxsearch/signup.html">get it here</a>) &#8230; it&#8217;s just one field and a click and you can start. You can check multiple keywords for multiple domains or urls, just pass this two arrays to the check() method.</p>
<p><span id="more-1455"></span></p>
<p>Here the complete source code of the Ranking Checker, you can <a href="http://bohuco.net/dev/ranking-check/">test it here</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
 * Google Ranking Checker Class
 * @author DerFichtl AT gmail.com / @DerFichtl on Twitter
 */</span>
<span style="color: #000000; font-weight: bold;">Class</span> RankingChecker <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$googleApiKey</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$googleBaseUrl</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://ajax.googleapis.com/ajax/services/search/web?v=1.0'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$checkPageCount</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * get an api key from: http://code.google.com/apis/ajaxsearch/signup.html
	 * @param string $googleApiKey
	 * @param int $checkPageCount
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$googleApiKey</span><span style="color: #339933;">,</span> <span style="color: #000088;">$checkPageCount</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">googleApiKey</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$googleApiKey</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkPageCount</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$checkPageCount</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #009933; font-style: italic;">/**
	 * get rankings
	 * @example $checker-&gt;check(array('bohuco'), array('bohuco.net'));
	 * @param array $keywords search these keywords
	 * @param array $domains domains to compare against
	 */</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> check<span style="color: #009900;">&#40;</span><span style="color: #000088;">$keywords</span><span style="color: #339933;">,</span> <span style="color: #000088;">$domains</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000088;">$rankings</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>
&nbsp;
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keywords</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Keywords array is no array'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$domains</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> throw <span style="color: #000000; font-weight: bold;">new</span> Exception<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Domains array is no array'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keywords</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$keyword</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000088;">$keyword</span> <span style="color: #339933;">=</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyword</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000088;">$rows</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>
&nbsp;
			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyword</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">&lt;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkPageCount</span><span style="color: #339933;">;</span><span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    		<span style="color: #000088;">$start</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$i</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">8</span><span style="color: #339933;">;</span>
		    		<span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%s&amp;hl=de&amp;gl=AT&amp;q=%s&amp;rsz=8&amp;key=%s&amp;start=%s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">googleBaseUrl</span><span style="color: #339933;">,</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$keyword</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">googleApiKey</span><span style="color: #339933;">,</span> <span style="color: #000088;">$start</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;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    			<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">json_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		    			<span style="color: #000088;">$rows</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_merge</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rows</span><span style="color: #339933;">,</span> <span style="color: #000088;">$result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">responseData</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">results</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		    	    <span style="color: #009900;">&#125;</span>
		    	<span style="color: #009900;">&#125;</span>
&nbsp;
		    	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$domains</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    		<span style="color: #000088;">$rankings</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$keyword</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'-'</span><span style="color: #339933;">;</span>
		    		<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$rows</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$position</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    			<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">url</span><span style="color: #339933;">,</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!==</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		    				<span style="color: #000088;">$rankings</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$keyword</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$position</span><span style="color: #339933;">+</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
		    				<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
		    			<span style="color: #009900;">&#125;</span>
		    		<span style="color: #009900;">&#125;</span>
		    	<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>   	
		<span style="color: #009900;">&#125;</span>	
&nbsp;
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$rankings</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>


]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2010/07/google-ranking-checker-class-in-php/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>HTML5 WebSockets Example</title>
		<link>http://bohuco.net/blog/2010/07/html5-websockets-example/</link>
		<comments>http://bohuco.net/blog/2010/07/html5-websockets-example/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 18:07:59 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Web Entwicklung]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Websockets]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=1445</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2010/07/html5-websockets-example/';
var dzone_title = 'HTML5 WebSockets Example';
var dzone_blurb = '';
var dzone_style = '1';




HTML5 WebSockets makes it possible to open a persistent connection to a server within a web-browser via javascript.


    UPDATE: Mastering the new Spec-76 WebSockets handshake with PHP.

Websockets works already in the latest Webkit-browsers like Safari 5 and Chrome [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2010/07/html5-websockets-example/';
var dzone_title = 'HTML5 WebSockets Example';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2010%252F07%252Fhtml5-websockets-example%252F%22%2C%20%22shorturl%22%3A%20%22http%3A%2F%2Fbit.ly%2F9YNo7l%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22HTML5%20WebSockets%20Example%22%20%7D);"></div>
<p>HTML5 WebSockets makes it possible to open a persistent connection to a server within a web-browser via javascript.</p>
<p><span id="more-1445"></span></p>
<p style="font-weight:bold; border-top:1px dashed black; padding:20px; margin:40px 20px; border-bottom:1px dashed black;">
    UPDATE: Mastering the new <a href="http://bohuco.net/blog/2010/07/html5-websockets-example/">Spec-76 WebSockets handshake with PHP</a>.
</p>
<p>Websockets works already in the latest Webkit-browsers like Safari 5 and Chrome 5. Firefox 4 Beta 1 knows the Websocket-Object but it can&#8217;t open the connection :(</p>
<p>My <a href="http://bohuco.net/dev/websocket/">Websocket test script</a> sends the current mouse position via socket connection to the server and then receives all positions of all current open sockets and prints them to the browser-window. In other words, you can see the mouse cursors of the other users on the page.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> socket<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> host <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;ws://84.38.67.247:8080/dev/websocket/server.php&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		socket <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> WebSocket<span style="color: #009900;">&#40;</span>host<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		socket.<span style="color: #660066;">onopen</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		socket.<span style="color: #660066;">onmessage</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #000066; font-weight: bold;">eval</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'var data = '</span> <span style="color: #339933;">+</span> msg.<span style="color: #660066;">data</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">';'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span>userId <span style="color: #000066; font-weight: bold;">in</span> data<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#91;</span>userId<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">position</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					<span style="color: #003366; font-weight: bold;">var</span> pos <span style="color: #339933;">=</span> data<span style="color: #009900;">&#91;</span>userId<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">position</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">','</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
					<span style="color: #003366; font-weight: bold;">var</span> color <span style="color: #339933;">=</span> data<span style="color: #009900;">&#91;</span>userId<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">color</span><span style="color: #339933;">;</span>
					render<span style="color: #009900;">&#40;</span>userId<span style="color: #339933;">,</span> pos<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> pos<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> color<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			dump<span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		socket.<span style="color: #660066;">onclose</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> console.<span style="color: #660066;">log</span><span style="color: #009900;">&#40;</span>ex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'mousemove'</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>evt<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		send<span style="color: #009900;">&#40;</span>evt.<span style="color: #660066;">clientX</span><span style="color: #339933;">,</span> evt.<span style="color: #660066;">clientY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>u<span style="color: #339933;">,</span> x<span style="color: #339933;">,</span> y<span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#'</span><span style="color: #339933;">+</span>u<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'
&nbsp;
&nbsp;
'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">appendTo</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'body'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#'</span><span style="color: #339933;">+</span>u<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'left'</span><span style="color: #339933;">,</span> x<span style="color: #339933;">+</span><span style="color: #3366CC;">'px'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#'</span><span style="color: #339933;">+</span>u<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'top'</span><span style="color: #339933;">,</span> y<span style="color: #339933;">+</span><span style="color: #3366CC;">'px'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#'</span><span style="color: #339933;">+</span>u<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background'</span><span style="color: #339933;">,</span> c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> send<span style="color: #009900;">&#40;</span>x<span style="color: #339933;">,</span>y<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003366; font-weight: bold;">var</span> msg <span style="color: #339933;">=</span> x <span style="color: #339933;">+</span> <span style="color: #3366CC;">','</span> <span style="color: #339933;">+</span> y<span style="color: #339933;">;</span>
	socket.<span style="color: #660066;">send</span><span style="color: #009900;">&#40;</span>msg<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>On the server side i use a PHP5 script. I have written my own server-class but it&#8217;s based on the work of the <a href="http://code.google.com/p/phpwebsocket/">phpwebsocket</a> project. The server.php instantiate the WebSocketServer object and contains the callback function.</p>
<p><a href="http://bohuco.net/dev/websocket/">http://bohuco.net/dev/websocket/</a></p>
<p>Source Codes:<br />
<a href="http://bohuco.net/dev/websocket/?source=WebSocketServer.php">WebSocketServer.php</a><br />
<a href="http://bohuco.net/dev/websocket/?source=server.php">server.php</a></p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2010/07/html5-websockets-example/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>E-Mail Links wirksam schützen</title>
		<link>http://bohuco.net/blog/2010/02/e-mail-links-schutzen/</link>
		<comments>http://bohuco.net/blog/2010/02/e-mail-links-schutzen/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 22:49:08 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=1348</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2010/02/e-mail-links-schutzen/';
var dzone_title = 'E-Mail Links wirksam schützen';
var dzone_blurb = '';
var dzone_style = '1';




Einige einfache Methoden wie man E-Mail Links schützen kann. Aber die richtig guten Ideen sind dann in einem Kommentar-Link zu finden.

Die schönste Methode ist sicherlich die Adresse von hinten nach vorne schreiben und dann mittels CSS RightToLeft umdrehen lassen. Da [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2010/02/e-mail-links-schutzen/';
var dzone_title = 'E-Mail Links wirksam schützen';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2010%252F02%252Fe-mail-links-schutzen%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22E-Mail%20Links%20wirksam%20sch%C3%BCtzen%22%20%7D);"></div>
<p>Einige einfache Methoden wie man <a href="http://www.web-development-blog.com/archives/e-mail-links-protective-solutions-against-spam/">E-Mail Links schützen</a> kann. Aber die richtig guten Ideen sind dann in einem <a href="http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/">Kommentar-Link</a> zu finden.<br />
<span id="more-1348"></span></p>
<p>Die schönste Methode ist sicherlich die Adresse von hinten nach vorne schreiben und dann mittels CSS RightToLeft umdrehen lassen. Da könnt ich mir aber einen Algorithmus vorstellen der das erkennt.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;style type=&quot;text/css&quot;&gt;
    span.codedirection { unicode-bidi:bidi-override; direction: rtl; }
&lt;/style&gt;</pre></td></tr></table></div>

<p>Besser find ich die Idee mit dem eingeworfenen Hidden-Element. Einfach eine Adresse rauschreiben lassen und irgendwo ein &lt;span&gt; einfügen das mittels CSS ausgeblendet wird.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;style type=”text/css”&gt;
.h { display:none; }
&lt;/style&gt;
&lt;p&gt;derfichtl@&lt;span class=”h”&gt;null&lt;/span&gt;gmail.com&lt;/p&gt;</pre></td></tr></table></div>


]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2010/02/e-mail-links-schutzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Closure Compiler with PHP</title>
		<link>http://bohuco.net/blog/2009/11/google-closure-compiler-with-php/</link>
		<comments>http://bohuco.net/blog/2009/11/google-closure-compiler-with-php/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 00:04:02 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[goolge]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=1166</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2009/11/google-closure-compiler-with-php/';
var dzone_title = 'Google Closure Compiler with PHP';
var dzone_blurb = '';
var dzone_style = '1';




Today Google released their new Closure Compiler, you can use it to optimize and minify your javascripts.

Now i show you how to use the new Google Closure Compiler over the RESTful API with PHP5. First of all, you don&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2009/11/google-closure-compiler-with-php/';
var dzone_title = 'Google Closure Compiler with PHP';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2009%252F11%252Fgoogle-closure-compiler-with-php%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Google%20Closure%20Compiler%20with%20PHP%22%20%7D);"></div>
<p>Today Google released their new <a href="http://code.google.com/closure/compiler/">Closure Compiler</a>, you can use it to optimize and minify your javascripts.</p>
<p><span id="more-1166"></span></p>
<p>Now i show you how to use the new <a href="http://code.google.com/closure/compiler/">Google Closure Compiler</a> over the RESTful API with PHP5. First of all, you don&#8217;t need to install anything, we will connect the free API via <a href="http://www.php.net/manual/en/book.curl.php">cURL</a> usually activated in PHP5.</p>
<p>The API (<a href="http://code.google.com/closure/compiler/docs/api-ref.html">see reference</a>) resides under the following URL and requires four params:</p>
<p>http://closure-compiler.appspot.com/compile</p>
<pre>

<strong>compilation_level</strong>
is one of three options: WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS,
i use simple optimizations, it don't need further config (like advanced) but is
better than whitespace only.

<strong>output_format</strong>
is "text" if you want compile a javascript

<strong>output_info</strong>
is "compiled_code" if you want compile a javascript

<strong>js_code</strong>
is your javascript source code, instead you can submit "code_url" param, an url
to a javascript-file

&nbsp;
</pre>
<p>enough with theory, now the PHP code:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000088;">$script</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.domain.com/scripts/script.js'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://closure-compiler.appspot.com/compile'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POST<span style="color: #339933;">,</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_POSTFIELDS<span style="color: #339933;">,</span> <span style="color: #0000ff;">'output_info=compiled_code&amp;output_format=text&amp;compilation_level=SIMPLE_OPTIMIZATIONS&amp;js_code='</span> <span style="color: #339933;">.</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$script</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$output</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>i use it in a deployer script and replace the content of my script files with the compiled versions. you can <a href="http://bohuco.net/testing/google/closure-compiler.php">tryout the compiler</a> with a simple html-form.</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2009/11/google-closure-compiler-with-php/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 fertig!</title>
		<link>http://bohuco.net/blog/2009/06/php-5-3-fertig/</link>
		<comments>http://bohuco.net/blog/2009/06/php-5-3-fertig/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 19:31:31 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[garbage collector]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=979</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2009/06/php-5-3-fertig/';
var dzone_title = 'PHP 5.3 fertig!';
var dzone_blurb = '';
var dzone_style = '1';




Die neue PHP Version ist nun endgültig fertig und freigegeben. Zu den neuen Funktionen gehören Closures, Funktionsobjekte und Lambda-Funktionen, die native MySQL Library, namespaces und late static binding. Aber für mich am wichtigsten sind die Performance-Verbesserungen, PHP 5.3 wird ca. 1,5x [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2009/06/php-5-3-fertig/';
var dzone_title = 'PHP 5.3 fertig!';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2009%252F06%252Fphp-5-3-fertig%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22PHP%205.3%20fertig%21%22%20%7D);"></div>
<p>Die <a href="http://www.php.net/archive/2009.php#id2009-06-30-1">neue PHP Version</a> ist nun endgültig fertig und freigegeben. Zu den neuen Funktionen gehören Closures, Funktionsobjekte und Lambda-Funktionen, die native MySQL Library, <a href="http://at2.php.net/manual/en/language.namespaces.php">namespaces</a> und <a href="http://at2.php.net/lsb">late static binding</a>. Aber für mich am wichtigsten sind die Performance-Verbesserungen, PHP 5.3 wird ca. 1,5x so schnell sein wie 5.2 und durch den <a href="http://www.heise.de/developer/Was-aendert-sich-mit-PHP-5-3--/artikel/140003/2">neuen Garbage Collector</a> deutlich weniger Speicher verbrauchen.</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2009/06/php-5-3-fertig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Einstieg: Zend_Service_Twitter</title>
		<link>http://bohuco.net/blog/2009/06/einstieg-zend_service_twitter/</link>
		<comments>http://bohuco.net/blog/2009/06/einstieg-zend_service_twitter/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 18:43:27 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=940</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2009/06/einstieg-zend_service_twitter/';
var dzone_title = 'Einstieg: Zend_Service_Twitter';
var dzone_blurb = '';
var dzone_style = '1';




Einen eigenen Twitter-Client schreiben geht mit der richtigen Library ganz schnell. Im aktuellen Zend Framework ist die Komponente Zend_Service_Twitter enthalten die sehr einfach zu verwenden ist.
Zuerst mal anmelden und die Daten des angemeldeten Benutzers ausgeben:

&#160;
require_once 'Zend/Service/Twitter.php';
&#160;
$twitter = new Zend_Service_Twitter&#40;$username, $password&#41;;
if &#40;$user = [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2009/06/einstieg-zend_service_twitter/';
var dzone_title = 'Einstieg: Zend_Service_Twitter';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2009%252F06%252Feinstieg-zend_service_twitter%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Einstieg%3A%20Zend_Service_Twitter%22%20%7D);"></div>
<p>Einen eigenen <a href="http://twitter.com">Twitter</a>-Client schreiben geht mit der richtigen Library ganz schnell. Im aktuellen <a href="http://framework.zend.com">Zend Framework</a> ist die Komponente <a href="http://framework.zend.com/manual/en/zend.service.twitter.html">Zend_Service_Twitter</a> enthalten die sehr einfach zu verwenden ist.</p>
<p>Zuerst mal anmelden und die Daten des angemeldeten Benutzers ausgeben:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'Zend/Service/Twitter.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$twitter</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Zend_Service_Twitter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$username</span><span style="color: #339933;">,</span> <span style="color: #000088;">$password</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: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$twitter</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">account</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">verifyCredentials</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$k</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$v</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$k</span>: <span style="color: #006699; font-weight: bold;">$v</span>&lt;br /&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Die Leute denen man folgt inkl. Bild und Link ausgeben:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$twitter</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">friends</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$user</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;">'&lt;div class=&quot;l&quot;&gt;&lt;a href=&quot;http://twitter.com/%s&quot;&gt;&lt;img width=&quot;48&quot; height=&quot;48&quot; src=&quot;%s&quot; /&gt;&lt;/a&gt;&lt;/div&gt;'</span><span style="color: #339933;">,</span>
		<span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">screen_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">profile_image_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Und so einfach kann man seine eigenen Replies ausgeben lassen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$twitter</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">replies</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;div&gt;&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;a href=&quot;http://twitter.com/%s&quot;&gt;&lt;img width=&quot;48&quot; height=&quot;48&quot; src=&quot;%s&quot; /&gt;&lt;/a&gt;&lt;p&gt;%s %s&lt;/p&gt;'</span><span style="color: #339933;">,</span>
		<span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">screen_name</span><span style="color: #339933;">,</span> <span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">profile_image_url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">text</span><span style="color: #339933;">,</span> <span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">created_at</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/div&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Für so ziemlich alles gibt es bereits die Methoden die man nur mehr aufrufen muss und dann SimpleXML-Objekte zurückbekommt. Ein etwas größeres Beispiel könnt ihr unter folgenden URL finden: <a href="http://bohuco.net/dev/twitter.php">http://bohuco.net/dev/twitter.php</a><br /><strong>Natürlich werden die Twitter-Zugangsdaten nicht mitgespeichert! (<a href="http://bohuco.net/dev/twitter.php?source=1">siehe Quelltext</a>)</strong></p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2009/06/einstieg-zend_service_twitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LOC and Author Stats with Subversion</title>
		<link>http://bohuco.net/blog/2009/01/loc-and-author-stats-with-subversion/</link>
		<comments>http://bohuco.net/blog/2009/01/loc-and-author-stats-with-subversion/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 09:25:58 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[loc]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[stats]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=711</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2009/01/loc-and-author-stats-with-subversion/';
var dzone_title = 'LOC and Author Stats with Subversion';
var dzone_blurb = '';
var dzone_style = '1';




Very, very simple author and LOC statistic with Subversion blame function and PHP. So you can see how many lines are already in the repository and which user coded it.
[sourcecode language="php"]
]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2009/01/loc-and-author-stats-with-subversion/';
var dzone_title = 'LOC and Author Stats with Subversion';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2009%252F01%252Floc-and-author-stats-with-subversion%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22LOC%20and%20Author%20Stats%20with%20Subversion%22%20%7D);"></div>
<p>Very, very simple author and <a href="http://en.wikipedia.org/wiki/Source_lines_of_code">LOC</a> statistic with <a href="http://subversion.tigris.org/">Subversion</a> blame function and PHP. So you can see how many lines are already in the repository and which user coded it.</p>
<p>[sourcecode language="php"]<br />
<?php</p>
<p>// include only this folders<br />
$dirs[] = '/var/www/portal/application';<br />
$dirs[] = '/var/www/portal/html/scripts/k2';<br />
$dirs[] = '/var/www/portal/html/scripts/service';<br />
$dirs[] = '/var/www/portal/html/styles';</p>
<p>// function from php.net<br />
function listFiles( $from = '.') {<br />
    if(! is_dir($from))<br />
        return false;</p>
<p>    $files = array();<br />
    $dirs = array( $from);<br />
    while( NULL !== ($dir = array_pop( $dirs))) {<br />
        if( $dh = opendir($dir)) {<br />
            while( false !== ($file = readdir($dh))) {<br />
                if( $file == '.' || $file == '..')<br />
                    continue;</p>
<p>                $path = $dir . '/' . $file;<br />
                if( ! is_dir($path)) {<br />
					$ext = substr($file, strrpos($file, '.')+1);<br />
					// include file extensions<br />
                	if (in_array($ext, array('html','php','phtml','inc','js','css'))) {<br />
                		$files[] = $path;<br />
                	}<br />
            	} else {<br />
            		// exclude subdirs<br />
            		if (! in_array($file, array('fckeditor'))) {<br />
            			$dirs[] = $path;<br />
            		}<br />
            	}<br />
            }<br />
            closedir($dh);<br />
        }<br />
    }<br />
    return $files;<br />
}</p>
<p>$files = array();<br />
foreach($dirs as $dir) {<br />
	$files = array_merge($files, listFiles($dir));<br />
}<br />
$stats = array();</p>
<p>foreach($files as $file) {<br />
	$tmpFile = '/tmp/blame.tmp';<br />
	exec("svn --non-interactive --username myuser --password mypass blame $file > $tmpFile&#8221;, $o, $r);<br />
	$output = file($tmpFile);</p>
<p>	foreach($output as $line) {<br />
		$parts = split(&#8216;[ ]&#8216;, trim($line));<br />
		$author = $parts[1];<br />
		if (! isset($stats[$author])) {<br />
			$stats[$author] = 0;<br />
		}<br />
		$stats[$author]++;<br />
	}<br />
}</p>
<p>var_dump($stats);<br />
var_dump(count($files));<br />
[/sourcecode]</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2009/01/loc-and-author-stats-with-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.7 released</title>
		<link>http://bohuco.net/blog/2008/11/zend-framework-17-released/</link>
		<comments>http://bohuco.net/blog/2008/11/zend-framework-17-released/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 20:32:30 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=594</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2008/11/zend-framework-17-released/';
var dzone_title = 'Zend Framework 1.7 released';
var dzone_blurb = '';
var dzone_style = '1';




Wohhh &#8230; da geht was weiter &#8230; schon wieder ein neues Release von Zend Framework. Mit Twitter und jQuery Support. Da hab ich schon wieder was zu tun die nächsten Abende.
Außerdem gibt&#8217;s einen neuen Performance-Guide in der Doku.

]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2008/11/zend-framework-17-released/';
var dzone_title = 'Zend Framework 1.7 released';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2008%252F11%252Fzend-framework-17-released%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22Zend%20Framework%201.7%20released%22%20%7D);"></div>
<p>Wohhh &#8230; da geht was weiter &#8230; schon wieder ein neues Release von <a href="http://framework.zend.com/">Zend Framework</a>. Mit <a href="http://framework.zend.com/manual/en/zend.service.twitter.html">Twitter</a> und <a href="http://framework.zend.com/manual/en/zendx.jquery.html">jQuery</a> Support. Da hab ich schon wieder was zu tun die nächsten Abende.</p>
<p>Außerdem gibt&#8217;s einen neuen <a href="http://framework.zend.com/manual/en/performance.html">Performance-Guide</a> in der Doku.</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2008/11/zend-framework-17-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Arrays: &quot;power set&quot; and all permutations</title>
		<link>http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/</link>
		<comments>http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 07:26:38 +0000</pubDate>
		<dc:creator>DerFichtl</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[permutation]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[power set]]></category>

		<guid isPermaLink="false">http://bohuco.net/blog/?p=559</guid>
		<description><![CDATA[

var dzone_url = 'http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/';
var dzone_title = 'PHP Arrays: &#34;power set&#34; and all permutations';
var dzone_blurb = '';
var dzone_style = '1';




Found in the online-version of PHP Cookbook from O&#8217;Reilly.
&#8220;Power set&#8221; = combinations of all or some elements
On one of our development servers (php 5.2.0) we had a problem with the original version of this function, it looked [...]]]></description>
			<content:encoded><![CDATA[<div class="dzone_button" style="float: right; margin-left: 10px;">
<script type="text/javascript">
var dzone_url = 'http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/';
var dzone_title = 'PHP Arrays: &quot;power set&quot; and all permutations';
var dzone_blurb = '';
var dzone_style = '1';
</script>
<script language="javascript" src="http://widgets.dzone.com/links/widgets/zoneit.js"></script>
</div>
<div class="topsy_widget_data topsy_theme_blue" style="float: right;margin-left: 0.75em; background: url(data:,%7B%20%22url%22%3A%20%22http%253A%252F%252Fbohuco.net%252Fblog%252F2008%252F11%252Fphp-arrays-power-set-and-all-permutations%252F%22%2C%20%22style%22%3A%20%22big%22%2C%20%22title%22%3A%20%22PHP%20Arrays%3A%20%26quot%3Bpower%20set%26quot%3B%20and%20all%20permutations%22%20%7D);"></div>
<p>Found in the online-version of <a href="http://oreilly.com/catalog/9781565926813/toc.html">PHP Cookbook from O&#8217;Reilly</a>.</p>
<p><strong>&#8220;Power set&#8221; = combinations of all or some elements</strong></p>
<p>On one of our development servers (php 5.2.0) we had a problem with the original version of this function, it looked like an endless loop till memory limit exceeded. Here is the rewritten version from Srdjan:</p>
<p>[sourcecode language='php']<br />
public function powerSet($array) {<br />
    $results = array(array());<br />
    foreach ($array as $j => $element) {<br />
    	$num = count($results);<br />
    	for($i=0; $i<$num; $i++) {<br />
    		array_push($results, array_merge(array($element), $results[$i]));<br />
    	}<br />
	}<br />
    return $results;<br />
}<br />
[/sourcecode]</p>
<p><strong>All permutations</strong></p>
<p>[sourcecode language='php']<br />
function pc_permute($items, $perms = array( )) {<br />
    if (empty($items)) {<br />
        print join(&#8216; &#8216;, $perms) . &#8220;\n&#8221;;<br />
    }  else {<br />
        for ($i = count($items) &#8211; 1; $i >= 0; &#8211;$i) {<br />
             $newitems = $items;<br />
             $newperms = $perms;<br />
             list($foo) = array_splice($newitems, $i, 1);<br />
             array_unshift($newperms, $foo);<br />
             pc_permute($newitems, $newperms);<br />
         }<br />
    }<br />
}<br />
[/sourcecode]</p>

]]></content:encoded>
			<wfw:commentRss>http://bohuco.net/blog/2008/11/php-arrays-power-set-and-all-permutations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
