<?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>Alexander Zerr &#187; PHP</title>
	<atom:link href="http://www.xelaz.de/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xelaz.de</link>
	<description>Meine Erfahrungen in der Web Entwicklung</description>
	<lastBuildDate>Mon, 26 Sep 2011 18:30:56 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IP Range um die Statistiken nicht zu verfälschen</title>
		<link>http://www.xelaz.de/ip-range-um-die-statistiken-nicht-zu-verfalschen/</link>
		<comments>http://www.xelaz.de/ip-range-um-die-statistiken-nicht-zu-verfalschen/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 16:59:00 +0000</pubDate>
		<dc:creator>Alexander Zerr</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[IP Range]]></category>
		<category><![CDATA[ip2long]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Statistiken]]></category>

		<guid isPermaLink="false">http://www.xelaz.de/?p=280</guid>
		<description><![CDATA[Als ich mein kleines Projekt gestartet habe, baute ich eine Statistik um die User zu zählen. Gezählt wird nach der IP. Mit der Zeit hat sich die Tabelle mit IPs gefühlt und ich stellte fest, dass manche IPs zu oft kamen. Ich hab mir schon gedacht dass es sich um Google &#038; Co und natürlich [...]]]></description>
			<content:encoded><![CDATA[<p>Als ich mein <a href="http://demovator.de/">kleines Projekt</a> gestartet habe, baute ich eine Statistik um die User zu zählen. Gezählt wird nach der IP. Mit der Zeit hat sich die Tabelle mit IPs gefühlt und ich stellte fest, dass manche IPs zu oft kamen. Ich hab mir schon gedacht dass es sich um Google &#038; Co und natürlich auch um Facebook handelt. Als ich mir die IP etwas näher ansah stellte ich fest, dass jede 2 IP Facebook war. Ich beschloss eine Liste zu machen um sie aus den Statistiken zu bannen. Doch immer wieder entdeckte ich neue Facebook und Google IPs. Und mir wurde klar das meine Liste ins unendliche geführt werden müsste. </p>
<p>Jeder großer Anbieter wie Google, Facebook oder Microsoft bekommt eine IP Range, eine Liste von-bis IPs. Diese IP Range kann man bei Whois Services herausfinden. So baute ich eine kleine Schleife die über die IPs geht und prüft bin ich in dem Bereich oder nicht. Mit einer kleinen Funktion <strong>ip2long</strong> kann man eine IP in ein Integer Wert auflösen und mit ihm auch weiter arbeiten. </p>
<p>Hier ist meine mini Lösung:</p>

<div class="wp_syntax"><div class="code"><pre class="php">&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> ipInRange<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ip</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
     <span style="color: #ff0000">$ipRangeList</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span>
        <span style="color: #ff0000;">'google'</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1123631104'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'1123639295'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">// 66.249.64.0 - 66.249.95.255</span>
        <span style="color: #ff0000;">'facebook'</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1121751040'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'1121755135'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">// 66.220.144.0 - 66.220.159.255</span>
        <span style="color: #ff0000;">'facebook1'</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1161801728'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'1161805823'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">// 69.63.176.0 - 69.63.191.255</span>
        <span style="color: #ff0000;">'yahoo'</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1136852992'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'1136918527'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #808080; font-style: italic;">// 67.195.0.0 - 67.195.255.255</span>
        <span style="color: #ff0000;">'microsoft'</span> <span style="color: #66cc66;">=&gt;</span> <span style="color: #000066;">array</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'1093926912'</span><span style="color: #66cc66;">,</span><span style="color: #ff0000;">'1094189055'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #808080; font-style: italic;">// 65.52.0.0 - 65.55.255.255</span>
    <span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #ff0000">$ipNum</span> <span style="color: #66cc66;">=</span> <span style="color: #000066;">ip2long</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ip</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
    <span style="color: #b1b100;">foreach</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ipRangeList</span> <span style="color: #b1b100;">as</span> <span style="color: #ff0000">$node</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ipNum</span>  <span style="color: #66cc66;">&gt;=</span> <span style="color: #ff0000">$node</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#93;</span> <span style="color: #66cc66;">&amp;&amp;</span> <span style="color: #ff0000">$ipNum</span> <span style="color: #66cc66;">&lt;=</span> <span style="color: #ff0000">$node</span><span style="color: #66cc66;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">;</span>
    <span style="color: #66cc66;">&#125;</span>
    <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">;</span>
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$ipInRange</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000">$_SERVER</span><span style="color: #66cc66;">&#91;</span><span style="color: #ff0000;">'REMOTE_ADDR'</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #000066;">echo</span> <span style="color: #ff0000;">'Ich muss nicht in die Statistik rein'</span><span style="color: #66cc66;">;</span></pre></div></div>

<p>Mit dieser Funktion kann ich schon vorab selektieren und meine Statistiken nicht verfälschen. Es gibt noch eine Möglichkeit die IP in die CIDR umzuwandeln, doch die war für mich zu kompliziert um mit ihr weiter zu beschäftigen.<br />
Natürlich kann jeder diese Liste für sich erweitern falls er noch Anbieter findet die in Massen ihn besuchen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xelaz.de/ip-range-um-die-statistiken-nicht-zu-verfalschen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Traffic Analyzer</title>
		<link>http://www.xelaz.de/traffic-analyzer/</link>
		<comments>http://www.xelaz.de/traffic-analyzer/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 18:38:39 +0000</pubDate>
		<dc:creator>Alexander Zerr</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Analyzer]]></category>
		<category><![CDATA[Apache Logs]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Traffic]]></category>

		<guid isPermaLink="false">http://www.xelaz.de/?p=48</guid>
		<description><![CDATA[Da ich keinen Webalizer oder AWstats benutze, kann ich auch nicht den Traffic sehen den meine Seite verursacht. Das wollte ich aber vor kurzem sehen und bin auf die Suche gegangen so einen Analyzer zu finden. Da meine Wünsche sehr einfach sind, wollte ich einen Analyzer finden der ohne Datenbank, ohne Perl und nur mit [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich keinen Webalizer oder AWstats benutze, kann ich auch nicht den Traffic sehen den meine Seite verursacht. Das wollte ich aber vor kurzem sehen und bin auf die Suche gegangen so einen Analyzer zu finden. Da meine Wünsche sehr einfach sind, wollte ich einen Analyzer finden der ohne Datenbank, ohne Perl und nur mit PHP auskommt. Ich hab eine Stunde lang verbracht so einen Tool zu finden und ich hab ihn nicht gefunden. Es kamen Hunderte von Skripten die nicht das waren was ich brauche. Viele waren Kostenpflichtig, manche waren schon nicht mehr da, die anderen waren so Aufgebläht mit Features die ich nicht brauche, da heutzutage Google Analytics oder phpMyVisites gib die voll ausreichen die Statistiken der User zu analysieren. Da diese Tools nichts mit den den Logfiles von Apache anfangen können, musste ein Tool her. Leider hab ich keinen gefunden und so hab ich meinen eigenen geschrieben.<br />
So entstand ein Script den ich in Salta (Simple Apache Log &#8211; Traffic Analyzer) getauft habe.<br />
Er macht nichts anderes als die gewünschte Log auszulesen und den Traffic zu zeigen der dort geloggt wurde, genau das was ich brauche. Ich hab ihn mit Password versehen und da meine Logs alle in einem Ordner liegen kann ich alle per Select Box auswählen.<br />
Das einzige was eingestellt werden kann, ist der Ordner zu den Logs, der User Name und das Passwort. die Variablen kann man oben im Script finden. </p>
<p>Und hier ist der <a href='http://www.xelaz.de/wp-content/uploads/2008/11/salta.zip'>Salta Script</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xelaz.de/traffic-analyzer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP vs PHP Benchmark Tests</title>
		<link>http://www.xelaz.de/php-vs-php-benchmark-tests/</link>
		<comments>http://www.xelaz.de/php-vs-php-benchmark-tests/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 20:34:45 +0000</pubDate>
		<dc:creator>Alexander Zerr</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Benchmarks]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.xelaz.de/?p=43</guid>
		<description><![CDATA[Man fragt sich immer wen man den Code schreibt der schnell sein soll wie und welche Methode man gut kombiniert. Um es raus zu finden muss man jedesmal ein Test machen. Hier ist eine Benchmark Sammlung nur mit solchen Tests welche Lösung schneller ist wie z.B: (string) vs. concat, class vs. arrays, preg_replace() vs. str_replace() [...]]]></description>
			<content:encoded><![CDATA[<p>Man fragt sich immer wen man den Code schreibt der schnell sein soll wie und welche Methode man gut kombiniert. Um es raus zu finden muss man jedesmal ein Test machen. Hier ist eine <a href="http://net-beta.net/ubench/" target="_blank"><strong>Benchmark Sammlung</strong></a> nur mit solchen Tests welche Lösung schneller ist wie z.B: (string) vs. concat, class vs. arrays, preg_replace() vs. str_replace() und foreach vs. while.<br />
Leider hab bei einigen Enttäuschungen erlebt, tja man lernt immer was dazu.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xelaz.de/php-vs-php-benchmark-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework Blog</title>
		<link>http://www.xelaz.de/zend-framework-blog/</link>
		<comments>http://www.xelaz.de/zend-framework-blog/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 10:51:21 +0000</pubDate>
		<dc:creator>Alexander Zerr</dc:creator>
				<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.xelaz.de/?p=31</guid>
		<description><![CDATA[Vor ein paar Tagen bin ich in ein Team eingestiegen, welches über Zend Framework bloggt.
Die Seite www.zf-blog.de hat mir schon von ersten mal gefallen. Aber das ich dort bloggen werde kam mir nie in den Kopf.
Ab jetzt aber werde ich auch dort meine Erfahrungen mit anderen Zend Framework Entwicklern bloggen, also es wird sich lohnen [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Tagen bin ich in ein Team eingestiegen, welches über Zend Framework bloggt.<br />
Die Seite <a href="http://www.zf-blog.de" target="_blank"><strong>www.zf-blog.de</strong></a> hat mir schon von ersten mal gefallen. Aber das ich dort bloggen werde kam mir nie in den Kopf.<br />
Ab jetzt aber werde ich auch dort meine Erfahrungen mit anderen Zend Framework Entwicklern bloggen, also es wird sich lohnen dort mal ab und zu vorbeizuschauen. Den die Themen werden rund um das Zend Framework sein. Viel Spaß beim reinschauen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xelaz.de/zend-framework-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress Widget Random Pages</title>
		<link>http://www.xelaz.de/wordpress-widget-random-pages/</link>
		<comments>http://www.xelaz.de/wordpress-widget-random-pages/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 21:13:09 +0000</pubDate>
		<dc:creator>Alexander Zerr</dc:creator>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Widget]]></category>

		<guid isPermaLink="false">http://www.xelaz.de/?p=22</guid>
		<description><![CDATA[Mich hat mal eine Frage interessiert, Wie schwer ist es ein Widget für Wordpress zu schreiben? Nach 2 Stunden hab ich meinen ersten Widget geschrieben.
Random Pages 1.0

Es generiert eine Liste in der Sidebar mit Zufälligen Einträgen. Dabei hab ich überlegt, was passiert mit den Einträgen die schon alt und auf der 1x Seite liegen. Und [...]]]></description>
			<content:encoded><![CDATA[<p>Mich hat mal eine Frage interessiert, Wie schwer ist es ein Widget für Wordpress zu schreiben? Nach 2 Stunden hab ich meinen ersten Widget geschrieben.</p>
<p><strong><a href="http://www.xelaz.de/wp-content/uploads/2008/04/random_pages.zip">Random Pages 1.0<br />
</a></strong></p>
<p>Es generiert eine Liste in der Sidebar mit Zufälligen Einträgen. Dabei hab ich überlegt, was passiert mit den Einträgen die schon alt und auf der 1x Seite liegen. Und so hab ich eine Karussell von zufälligen Einträgen erschaffen.</p>
<p>Das Widget ist sehr einfach aufgebaut wie die API von Wordpress, um weitere Widgets zu erstellen wird dieses mir als guten Einstieg dienen.</p>
<p>Ich weis nicht sich das Widget bei Wordpress 2.3 verhält. Wenn es aber Fehler verursacht sagt mir bescheidt und versuche sie zu Fixen oder gebt es Feature Wünsche, dann einfach schreiben.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xelaz.de/wordpress-widget-random-pages/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

