<?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>PHPUGFFM &#187; PHP</title>
	<atom:link href="http://phpugffm.de/index.php/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://phpugffm.de</link>
	<description>one programming language :: one community</description>
	<lastBuildDate>Thu, 01 Jul 2010 09:40:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>phpbbq2010</title>
		<link>http://phpugffm.de/index.php/phpbbq2010,2010-06,497.html</link>
		<comments>http://phpugffm.de/index.php/phpbbq2010,2010-06,497.html#comments</comments>
		<pubDate>Mon, 07 Jun 2010 07:08:33 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Veranstaltungen]]></category>
		<category><![CDATA[PHPBBQ]]></category>
		<category><![CDATA[PHPBBQ2010]]></category>

		<guid isPermaLink="false">http://phpugffm.de/?p=497</guid>
		<description><![CDATA[
Das PHP BBQ 2010 in Frankfurt am Main steht: Sonntag den 27. Juni ab 13:00 Uhr im Licht- und Luftbad am Niederräder Ufer. Die Teilnehmerzahl ist begrenzt, mehr Infos in der Mailingliste.
]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-501" title="PHP BBQ 2010 FFM" src="http://farm2.static.flickr.com/1058/4724361924_44d1697703_b.jpg" alt="PHP BBQ 2010 FFM" width="436" height="311" /></p>
<p>Das PHP BBQ 2010 in Frankfurt am Main steht: Sonntag den 27. Juni ab 13:00 Uhr im Licht- und Luftbad am Niederräder Ufer. Die Teilnehmerzahl ist begrenzt, <a href="http://groups.google.com/group/phpugffm/msg/abc2ef9533b9357f">mehr Infos in der Mailingliste</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/phpbbq2010,2010-06,497.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Call of Papers und Projects für FrOSCon 2010</title>
		<link>http://phpugffm.de/index.php/call-of-papers-und-projects-fur-froscon-2010,2010-04,461.html</link>
		<comments>http://phpugffm.de/index.php/call-of-papers-und-projects-fur-froscon-2010,2010-04,461.html#comments</comments>
		<pubDate>Sat, 24 Apr 2010 09:53:36 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Veranstaltungen]]></category>
		<category><![CDATA[Froscon]]></category>
		<category><![CDATA[PHP @ Froscon]]></category>

		<guid isPermaLink="false">http://phpugffm.de/?p=461</guid>
		<description><![CDATA[Für die am 21. und 22. August 2010 stattfindende, fünfte Free and Open Source Software Conference (FrOSCon) in St. Augustin bei Bonn sind auch in diesem Jahr wieder interessierte Einzelpersonen und Projekte aufgerufen, ihr Beiträge einzusenden um zum Vortragsprogramm beizutragen.
Außerdem bietet die FrOSCon Projekten rund um Freie Software die Gelegenheit, sich mit einem eigenen Stand [...]]]></description>
			<content:encoded><![CDATA[<p>Für die am 21. und 22. August 2010 stattfindende, fünfte Free and Open Source Software Conference (FrOSCon) in St. Augustin bei Bonn sind auch in diesem Jahr wieder interessierte Einzelpersonen und Projekte aufgerufen, ihr Beiträge einzusenden um zum Vortragsprogramm beizutragen.</p>
<p>Außerdem bietet die FrOSCon Projekten rund um Freie Software die Gelegenheit, sich mit einem eigenen Stand zu präsentieren, oder einen eigenen Raum zu gestalten. Denkbar sind hier Entwicklertreffen genauso wie eigene Vortragsreihen oder Workshops.</p>
<h2>PHP @ FrOSCon 2010</h2>
<p>Auch in diesem Jahr veranstaltet die <a href="http://phpugdo.de/">PHP Usergroup Dortmund</a> einen vollständigen Track unter dem Motto <a href="http://froscon.phpugdo.de/">PHP @ FrOSCon</a>. Für diesen Track läuft ein <a href="http://froscon.phpugdo.de/call_for_papers.html" title="PHP @ FrOSCon 2010 Call Of Papers">eigener Call For Papers</a> bis zum 23.05.2010.</p>
<p>Daneben wird es einen &#8220;PHP-Room&#8221; geben, das die ganze Zeit geöffnet ist für Hacks, Diskussionen und  eine Pläuschchen. Andere Usergruppen aus Hamburg, Köln/Bonn und Bielefeld werden ebenfalls anwesend sein.</p>
<p>Alle Infos zur PHP @ FrOSCon 2010 gibt es auf der Website: <a href="http://froscon.phpugdo.de/.html">http://froscon.phpugdo.de/.html</a>.</p>
<h2>FrOSCon Call of Papers und Projects</h2>
<p>Ebenfalls für &#8220;nicht PHP-Vorträge&#8221; wurde eine Website eingerichtet: <a href="http://cfp.froscon.de">http://cfp.froscon.de</a> . Interessierte Projekte können sich ab sofort unter <a href="https://callforprojects.froscon.org/">https://callforprojects.froscon.org/</a> für einen Stand oder einen Raum bewerben.</p>
<p>Ich kann die Konferenz nur empfehlen, auch für Projekte und Gruppen bietet dies eine sehr gute Gelegenheit mit Usern und potentiellen Entwicklern zusammen zu treffen.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/call-of-papers-und-projects-fur-froscon-2010,2010-04,461.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPUnconference Mallorca Q4 2010</title>
		<link>http://phpugffm.de/index.php/phpunconference-mallorca-q4-2010,2010-04,434.html</link>
		<comments>http://phpugffm.de/index.php/phpunconference-mallorca-q4-2010,2010-04,434.html#comments</comments>
		<pubDate>Sat, 10 Apr 2010 07:10:55 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekte]]></category>

		<guid isPermaLink="false">http://phpugffm.de/?p=434</guid>
		<description><![CDATA[
Eine europäische/internationale PHP Unconference ist für ein Wochende im 4. Quartal 2010 geplant. Ort der Austragung sollte (ursprünglich, s.u.) auf Mallorca sein. Dort kann es ja auch ganz schön im Winter sein. Chillout in der heissen Abendluft ist dann aber eher nicht angesagt, also wird die Warmup-Party am Freitag Abend warscheinlich nicht auf einem Boots-Deck [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.phpuceu.org/"><img src="http://phpugffm.de/wp-content/uploads/2010/04/phpuceu2010.png" alt="phpuceu2010" title="phpuceu2010 - europäische / internationale PHP Unconference 2010" width="436" height="100" class="aligncenter size-full wp-image-435" /></a></p>
<p>Eine europäische/internationale PHP Unconference ist <a href="http://www.phpuceu.org/">für ein Wochende im 4. Quartal 2010</a> geplant. Ort der Austragung sollte (ursprünglich, s.u.) auf Mallorca sein. Dort kann es ja auch ganz schön im Winter sein. Chillout in der heissen Abendluft ist dann aber eher nicht angesagt, also wird die Warmup-Party am Freitag Abend warscheinlich nicht auf einem Boots-Deck stattfinden.</p>
<p>Judith Andresen und Markus Wolff, beide erfahrene Leute von der PHPUnconference in Hamburg, organisieren das Event. <a href="http://it-republik.de/php/artikel/Interessant-wird-es-wenn-Speaker-ihre-Vortraege-spontan-zusammenlegen.-2938.html">In einem Interview</a> von <a href="http://www.phphatesme.com/blog/author/nils/">Nils Langner</a> vom <a href="http://www.phphatesme.com/">Blog PHP Hate Me</a> für das <a href="http://it-republik.de/php/">PHP Magazin</a> sprechen sie über ihre Pläne die sich im Anschluss der Konferenz in 2009 geformt haben.</p>
<p>Es werden voraussichtlich 200 TeilnehmerInnen erwartet, ein Ort wird noch gesucht. Mehr Informationen gibt es auf <a href="http://www.phpuceu.org/blog-1/" title="PHP Unconference 2010 Blog">dem Blog</a> und in <a href="http://twitter.com/phpuceu">Judith Andresen&#8217;s phpeuc Twitter Feed</a>. Der Zeitpunkt wurde gewählt, um nicht zur Haupsaison auf die Insel &#8220;zu müssen&#8221; (Übernachtung sollte nicht zu teuer sein), der Ort weil es von überall aus Europa recht günstig ist, dort hinzugelangen. Auch soll der Sonntag so eingerichtet sein, Rückflüge am gleichen Tag nehmen zu können, falls man es sich nicht anders legen konnte.</p>
<p>Die bei der <a href="http://wiki.php-unconference.de/wiki//index.php?title=PhpUnconf2009Index">Adhoc-Konferenz in Hamburg letztes Jahr</a> dabei waren wissen allerdings, dass internationale Besucher bisher zwar gewünscht aber rar gesät waren. In diesem Licht kann die Konferenz also auch als Versuch gewertet werden, das endlich mal zu ändern <img src='http://phpugffm.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Gut so!</p>
<p>Die Organisatorin <a href="http://www.phpuceu.org/2010/04/07/one-step-nearer-to-the-unconference/">bittet nun um Unterstützung bei der Suche nach einem geeigneten Ort</a> für die erste europäischen PHP Unconferenz.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/phpunconference-mallorca-q4-2010,2010-04,434.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Anmeldung für PHP Unconference 2010 in Hamburg eröffnet</title>
		<link>http://phpugffm.de/index.php/anmeldung-fur-php-unconference-in-hamburg-eroffnet,2010-04,423.html</link>
		<comments>http://phpugffm.de/index.php/anmeldung-fur-php-unconference-in-hamburg-eroffnet,2010-04,423.html#comments</comments>
		<pubDate>Sat, 03 Apr 2010 10:17:53 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Veranstaltungen]]></category>

		<guid isPermaLink="false">http://phpugffm.de/?p=423</guid>
		<description><![CDATA[
Seit 31. März ist der Ticketverkauf für die diesjährige PHP Unconference Hamburg ausgerufen worden. Ich kann die Veranstaltung nur wärmstens empfehlen. Mehr Infos gibts auf dem Blog zur Unconference. Achso: die Tickets sind immer ziemlich schnell weg.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.php-unconference.de/"><img src="http://phpugffm.de/wp-content/uploads/2010/04/phpuchh2010.png" alt="phpuchh2010 - PHP Unconference 2010 Hamburg" title="phpuchh2010 - PHP Unconference 2010 Hamburg" width="424" height="99" class="aligncenter size-full wp-image-431" /></a></p>
<p>Seit 31. März ist der <a href="http://www.php-unconference.de/2010/03/31/ticketverkauf-eröffnet/">Ticketverkauf für die diesjährige PHP Unconference Hamburg</a> ausgerufen worden. Ich kann die Veranstaltung nur wärmstens empfehlen. Mehr <a href="http://www.php-unconference.de/">Infos gibts auf dem Blog zur Unconference</a>. Achso: die Tickets sind immer ziemlich schnell weg.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/anmeldung-fur-php-unconference-in-hamburg-eroffnet,2010-04,423.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>365 Tage Bloggen: PHP hates me einfach immer noch!</title>
		<link>http://phpugffm.de/index.php/365-tage-bloggen-php-hates-me-einfach-immer-noch,2009-08,401.html</link>
		<comments>http://phpugffm.de/index.php/365-tage-bloggen-php-hates-me-einfach-immer-noch,2009-08,401.html#comments</comments>
		<pubDate>Mon, 03 Aug 2009 08:04:37 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekte]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/365-tage-bloggen-php-hates-me-einfach-immer-noch,2009-08,401.html</guid>
		<description><![CDATA[Auf Schlag den heutigen Tag wird der beliebte deutschsprachige Blog PHP hates me (twitter @phphatesme) ein Jahr alt. Mit einer Sammlung von nun 320 Artikeln und etwa 2000 Kommentaren zur Entwicklung von und mit PHP, Projektmanagement und Softwaretechnik weist die Webseite mitlerweile eine beachtliche Menge an Inhalten auf. Die Interview Kolumne von Nils Langner wird [...]]]></description>
			<content:encoded><![CDATA[<p>Auf Schlag den heutigen Tag wird der beliebte deutschsprachige Blog <em><a href="http://www.phphatesme.com/">PHP hates me</a></em> (twitter <em>@phphatesme</em>) ein Jahr alt. Mit einer Sammlung von nun 320 Artikeln und etwa 2000 Kommentaren zur Entwicklung von und mit PHP, Projektmanagement und Softwaretechnik weist die Webseite mitlerweile eine beachtliche Menge an Inhalten auf. Die <a href="http://www.phphatesme.com/archives/category/interviews/">Interview Kolumne von Nils Langner</a> wird mitlerweile nicht nur im Blog sondern auch in Papierform im <a href="http://it-republik.de/php/" title="Homepage des PHPmagazin, vormals auf http://www.phpmagazin.de/ zu finden.">PHPMagazin</a> veröffentlicht.</p>
<p>Zur Feier das Tages startet um 10 Uhr ein Gewinnspiel. Also jetzt. </p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/365-tage-bloggen-php-hates-me-einfach-immer-noch,2009-08,401.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nachtrag zu Onlinebanking mit PHP</title>
		<link>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html</link>
		<comments>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html#comments</comments>
		<pubDate>Mon, 06 Jul 2009 13:08:12 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[hibiscus]]></category>
		<category><![CDATA[onlinebanking]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html</guid>
		<description><![CDATA[Vor über zwei Jahren hatte ich mit dem Beitrag Onlinebanking mit PHP der über einen Vortrag bei der Usergroup berichtet auch Beispielquellcode mit veröffentlicht.
In diesem Code wird auf die Onlinebanking Software Hibiscus mittels der dortigen XML-RPC Schnittstelle zugegriffen. Dafür wird die Bibliothek XML-RPC for PHP verwendet. Natürlich ist der Quellcode mitlerweile veraltet. Auch ist er [...]]]></description>
			<content:encoded><![CDATA[<p>Vor über zwei Jahren hatte ich mit dem Beitrag <a href="http://phpugffm.de/index.php/onlinebanking-mit-php,2007-03,143.html">Onlinebanking mit PHP</a> der über einen Vortrag bei der Usergroup berichtet auch Beispielquellcode mit veröffentlicht.</p>
<p>In diesem Code wird auf die <a href="http://www.willuhn.de/products/hibiscus/">Onlinebanking Software Hibiscus</a> mittels der dortigen XML-RPC Schnittstelle zugegriffen. Dafür wird die <a href="http://phpxmlrpc.sourceforge.net/">Bibliothek XML-RPC for PHP</a> verwendet. Natürlich ist der Quellcode mitlerweile veraltet. Auch ist er nicht mit der aktuellen Hibiscus Version getestet. Und die Bibliothek ist sicherlich auch weiter gepflegt worden. Und so kann es passieren, dass beim Beispielcode Fehler beim Anlegen von Überweisungen auftreten. Doch wie damit umgehen?<span id="more-399"></span></p>
<p>Dies hat wohl dazu geführt das viele Leute die hier den Beitrag gelesen haben und sich den Quellcode gezogen haben sich nicht an mich direkt als Autor sondern an den Autor von Hibiscus gewandt. Auch in den Kommentaren ist nicht viel zu finden. So habe ich erst seit einigen Tagen die Gelegenheit mich mit dem Problem zu beschäftigen. </p>
<p>Leider muss ich anfügen. Nun kann wohl Hibiscus selber am wenigsten was dafür, wenn die in PHP eingesetzte XML-RPC Bibliothek einen Fehler hat. Sie kann wohl offensichtlich nicht mit Namespaces umgehen, die RPC-Response enthält aber solche. Das zeigt die Antwort auch an, es handelt sich um <a href="http://ws.apache.org/xmlrpc/">die XML-RPC implementierung von Apache</a>. Es kann also zu einem Fehler kommen. Und dafür ist der Autor von Hibiscus nicht der naheliegenste Ansprechpartner. Wenn man Beispielcode nimmt, dann sollte man diesen als praktische Gelegenheit begreifen, ihn zu lesen und zu verstehen. Dazu gehört auch der Umgang mit Fehlern darin. Eigentlich sogar ein willkommener Anlass solch ein Fehler, stellt er doch quasi eine Prüfung dar, ob man verstanden hat wie es funktioniert, wenn man den Fehler löst. Ein einfaches <em>Copy and Paste</em> gibt einem diese Sicherheit nicht, sondern lässt einen in dem trügerischen Gefühl, ein schnelles Ergebnis erzielt zu haben. Dabei entzieht sich dieses Ergebnis der vollen eigenen Kontrolle.</p>
<p>Aber was tun? Da es sich bei allen Komponenten um quelloffene, Freie Software handelt drängen sich zwei Lösungen auf: Eine konkrete, der Fix oder Workaround, und eine strategischere, das Feature. Der Produzent sollte natürlich auch eingebunden sein, allerdings rate ich sehr dazu, Entwickler in freien Projekten nicht mit unausgegorenen Emails zu belästigen. Das stellt man am besten dadurch sicher, erstmal selber zu schauen, was der Auslöser des Fehlers ist. Vielleicht liegt der ja auch bei einem selber. Und was auch nervig ist: Wenn ein Benutzer einfach mal eine Mail an alle Adressen schickt die er hier oder da findet und meint: das könnte schon passen, was kümmerts mich, wenn ich andere für mich denken lassen kann.</p>
<h2>Eine Entwicklerin, die auf einen Fehler stösst, fängt automatisch an, ihn zu analysieren.</h2>
<p>Eine Entwicklerin, die auf einen Fehler stösst, fängt automatisch an, ihn zu analysieren. Ist die Fehlerursache bekannt, so kann sie gefixt werden. Dazu muss man meist sogar nur wenig Ahnung haben, was ein Programm da gerade macht. Ein komplettes Verständnis aller Komponenten und Hintergründe ist sicherlich hilfreich aber nicht zwingend. Heraus kommt dann ein Workaround evtl. wie dieser hier:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> checkResponse<span class="br0">&#40;</span><span class="re0">$response</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$response</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a><span class="br0">&#40;</span><span class="st0">&quot;No response given<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$response</span>-&gt;<span class="me1">faultCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$response</span>-&gt;<span class="me1">value</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re0">$fstr</span>=<span class="re0">$response</span>-&gt;<span class="me1">faultString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/strstr"><span class="kw3">strstr</span></a><span class="br0">&#40;</span><span class="re0">$fstr</span>, <span class="st0">&#8216;EX:NIL&#8217;</span><span class="br0">&#41;</span> != <span class="kw2">false</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a><span class="br0">&#40;</span><span class="st0">&quot;Error. Code: &quot;</span>.<span class="re0">$response</span>-&gt;<span class="me1">faultCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span>.<span class="re0">$response</span>-&gt;<span class="me1">faultString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Im Hauptcode steht dann:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span> = <span class="re0">$response</span>-&gt;<span class="me1">value</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$value</span> != <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$return</span> = <span class="re0">$value</span>-&gt;<span class="me1">scalarval</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$return</span>=<span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$return</span><span class="br0">&#41;</span> == <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8216;&lt;p&gt;&amp;Uuml;berweisung wurde angelegt.&lt;/p&gt;&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Das wäre also ein Fix oder Workaround. Wie alles sind natürlich auch Fehler relativ. Konkret ist mit einem Workaround also geholfen. Und zwar schnell und einfach. Steht es hingegen an, sich um den Kern des Problems zu kümmern, so ist ein wenig mehr Arbeit und Genauigkeit von Nöten. Hier ist der Fix aber nicht umsonst, hat er doch geholfen, den Fehler einzugrenzen und die Funktionsfähigkeit wieder herzustellen.</p>
<p>So stellt sich erstmal die Frage warum <em>genau</em> der Fehler zu Tage tritt und warum der Fix nun funktioniert. Die Eingrenzung des Fehlers auf seine ausschlaggebende Ursache. Bei diesem Beispiel ist es relativ einfach mit der Fehlerursache. Auch das Protokoll von XML-RPC ist relativ offen, den es basiert auf (recht einfachen) XML Dokumenten, die per HTTP ausgetauscht werden. So ist zum debuggen mittels PHP das XML der Antwort einsehbar indem der String ausgegeben wird:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;methodResponse</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">xmlns:ex</span>=<span class="st0">&quot;http://ws.apache.org/xmlrpc/namespaces/extensions&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;params<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="sc3"><span class="re1">&lt;param<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;value<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ex:nil</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/value<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/param<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="sc3"><span class="re1">&lt;/params<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/methodResponse<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Der Fehler tritt hier auf, weil die PHP XML-RPC Bibliothek nichts mit dem Rückgabewert &#8220;&lt;ex:nil/&gt;&#8221; anfangen kann. Nun stellt sich die Frage, wie damit umgehen? Wo genau liegt der Fehler, in der PHP-Bibliothek oder in der Implementierung in der Java-Bibliothek von Apache? Wenns um Bibliotheken geht ist das oft ein Zeichen dafür, dass es sich hier um eine grundlegendere Frage handelt. Und das eine Lösung aufwendiger und auch problematischer sein kann. Dies aus zwei Gründen:</p>
<p>Zum einen werden Bibliotheken von vielen Programiererinnen und Anwendern in unterschiedlichen Anwendungen genutzt dessen allen Bedürfnisse eine Bibliothek unter einen Hut bekommen muss. Eine &#8220;Fehlerbehebung&#8221; die zu nicht erwartenen Ergebnissen führt kann zum Beispiel bestehende Anwendungen gefährden.</p>
<p>Zum anderen, weil wenn ein Fehler gefunden wird, ein Fehlerbericht an das Projekt der Bibliothek gemacht werden sollte. Dazu muss erstmal rausgefunden werden, wie dies gemacht wird und es ist oft nicht klar, wie schnell ein Fehler im Projekt behoben wird, nachdem er gemeldet wird.</p>
<h2>Mein Code, Dein Code, unser Code.</h2>
<p>In der Programmierung spricht man hier oft vom &#8220;Upstream&#8221;. Ich erstelle für die lokale Kopie meiner Bibliothek einen Patch, der das gewünschte Feature implementiert. Das Feature für die PHP-Bibliothek ausführlich formuliert wäre hier: <em>Die Unterstützung des ex:nil Rückgabewertes zwecks Kompabilität zur Apache XML-RPC Implementierung</em>. </p>
<p>Läuft der Patch bei mir und bin ich sicher, dass das auch für andere AnwenderInnen der Bibliothek Sinn macht, <em>upstreame</em> ich den Patch, in dem ich den dem Bibliotheksprojekt zur Verfügung stelle. Meist wird darüber diskutiert was für und was gegen den Patch spricht und der Patch entsprechend modifziert resp. erweitert. Wird der Patch akzeptiert, landet er meist im nächsten Release des Projektes.</p>
<h3>Keep Up the Upstream.</h3>
<p>Damit ist dann allen geholfen. Übrigens sind viele Entwicklerinnen dann für Feedback dankbar, wenn es um eine reale Fehlerlösung geht. So hat der Entwickler im Hibiscus Projekt sicherlich kein Interesse daran, PHP-Programmierern bei der Fehlersuche zu helfen, selbst wenn er ein ganz lieber ist und es mit den Anfragen auch generell recht freundlich hält. Hätte die Schnittstelle auf seiner Seite einen Fehler würden sich warscheinlich schon recht viele Leute beschwert haben&#8230; . Das <em>XML-RPC for PHP</em> Projekt hingegen hat aber vielleicht ein echtes Interesse daran, die Bibliothek kompatibel mit der Apache Implementierung zu halten. Jeder Fehler ist eine Chance ein Programm zu verbessern. Keep Up the Upstream.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP BBQ Tour Dienstag,   16.06    &#8211; Frankfurt?</title>
		<link>http://phpugffm.de/index.php/php-bbq-tour-dienstag-1606-frankfurt,2009-05,394.html</link>
		<comments>http://phpugffm.de/index.php/php-bbq-tour-dienstag-1606-frankfurt,2009-05,394.html#comments</comments>
		<pubDate>Thu, 14 May 2009 08:31:39 +0000</pubDate>
		<dc:creator>dc7590</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Veranstaltungen]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/php-bbq-tour-dienstag-1606-frankfurt,2009-05,394.html</guid>
		<description><![CDATA[Wer hat Lust am Dienstag, den 16.06. auf einem Usergroup-Meeting zu grillen, habt ihr Lust auf eine PHP BBQ Tour?
Eine &#8220;PHP BBQ Tour&#8221; ist eine einwöchige Rundreise durch die PHP-UGs in Deutschland. UG-Teilnehmer sind herzlich eingeladen von Station zu Station mitzureisen und sich auszutauschen.

Jede UG organisiert das (Abend-)Programm vor Ort. Sie findet einen Platz, um [...]]]></description>
			<content:encoded><![CDATA[<p>Wer hat Lust am Dienstag, den 16.06. auf einem Usergroup-Meeting zu grillen, habt ihr Lust auf eine PHP BBQ Tour?</p>
<p>Eine &#8220;PHP BBQ Tour&#8221; ist eine einwöchige Rundreise durch die PHP-UGs in Deutschland. UG-Teilnehmer sind herzlich eingeladen von Station zu Station mitzureisen und sich auszutauschen.<br />
<span id="more-394"></span><br />
Jede UG organisiert das (Abend-)Programm vor Ort. Sie findet einen Platz, um ein BBQ auszurichten. Ob überhaupt und welche Vorträge, Workshops, Diskussionen etc. am Abend stattfinden ist Sache der UG.  Beispielsweise kann eine UG eine Art &#8220;Mini-Unconference&#8221; oder einen &#8220;Wunschfilmabend&#8221; mit Open-Air Kino ausrufen.</p>
<p>Als Route schlage ich eine Fahrt von Süd (München) nach Nord (Kiel) vor Zum einem bleibt es dann von Tag zu Tag länger hell und das Licht geht nicht aus sondern an am Ende der Tour, zum anderen beginnt am 20.06.2009 die Kieler Woche &#8211; <a href="http://www.kieler-woche.de" target="_blank">http://www.kieler-woche.de</a> . Die Kieler Woche ist immer eine Reise wert.</p>
<p>Auf der Wiki-Seite habe ich eine mögliche Reiseroute skizziert:</p>
<p><a href="http://forge.mysql.com/wiki/PHP_BBQ_Tour" target="_blank">  http://forge.mysql.com/wiki/PHP_BBQ_Tour</a></p>
<p>Route:</p>
<p>Montag,     15.06    &#8211; München<br />
<strong> Dienstag,   16.06    &#8211; Frankfurt?</strong><br />
Mittwoch,   17.06.   &#8211; Karlsruhe<br />
Donnerstag, 18.06.   &#8211; Berlin<br />
Freitag,    19.06.   &#8211; Dortmund?<br />
Samstag,    20.06.   &#8211; Hamburg<br />
Sonntag,    21.06.   &#8211; Kiel</p>
<p>Seit der tollen PHP Unconference 2008 wünsche ich mir eine solche &#8220;PHP BBQ Tour&#8221;. Ich würde gerne einmal die UGs kennenlernen. Weil ich reisen möchte, biete ich an, die übergeordnete Organisation zu übernehmen.</p>
<p>Nach einem Jahr bietet sich mir eine gute Gelegenheit die Idee zu realisieren. Mein Chef (Georg Richter) hat mir ermöglicht für mich anfallende Reisekosten für eine Dienstreise zur MySQL User Conference in die USA gegen meine Reisekosten für eine PHP BBQ Tour einzutauschen. Dieser Tausch wurde möglich, weil ich im Gegenzug anbot die BBQ-Tour in meinem (MySQL Rest-)Urlaub bis zum 30.06.09 anzutreten.</p>
<p>Natürlich biete ich jeder interessierten UG an Vorträge zu Sun/MySQL-Themen zu organisieren und vielleicht kann ich auch Speaker gewinnen, die normalerweise nicht an einer PHP-UG Sitzung teilnehmen. Ich knüpfe mein Engagement jedoch an keinerlei Bedingungen solange nicht direkte Mitbewerber von Sun/MySQL involviert werden.</p>
<p>Ich freue mich auf Eure Rückmeldung und Eure Fragen!</p>
<p>Grüße,<br />
Ulf</p>
<p>Wer ist &#8220;Ulf Wendel&#8221;? Ich arbeite seit etwa fünf Jahren für MySQL.<br />
Seit geraumer Zeit bin ich an der Entwicklung der MySQL Treiber für<br />
PHP, C++ und OpenOffice.org beteiligt. Davor war ich bei MySQL als<br />
Supporter, Trainer und Consultant für MaxDB zuständig. Bevor ich zu MySQL gegangen bin, habe ich meine Brötchen mit der PHP-<br />
Anwendungsentwicklung &#8211; zuletzt bei Mayflower/Hypovereinsbank -<br />
verdient. Seit 2003 findet man mich selten auf PHP-Kongressen als<br />
Redner und in PHP-Zeitschriften als Autor. Aber ich erinnere mich gut an manch einen Grillabend: das hat einfach Spaß gemacht.</p>
<p>Warum nicht noch einmal&#8230;</p>
<p>&#8211;<br />
<a href="http://blog.ulf-wendel.de/" target="_blank"> Ulf Wendel</a>, MySQL</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/php-bbq-tour-dienstag-1606-frankfurt,2009-05,394.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Neue Sicherheit bringt der Mai</title>
		<link>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html</link>
		<comments>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html#comments</comments>
		<pubDate>Thu, 23 Apr 2009 09:03:24 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html</guid>
		<description><![CDATA[Eine Referenzimplementierung der OWASP Enterprise Security API (ESAPI) soll es laut Bericht vom Linux Magazin bald auch für PHP geben.
ESAPI definiert Sicherheitsmaßnahmen, die eine Webanwendungen gegen typische Angriffe wie Cross-Site-Scripting und SQL-Injection schützen.
Ein erster Termin ist mit Mai 2009 angegeben. Dabei handelt es sich um eine Portierung der JAVA Referenzimplementierung. Mehr Infos auch im Blog [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Referenzimplementierung der <a href="http://www.owasp.org/index.php/ESAPI#tab=About">OWASP Enterprise Security API (ESAPI)</a> soll es laut <a href="http://www.linux-magazin.de/news/esapi_web_sicherheitsmassnahmen_bald_fuer_php?category=0" title="">Bericht vom Linux Magazin</a> bald auch <a href="http://www.owasp.org/index.php/ESAPI#tab=PHP">für PHP</a> geben.</p>
<blockquote><p>ESAPI definiert Sicherheitsmaßnahmen, die eine Webanwendungen gegen typische Angriffe wie Cross-Site-Scripting und SQL-Injection schützen.</p></blockquote>
<p>Ein erster Termin ist mit Mai 2009 angegeben. Dabei handelt es sich um eine Portierung der JAVA Referenzimplementierung. Mehr Infos auch im <a href="http://www.greebo.net/2009/03/14/esapi-for-php-first-tests-passed/">Blog von Andrew van der Stock</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mamas little Helper</title>
		<link>http://phpugffm.de/index.php/mamas-little-helper,2009-02,369.html</link>
		<comments>http://phpugffm.de/index.php/mamas-little-helper,2009-02,369.html#comments</comments>
		<pubDate>Mon, 09 Feb 2009 01:58:49 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/mamas-little-helper,2009-02,369.html</guid>
		<description><![CDATA[Kleiner Tool-Tipp zu früher Stunde: PHP-Speedy ermöglicht mit zwei, drei einfachen Statements die Ladegeschwindigkeiten einer Website zu optimieren: Includieren, Instanzieren und dann noch ein Funktionsaufruf. Und schon ist die Page auf Speed.
In der LGPL-Klasse drin werkelt ein recht leichtgewichtiger Code, der vor allem von regulären Ausdrücken Gebrauch macht statt bis ins letzte Detail standardkonform HTML [...]]]></description>
			<content:encoded><![CDATA[<p>Kleiner Tool-Tipp zu früher Stunde: <a href="http://aciddrop.com/php-speedy/">PHP-Speedy</a> ermöglicht mit zwei, drei einfachen Statements die Ladegeschwindigkeiten einer Website zu optimieren: Includieren, Instanzieren und dann noch ein Funktionsaufruf. Und schon ist die Page auf Speed.</p>
<p>In der LGPL-Klasse drin werkelt ein recht leichtgewichtiger Code, der vor allem von regulären Ausdrücken Gebrauch macht statt bis ins letzte Detail standardkonform HTML zu parsen. Dann bleibts auch speedy, zumindest bei der Aufwand/Nutzen Rechnung. Komprimiert werden HTML, CSS und Javascript on-the-fly. Dabei lässt sich das auch konfigurieren, zb. wenn nur CSS oder HTML komprimiert werden soll. Ein <a href="http://aciddrop.com/2008/07/15/php-speedy-wp-version-047-works-with-wp26/" title="PHP Speedy Wordpress Plugin">Plugin für Wordpress wird ebenfalls bereit gehalten</a>. Getestet hat der Autor seine Klasse mit Firebug und gegen YSlow.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/mamas-little-helper,2009-02,369.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHTML Encoder Pro vs. Ioncube PHP Encoder</title>
		<link>http://phpugffm.de/index.php/phtml-encoder-pro-vs-ioncube-php-encoder,2009-01,363.html</link>
		<comments>http://phpugffm.de/index.php/phtml-encoder-pro-vs-ioncube-php-encoder,2009-01,363.html#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:29:48 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/phtml-encoder-pro-vs-ioncube-php-encoder,2009-01,363.html</guid>
		<description><![CDATA[Manchmal muss es eben closed sein. Dieser Vergleich kam eigentlich zufälliger Weise zustande. Denn die Recherche im Netz war weniger aussagekräftig und so entstand mittels Try and Error ein Praxistest der beiden Low-Cost-PHP-Encoder.
Natürlich wissen bestimmt viele Leserinnen und Leser die Vorzüge Quelloffener und Freier Software zu schätzen. So geht es auch mir. Aber manchmal kann [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal muss es eben closed sein. Dieser Vergleich kam eigentlich zufälliger Weise zustande. Denn die Recherche im Netz war weniger aussagekräftig und so entstand mittels Try and Error ein Praxistest der beiden Low-Cost-PHP-Encoder.<span id="more-363"></span></p>
<p>Natürlich wissen bestimmt viele Leserinnen und Leser die Vorzüge Quelloffener und Freier Software zu schätzen. So geht es auch mir. Aber manchmal kann man nur in Abgrenzung die Vorteile deutlich machen. Also was tun, wenn dann mal schnell und preiswert ein PHP Encoder her soll? Ich hatte die Möglichkeit den PHTML Encoder Pro von RS Software Lab als auch den Ioncube PHP Encoder von Ioncube Ltd. miteinander im Einsatz zu messen. Beide sind relativ preiswert (120 und 200 Dollar) und können per Kreditkarte als Download bestellt werden.</p>
<h2>PHTML Encoder Pro</h2>
<ul>
<li>Unterstützt ein OS: Linux oder Windows (kleinste Version).</li>
<li>Preis: ca. 120 US-$</li>
<li>Das Prinzip der Software ist, das eigenen Loader-Dateien erstellt werden. Deswegen muss man die PHP Versionen quasi &#8220;selbst&#8221; unterstützen, hier gibt es keine vorgefertigten Loader. Dies kann bestimmt sicherer sein als vorgefertigte Loader, es ist aber auch ein grösserer Aufwand.</li>
<li>Usability: Sehr schlecht. Erst war nicht klar, welche Version gekauft werden sollte, die Oberfläche ist nicht wirklich Bedienbar und die Anwendbarkeit des fertig encodierten Produktes ist recht limitiert wenn man sich das ganze vorher als &#8220;einfach&#8221; vorstellt bzw. lediglich die Free-Version probierte die sich in wesentlichen Prinzipien nicht mit der PRO Version deckte.</li>
<li>Bestelldauer / Lizensierung: Schnell, ca. 1 Tag.</li>
<li>Support: Per Email, Antwort innerhalb von einem Tag. Fachlich Kompetent.</li>
<li>Dokumentation: Sehr schlecht, kaum vorhanden, das Prinzip und die Vorgehensweise kann vorher nur schlecht überblickt werden und macht das Produkt damit lediglich per Selbst-Test auswählbar.</li>
<li>Service: Eine falsch bestellte Version wurde ohne Probleme gegen die richtige getauscht. Sehr entgegenkommend.</li>
</ul>
<h2>Ioncube PHP Encoder</h2>
<ul>
<li>Unterstützt Linux und Windows (kleinste Version).</li>
<li>Unterstützt viele PHP Versionen &#8220;out of the Box&#8221;.</li>
<li>Preis: ca. 200 US-$</li>
<li>Usablity: Die Software kann in einer kostenlosen Version evaluiert werden. Damit angelegte Projekte können direkt mit der Lizensierten Version verarbeitet werden. Die Windows GUI ist sehr einfach zu bedienen.</li>
<li>Bestelldauer / Lizensierung: Recht Aufwendig. Die Bestellung der Software bis zum ersten Einsatz dauert ca. 2 bis 3 Tage, mehrfacher Kontakt mit dem Anbieter ist dafür notwendig. Die Lizenbedingungen sind eher abschreckend, die Software versucht sich mit einem Lizenzschlüssel der an die MAC Adresse eines Netzwerkadapters zu binden. Sollte das System verloren gehen, so geht auch die Lizenz verloren sofern man keinen Support mehr hat. Support ist auf die ersten 12 Monate limitiert. Hier empfliehlt sich die Installation in einer virtuellen Umgebung, evtl. unter Wine. Dies erfordert dann wieder einen höheren Aufwand in der Installation, ist zur Absicherung gegen einen zu starken Vendor Lock-In evtl. überlegenswert. Ansonsten sollte man davon ausgehen, das die Software für 12 Monate voll benutzbar ist.</li>
<li>Support: Forum auf der Website, Support in den ersten 12 Monaten per Email möglich, ich habe den Email-Support nicht in Anspruch genommen und kann nicht sagen wie gut er ist.</li>
<li>Dokumentation: Brauchbar. Sowohl mit der Software, bei den Loadern als auch Online auf der Website des Herstellers.</li>
<li>Service: Alle Prozesse um die Bestellung liefen automatisiert und man hatte nie persönlichen Kontakt. Die Bestellung muss bei diesem Anbieter erst bestätitgt werden, dies geschieht in England zu normalen Geschäftszeiten Werktags. Bestellung über das Wochenende oder Feiertage verlängern den Vorgang entsprechend.</li>
</ul>
<h2>Fazit</h2>
<p>Ein bischen habe ich mich gefühlt Äpfel mit Birnen zu vergleichen. Der <em>Iconcube PHP Encoder</em> ist ganz klar das bessere Produkt für einen schnellen Einsatz. Beim <em>PHTML Encoder Pro</em> handelt es sich vom Eindruck her eher um das Produkt eines einzelnen Entwicklers, das weniger nach Gesichtspunkten der Anwendbarkeit und Dokumentation entwickelt wurde. Iconcube bekommt in vielen Performance-Vergleichen sehr gute Noten und schneidet teilweise auch besser als der wesentlich teurere Encoder von Zend ab. Hinzu kommen eine sehr nette GUI und eine brauchbare Testversion. Die kostenlose Version vom PHTML Encoder ist nämlich nicht mit der Funktionsweise des PHTML Encoder PRO voll zu vergleichen. Hier tat ein Projekt welches in der kostenlosen Variante funktionierte, seinen Dienst in der &#8220;Pro&#8221; Variante nicht und hier bedarf es einer grösseren Anpassung in der Erstellung der Loader.</p>
<p>Sicherheitsaspekte konnte ich im Praxistest kaum abwägen. Iconcube PHP Encoder setzte laut eigener Dokumentation auf eine Kompilierung in PHP Bytecode der dann nochmal verschlüsselt wird. Ob die Kompilierung in Bytecode beim PHTML Encoder Pro gemacht wird, kann ich gar nicht sagen. Ab und an gibt es zum Thema auch interessante Diskussionen in Newsgroups, auch zum Encoding und des Schutzes allgemein. Ob ein starkes und solides kryptographisches Konzept bei den Lösungen verwendet wurde, kann ich in beiden Fällen nicht sagen. Beim PHTML Encoder Pro zumindest werden Angaben zu standarisierten Verschlüsselungsverfahren gemacht, was zumindest ein Signal ist, das hier nicht auf proprietäre Algorithmen gesetzt wird, die oftmals sich dann als eine Schwachstelle herausstellen. Auch könnte beim PHTML Encoder Pro aus Gesichtspunkten der Sicherheit der &#8220;echte&#8221; private Schlüssel überzeugen. Sollte deswegen der Einsatz überlegt werden, so ist eine längere Phase zur Einführung mittels Tests und Build-Automation überlegenswert, um die Schwachpunkte der Usability der Software auszubügeln. Hier kommt einem sicherlich der schnelle Support per Email zugute. Man muss sich allerdings auf die Software einlassen was für eine schnellen Einsatz weniger in Frage kommt, bei der Integration in eine Strategie allerdings überlegenswert sein kann zumal es hier auch die Option gibt, die Software im Quellcode zu erwerben.</p>
<p>Sollte man den nicht kurzfristigen Einsatz vom Iconcube PHP Encoder planen, so sollte man die Kosten genau kalkulieren und seine Investition evtl. mittels Virtualisierung absichern, was auch zu einem größeren Aufwandwand führt.</p>
<h2>Alternativen</h2>
<p>Da gibts die Variante von Zend. Ich habe den nicht eingesetzt, ich denke hier kann man aber bedenkenlos erstmal zu einer kostengünstigeren Variante eines anderen Herstellers greifen um die ersten Gehversuche zu machen. Sollte man danach das Bedürfniss haben, ein teureres Produkt zu lizensieren, so kann auch zum Zend Produkt gegriffen werden, welches einen vergleichbaren Funktionsumfang wie der Iconcube Encoder verzögert bereitstellt (ca. 1/2 bis 1 Jahr später).</p>
<p>Nicht-Kryptographisch aber zumindest Byte-Kodiert bietet sich noch der bcompiler aus dem PECL Repository an. Dieser erfordert eine stärkere Einarbeitung und Tests auf Zielsystemen. Dank seines Open Source Charakters ist hier allerdings auch viel mehr möglich und lädt zum experimentellen Einsatz ein.</p>
<h3>Links</h3>
<ul>
<li><a href="http://www.rssoftlab.com/phpenc.php">PHTML Encoder Pro</a></li>
<li><a href="http://www.ioncube.com/sa_encoder.php">Ioncube PHP Encoder</a></li>
<li><a href="http://www.zend.com/en/products/guard/">Zend Encoder / Zend Guard</a></li>
<li><a href="http://pecl.php.net/package/bcompiler">BCompiler PECL Package</a></li>
<li><a href="http://www.suspekt.org/2008/12/30/slides-for-vulnerability-discovery-in-closed-sourceencrypted-php-applications/">Slides for “Vulnerability Discovery in Closed Source/Encrypted PHP Applications”</a> von Stefan Esser</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/phtml-encoder-pro-vs-ioncube-php-encoder,2009-01,363.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
