<?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>Software-Wahnsinn &#187; PHP</title>
	<atom:link href="http://www.software-wahnsinn.de/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.software-wahnsinn.de</link>
	<description>Neues vom alltäglichen Wahnsinn (nicht nur) der Software-Technik</description>
	<lastBuildDate>Wed, 01 Dec 2010 19:00:29 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.1</generator>
		<item>
		<title>Das b&#246;se e</title>
		<link>http://www.software-wahnsinn.de/231-das-boese-e/</link>
		<comments>http://www.software-wahnsinn.de/231-das-boese-e/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 06:04:11 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[Alltäglicher Wahnsinn]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software-Wahnsinn]]></category>
		<category><![CDATA[estimated e]]></category>
		<category><![CDATA[estimated symbol]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html-entität]]></category>
		<category><![CDATA[iso-8859-1]]></category>
		<category><![CDATA[iso-8859-15]]></category>
		<category><![CDATA[live http-headers]]></category>
		<category><![CDATA[mb_convert_string]]></category>
		<category><![CDATA[unicode]]></category>
		<category><![CDATA[utf-8]]></category>
		<category><![CDATA[windows-1252]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/?p=231</guid>
		<description><![CDATA[Gestern hat mich ein ganz besonderer Buchstabe in den Wahnsinn getrieben: Das ?! Nicht das jemand glaubt, e = ?. Denn wenn man genau hinsieht, dann ist e ? ? Es handelt sich n&#228;mlich hierbei um das sog. &#8220;estimated e&#8221; auf Verpackungen. Dieses ist ein Sonderzeichen, welches Windows, Mac und Linux eigentlich unbekannt ist und [...]]]></description>
			<content:encoded><![CDATA[<p>Gestern hat mich ein ganz besonderer Buchstabe in den Wahnsinn getrieben: Das ?! Nicht das jemand glaubt, e = ?. Denn wenn man genau hinsieht, dann ist</p>
<p style="padding-left: 30px;font-size:30px;">e ? ?</p>
<p>Es handelt sich n&#228;mlich hierbei um das sog. <a href="http://de.wikipedia.org/wiki/Europ%C3%A4ische_Fertigpackungsrichtlinie" target="_blank">&#8220;estimated e&#8221; auf Verpackungen</a>. Dieses ist ein Sonderzeichen, welches Windows, Mac und Linux eigentlich unbekannt ist und sich in Word und HTML aber herbei zaubern l&#228;sst. Des R&#228;tsels L&#246;sung lautet <a href="http://de.wikipedia.org/wiki/Unicode" target="_blank">Unicode</a>: Hier hat das Estimated Symbol die Position 8494 bzw. U+212e und dementsprechend die <a href="http://de.wikipedia.org/wiki/HTML-Entit%C3%A4t" target="_blank">HTML-Entit&#228;t</a> &amp;#8494; bzw. &amp;#x212e;.</p>
<p>Wenn jetzt dieses &#8220;magische e&#8221; in einem HTML-Formular eingegeben wird und das Formular in PHP weiterverarbeitet wird, hat man ein Problem. Denn wie ich nach langem Suchen herausfinden konnte, wird dieses magische e bereits vom Browser in die numerische HTML-Entit&#228;t umgewandelt, bevor der Request an den Server &#252;bermittelt wird. Herausfinden konnte ich das im &#220;brigen mit der genialen Firefox-Erweiterung &#8220;<a href="https://addons.mozilla.org/de/firefox/addon/3829" target="_blank">Live HTTP-Headers</a>&#8220;.</p>
<p>Zur&#252;ck zu meinem Problem: Es wurde also in einem HTML-Formular dieses b&#246;se ? eingegeben und diese Eingabe sollte sp&#228;ter in einer E-Mail-Benachrichtigung ihren Platz finden. Da bereits der Browser die Umwandlung in eine HTML-Entit&#228;t durchf&#252;hrte, musste diese nun PHP-seitig wieder r&#252;ckg&#228;ngig gemacht werden. Leichter gesagt als getan. Denn eine String-Konvertierung mittels <a href="http://www.php.net/manual/de/function.mb-convert-encoding.php" target="_blank">mb_convert_encoding</a> f&#252;hrte nicht zum Ziel. Egal, ob ich nach <a href="http://de.wikipedia.org/wiki/ISO-8859-1" target="_blank">ISO-8859-1</a>, <a href="http://de.wikipedia.org/wiki/ISO-8859-15" target="_blank">ISO-8859-15</a>, <a href="http://de.wikipedia.org/wiki/Windows-1252#Windows-1252" target="_blank">Windows-1252</a> oder auch <a href="http://de.wikipedia.org/wiki/Utf-8" target="_blank">UTF-8</a> konvertierte, das Ergebnis blieb das gleiche: Aus ? wurde ?</p>
<p>Nach R&#252;cksprache mit dem Kunden habe ich dann eines gemacht:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&amp;amp;#8494;'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'e'</span><span style="color: #339933;">,</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Da das ? kaum von einem normalen e zu unterscheiden ist, steht zuk&#252;nftig ein normales e in den Benachrichtigungs-Mails geschrieben.</p>
<p>Die letztendliche Implementierung hat nicht lange gedauert. Die Suche, warum sich das ? so seltsam verh&#228;lt, allerdings &#252;ber zwei Stunden <img src='http://www.software-wahnsinn.de/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/231-das-boese-e/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#220;bernachten beim Symfony Day Cologne 2009</title>
		<link>http://www.software-wahnsinn.de/109-uebernachten-beim-symfony-day-cologne-2009/</link>
		<comments>http://www.software-wahnsinn.de/109-uebernachten-beim-symfony-day-cologne-2009/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 07:49:06 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Köln]]></category>
		<category><![CDATA[Symfony Day]]></category>
		<category><![CDATA[Symfony Day 2009]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/?p=109</guid>
		<description><![CDATA[Kleiner Nachtrag zum Symfony Day Cologne 2009: Wer eine g&#252;nstige &#220;bernachtungsm&#246;glichkeit sucht, sollte die Jugendherberge in K&#246;ln-Deutz ins Auge fassen. Diese liegt n&#228;mlich schr&#228;g gegen&#252;ber vom Veranstaltungsort. Ich brauche mich zum Gl&#252;ck nicht um ein Zimmer k&#252;mmern, da ich nur eine gute Viertelstunde zu Fuss bis zum K&#246;ln Triangel brauche]]></description>
			<content:encoded><![CDATA[<p>Kleiner Nachtrag zum <a href="http://www.software-wahnsinn.de/105-symfony-day-cologne-2009/" target="_self">Symfony Day Cologne 2009</a>:</p>
<p>Wer eine g&#252;nstige &#220;bernachtungsm&#246;glichkeit sucht, sollte die <a href="http://www.jugendherberge.de/jh/rheinland/koeln-deutz/?m" target="_blank">Jugendherberge in K&#246;ln-Deutz</a> ins Auge fassen. Diese liegt n&#228;mlich schr&#228;g gegen&#252;ber vom Veranstaltungsort.</p>
<p>Ich brauche mich zum Gl&#252;ck nicht um ein Zimmer k&#252;mmern, da ich nur eine gute Viertelstunde zu Fuss bis zum K&#246;ln Triangel brauche <img src='http://www.software-wahnsinn.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/109-uebernachten-beim-symfony-day-cologne-2009/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Symfony Day Cologne 2009</title>
		<link>http://www.software-wahnsinn.de/105-symfony-day-cologne-2009/</link>
		<comments>http://www.software-wahnsinn.de/105-symfony-day-cologne-2009/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 07:15:23 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Köln]]></category>
		<category><![CDATA[Symfony Day]]></category>
		<category><![CDATA[Symfony Day 2009]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/?p=105</guid>
		<description><![CDATA[Nun ist es also soweit: Symfony kommt am 4. September nach K&#246;ln Jetzt aber im Ernst: Nachdem ich die letzten beiden Jahre zum Symfony Camp in die Niederlande gereist bin, gibt es in diesem Jahr eine Symfony-Konferenz in K&#246;ln. Veranstaltet wird der Symfony Day Cologne 2009 von Interlutions. Wie auf der Konferenz-Website zu lesen ist, [...]]]></description>
			<content:encoded><![CDATA[<p>Nun ist es also soweit: Symfony kommt am 4. September nach K&#246;ln <img src='http://www.software-wahnsinn.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Jetzt aber im Ernst: Nachdem ich die letzten beiden Jahre zum <a href="http://www.symfonycamp.com/" target="_blank">Symfony Camp</a> in die Niederlande gereist bin, gibt es in diesem Jahr eine Symfony-Konferenz in K&#246;ln. Veranstaltet wird der <a title="Konferenz-Website" href="http://www.symfonyday.com/" target="_blank">Symfony Day Cologne 2009</a> von <a href="http://www.interlutions.de/" target="_blank">Interlutions</a>.</p>
<p>Wie auf der <a href="http://www.symfonyday.com/" target="_blank">Konferenz-Website</a> zu lesen ist, findet die Veranstaltung im <a href="http://www.koelntriangle.de/" target="_blank">K&#246;ln Triangle</a> (was f&#252;r ein bescheuerter Name f&#252;r den Turm) statt und kostet 80 Euro. Neben der Konferenz gibt es auch einen Einsteiger-Workshop. Abgerundet wird der Tag durch eine Party am Abend, an der auch das 10-j&#228;hrige Jubil&#228;um von Interlusions gefeiert wird. Und da der 4. September ein Freitag ist, kann die Party auch ruhig etwas l&#228;nger dauern <img src='http://www.software-wahnsinn.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Via <a href="http://www.symfony-framework.nl/nieuws/110" target="_blank">http://www.symfony-framework.nl/nieuws/110</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/105-symfony-day-cologne-2009/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Jobeet-Tuturial als PDF</title>
		<link>http://www.software-wahnsinn.de/74-jobeet-tuturial-als-pdf/</link>
		<comments>http://www.software-wahnsinn.de/74-jobeet-tuturial-als-pdf/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 09:49:38 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Askeet]]></category>
		<category><![CDATA[Doctrine]]></category>
		<category><![CDATA[Jobeet]]></category>
		<category><![CDATA[OR-Mapper]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[PDF]]></category>
		<category><![CDATA[Propel]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/74-jobeet-tuturial-als-pdf/</guid>
		<description><![CDATA[Nachdem als &#8220;Adventskalender-Projekt&#8221; vom Symfony-Team das &#8220;Jobeet-Tutorial&#8221; als Ersatz f&#252;r das mittlerweile veraltete &#8220;Askeet-Tutorial&#8221; ver&#246;ffentlicht wurde, steht Jobeet auch als PDF zur Verf&#252;gung. Da es das Jobeet-Tutorial sowohl in einer Ausgabe f&#252;r Propel und Doctrine als OR-Mapper gibt, sind daher auch beide Tutorials als in verschiedenen PDF-Dateien (Propel-Ausgabe / Doctrine-Ausgabe) verf&#252;gbar. Auf der Dokumentations-Hauptseite sind [...]]]></description>
			<content:encoded><![CDATA[<p>Nachdem als &#8220;Adventskalender-Projekt&#8221; vom <a title="Symfony Project" href="http://www.symfony-project.org/" target="_blank">Symfony</a>-Team das &#8220;<a title="Jobeet-Tuturial" href="http://www.jobeet.org/" target="_blank">Jobeet-Tutorial</a>&#8221; als Ersatz f&#252;r das mittlerweile veraltete &#8220;<a title="Askeet-Turorial" href="http://www.symfony-project.org/askeet/1_0/en/" target="_blank">Askeet-Tutorial</a>&#8221; ver&#246;ffentlicht wurde, steht Jobeet auch als PDF zur Verf&#252;gung.</p>
<p>Da es das Jobeet-Tutorial sowohl in einer Ausgabe f&#252;r <a title="Jobeet-Tuturial f&#252;r Propel" href="http://www.symfony-project.org/jobeet/1_2/Propel/en/" target="_blank">Propel</a> und <a title="Jobeet-Tuturial f&#252;r Doctrine" href="http://www.symfony-project.org/jobeet/1_2/Doctrine/en/" target="_blank">Doctrine</a> als OR-Mapper gibt, sind daher auch beide Tutorials als in verschiedenen PDF-Dateien (<a title="Jobeet-Tuturial f&#252;r Propel als PDF" href="http://www.symfony-project.org/get/pdf/jobeet-1.2-propel-en.pdf" target="_blank">Propel-Ausgabe</a> / <a title="Jobeet-Tuturial f&#252;r Doctrine als PDF" href="http://www.symfony-project.org/get/pdf/jobeet-1.2-doctrine-en.pdf" target="_blank">Doctrine-Ausgabe</a>) verf&#252;gbar.</p>
<p>Auf der <a title="Symfony-Dokumentation" href="http://www.symfony-project.org/doc/" target="_blank">Dokumentations-Hauptseite</a> sind auch die Links zu finden, um die beiden Ausgaben auch als gedrucktes Werk (<a href="http://www.amazon.de/gp/product/2918390062?ie=UTF8&amp;tag=softwarewahns-21&amp;linkCode=as2&amp;camp=1642&amp;creative=6746&amp;creativeASIN=2918390062" class="awshortcode-product awshortcode-product-text" rel="external">Doctrine-Ausgabe<img src="http://www.assoc-amazon./e/ir?t=softwarewahns-21&amp;l=as2&amp;o=8&amp;a=2918390062" alt="" style="height:1px !important; width:1px !important; border:none !important; margin:0 !important; padding: 0 !important;" /></a> / <a href="http://www.amazon.de/gp/product/2918390070?ie=UTF8&amp;tag=softwarewahns-21&amp;linkCode=as2&amp;camp=1642&amp;creative=6746&amp;creativeASIN=2918390070" class="awshortcode-product awshortcode-product-text" rel="external">Propel-Ausgabe<img src="http://www.assoc-amazon./e/ir?t=softwarewahns-21&amp;l=as2&amp;o=8&amp;a=2918390070" alt="" style="height:1px !important; width:1px !important; border:none !important; margin:0 !important; padding: 0 !important;" /></a>) zu bestellen. Dort finden sich aber auch weitere interessante Dokus, wie z.B. <a href="http://www.symfony-project.org/tutorial/1_2/whats-new" target="_blank">&#8220;What&#8217;s new?&#8221;</a>, welche die Unterschiede zwischen Symfony 1.0 und 1.2 darstellt.</p>
<p>via <a href="http://www.symfony-project.org/blog/2009/01/31/read-the-symfony-documentation-offline" target="_blank">Symfony Project Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/74-jobeet-tuturial-als-pdf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Die XING-Gruppe &#8220;Symfony PHP Framework&#8221;</title>
		<link>http://www.software-wahnsinn.de/63-die-xing-gruppe-symfony-php-framework/</link>
		<comments>http://www.software-wahnsinn.de/63-die-xing-gruppe-symfony-php-framework/#comments</comments>
		<pubDate>Mon, 15 Sep 2008 06:11:10 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Xing]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/63-die-xing-gruppe-symfony-php-framework/</guid>
		<description><![CDATA[Wie ich auf dem Symfony-Camp festgestellt habe, haben zwar viele der Camp-Teilnehmer ein Xing-Profil, jedoch kennt nicht jeder auch die Symfony-Gruppe bei Xing. Daher m&#246;chte ich auf diesem Wege einfach mal auf die Symfony-Gruppe hinweisen: Die Symfony-Gruppe bei Xing Es w&#228;re doch vielleicht sch&#246;n, wenn diese Gruppe ein wenig lebendiger wird. Im deutschsprachigen Symfony-Forum ist [...]]]></description>
			<content:encoded><![CDATA[<p>Wie ich auf dem Symfony-Camp festgestellt habe, haben zwar viele der Camp-Teilnehmer ein <a href="http://www.xing.com" target="_blank">Xing</a>-Profil, jedoch kennt nicht jeder auch die <a href="https://www.xing.com/net/symfony/" target="_blank">Symfony-Gruppe</a> bei Xing. Daher m&#246;chte ich auf diesem Wege einfach mal auf die Symfony-Gruppe hinweisen:</p>
<blockquote><p><a href="https://www.xing.com/net/symfony/" target="_blank">Die Symfony-Gruppe bei Xing</a></p></blockquote>
<p>Es w&#228;re doch vielleicht sch&#246;n, wenn diese Gruppe ein wenig lebendiger wird. Im <a href="http://www.symfony-forum.de/" target="_blank">deutschsprachigen Symfony-Forum</a> ist ja anscheinend auch nicht so viel los und in der <a href="http://groups.google.de/group/symfony-de" target="_blank">deutschen Symfony-Google-Group</a> ist auch eher tote Hose.</p>
<p><a rel="me" href="http://www.xing.com/profile/Ingo_Busch3" target="_blank"><img src="http://www.xing.com/img/buttons/5_de_btn.gif" border="0" alt="XING" width="118" height="23" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/63-die-xing-gruppe-symfony-php-framework/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mi&#223;verst&#228;ndisse in der Web-Entwicklung</title>
		<link>http://www.software-wahnsinn.de/41-missverstaendisse-in-der-web-entwicklung/</link>
		<comments>http://www.software-wahnsinn.de/41-missverstaendisse-in-der-web-entwicklung/#comments</comments>
		<pubDate>Tue, 22 Jul 2008 08:51:36 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[Fundstücke]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/41-missverstaendisse-in-der-web-entwicklung/</guid>
		<description><![CDATA[Eran Galperin hat in seinem Blog die f&#252;nf gr&#246;&#223;ten Mi&#223;verst&#228;ndnisse in der Entwicklung von Web-Anwendungen zusammen getragen: Prozeduraler Code sei schneller als Objektorientierter Code &#8211; hier wird alzu oft &#196;pfel mit Birnen verglichen Das Backend sei wichtiger als das Frontend &#8211; liegt wohl oftmals an der Abneigung / Geringsch&#228;tzung von HTML / CSS / JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.techfounder.net/about/" target="_blank"> 		Eran Galperin</a> hat in seinem <a href="http://www.techfounder.net/" target="_blank">Blog</a> die f&#252;nf gr&#246;&#223;ten Mi&#223;verst&#228;ndnisse in der Entwicklung von Web-Anwendungen <a href="http://www.techfounder.net/2008/07/20/common-misconceptions-in-web-application-development/" target="_blank">zusammen getragen</a>:</p>
<ol>
<li>Prozeduraler Code sei schneller als Objektorientierter Code &#8211; hier wird alzu oft &#196;pfel mit Birnen verglichen</li>
<li>Das Backend sei wichtiger als das Frontend &#8211; liegt wohl oftmals an der Abneigung / Geringsch&#228;tzung von HTML / CSS / JavaScript durch &#8220;richtige&#8221; Entwickler</li>
<li>Grafik-Designer sind auch gute Interface-Designer &#8211; beide sind zwar Designer, aber der erstere will Aufmerksamkeit erreichen und der zweite soll den Benutezr gl&#252;cklich machen</li>
<li>Es gibt DIE &#252;berlegene Programmiersprache &#8211; es gibt nicht die eine seelig machende Sprache</li>
<li>XML sei schneller bzw. produziere geringeren Overhead als Datenbanken  (bzw. DBMS) &#8211; auch hier wird nicht sauber verglichen</li>
</ol>
<p>Der Artikel ist sehr interessant und ich kann Eran in allen f&#252;nf Punkten nur beipflichten.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/41-missverstaendisse-in-der-web-entwicklung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Imagick unter Windows</title>
		<link>http://www.software-wahnsinn.de/24-imagick-unter-windows/</link>
		<comments>http://www.software-wahnsinn.de/24-imagick-unter-windows/#comments</comments>
		<pubDate>Sat, 27 Oct 2007 13:36:46 +0000</pubDate>
		<dc:creator>Ingo</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software-Wahnsinn]]></category>

		<guid isPermaLink="false">http://www.software-wahnsinn.de/24-imagick-unter-windows/</guid>
		<description><![CDATA[F&#252;r unsere Applikation, die wir seit &#252;ber einem halben Jahr entwickeln, setzen wir zur Erzeugung von Thumbnails und Seiten-Previews von PDF-Dateien bevorzugt ImageMagick ein. Wer mehr zu ImageMagick wissen will, der Besuche die Homepage oder lese sich den Wikipedia-Artikel durch. Der Vollst&#228;ndigkeit halber sei an dieser Stelle erw&#228;hnt, dass wir ImageMagick in Kombination mit Ghostscript [...]]]></description>
			<content:encoded><![CDATA[<p>F&#252;r unsere Applikation, die wir seit &#252;ber einem halben Jahr entwickeln, setzen wir zur Erzeugung von Thumbnails und Seiten-Previews von PDF-Dateien bevorzugt <a href="http://www.imagemagick.org/index.php" target="_blank" title="ImageMagick Homepage">ImageMagick</a> ein. Wer mehr zu ImageMagick wissen will, der Besuche die Homepage oder lese sich den <a href="http://de.wikipedia.org/wiki/Imagemagick" target="_blank" title="Wikipedia-Eintrag zu ImageMagick">Wikipedia-Artikel</a> durch. Der Vollst&#228;ndigkeit halber sei an dieser Stelle erw&#228;hnt, dass wir ImageMagick in Kombination mit <a href="http://de.wikipedia.org/wiki/Ghostscript" target="_blank" title="Wikipedia-Eintrag zu Ghostscript">Ghostscript</a> einsetzen, damit auch <a href="http://de.wikipedia.org/wiki/Portable_Document_Format" title="Wikipedia-Eintrag zu PDF" target="_blank">PDF</a> (und nat&#252;rlich auch <a href="http://de.wikipedia.org/wiki/PostScript" target="_blank" title="Wikipedia-Eintrag zu PostScript">PostScript</a>-Dateien) gerendert werden kann.</p>
<p>Aus PHP heraus rufen wir ImageMagick sowohl unter Windows als auch unter Linux per <a href="http://de2.php.net/manual/de/function.exec.php" title="PHP-Handbuch-Eintrag zu exec()" target="_blank">exec()</a> auf. Nicht gerade besonders elegant, aber wirkungsvoll <img src='http://www.software-wahnsinn.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Vor allem ist das Ansprechen per exec() in einer Objekt-orientierten Umgebung alles andere als intuitiv. (Wir setzen bei besagtem Projekt <a href="http://www.symfony-project.com/" target="_blank">Symfony</a> als Framework ein). So haben wir uns also eine Adapter-Klasse geschrieben, die den Zugriff auf ImageMagick h&#252;bsch objektorientiert verpackt.</p>
<p>Unter Linux bereitet diese Art der Einbindung von ImageMagick uns keinerlei Kopfschmerzen. ImageMagick ist  ebenso wie GhostScript auf den meisten Linux-Servern schon installiert oder mit geringem Aufwand &#252;ber die Distributions-eigene Paketverwaltung schnell nachinstalliert. Auch die Performance l&#228;sst sich sehen. Und unter Windows? Die Installation von IM und GS klappt mit den grafischen Installern noch ohne Probleme. Aber die Performance von ImageMagick l&#228;sst per PHP und exec() doch ein wenig zu w&#252;nschen &#252;brig (f&#252;r das Rendern einer Vorschau ben&#246;tigt unsere Applikation die doppelte bis dreifache Zeit unter Windows &#8211; trotz schnellerem Prozessor und mehr Hauptspeicher). Man merkt halt schon, f&#252;r welche Plattform sowohl IM als auch GS entwickelt wurden.</p>
<p>Als native Schnittstelle gibt es schon seit Jahren das <a href="http://de.wikipedia.org/wiki/PECL" title="Wikipedia-Eintrag zu PECL" target="_blank">PECL</a>-Paket <a href="http://pecl.php.net/package/imagick" target="_blank">Imagick</a>. Es wurde jedoch seit 2004 nicht mehr weiter entwickelt. Erst im Fr&#252;hjahr dieses Jahres haben sich wieder zwei Entwickler der Weiter-Entwicklung angenommen. Mittlerweile ist Imagick auch als Version 2.0.x stabil. Die 2er-Version wurde konsequent auf PHP5 und Oojekt-Orientierte Programmierung ausgelegt, so dass es keine Probleme bereiten sollte, Imagick in vorhandenen Projekten einzusetzen. Einziges Problem unter Windows ist jedoch, das PECL-Pakete nicht in PHP, sondern in C implementiert sind und man deshalb entweder vorkompilierte DLLs ben&#246;tigt, oder selber den Compiler anwerfen muss. Da ich nicht &#252;ber Microsoft Visual Studio verf&#252;ge und auch sonst ein wenig mit C auf Kriegsfu&#223; stehe, blieb nur noch Variante eins &#252;brig.</p>
<p><span id="more-24"></span>Der Finne <a href="http://valokuva.org/?page_id=2" target="_blank">Mikko Koppanen</a>, seines Zeichens einer der beiden Entwickler von Imagick,  hat aber &#252;ber sein durchaus lesenwertes <a href="http://valokuva.org/" title="Blog von Mikko Koppanen" target="_blank">Blog</a> die vorkompilierten <a href="http://valokuva.org/?page_id=50" title="Imagick DLLs f&#252;r Windows" target="_blank">DLLs f&#252;r Windows</a> bereitsgestellt. Die passende DLL herunter zu laden und in mein PHP-Extensions-Verzeichnis zu speichern war noch nicht wirklich schwierig. Aber den Kram ans Laufen zu bekommen schon. Das alte <a href="http://de.wikipedia.org/wiki/Howto" title="Wikipedia-Eintrag zu HowTo" target="_blank">HowTo</a>, auf welches auch Mikko <a href="http://redux.imagemagick.org/discourse-server/viewtopic.php?t=4708" target="_blank">hingewiesen</a> hat, war nur ansatzweise hilfreich. Vor allem hat es irgendwie das Layout zerschossen und ich kann daher nur jedem nahe legen, der sich dieses HowTo durchlesen m&#246;chte und Firefox mit installierter Web-Developer-Toolbar zur Verf&#252;gung hat, die Funktion zum Deaktivieren von Inline-Styles zu nutzen. Andernfalls lassen sich manche Quotes nicht lesen&#8230;</p>
<p>Nach Studium des o.g. HowTos habe ich mich dann an die Arbeit gemacht, Imagick auf meinem Notebook (Windows XP Pro, Apache 2.2.4 als Service, PHP 5.2.3 als CGI) ans fliegen zu bekommen:</p>
<ul>
<li> Die heruntergeladene DLL <code>php_imagick_dyn-Q8.dll</code> landet im Extensions-Verzeichnis meiner PHP-Installation (bei mir <code>C:\php5\ext</code>)</li>
<li>Die DLL muss nat&#252;rlich in der <code>php.ini</code> aktiviert werden:<br />
<code>extension=php_imagick_dyn-Q8.dll</code> dem Block mit den Erweiterungen hinzuf&#252;gen</li>
<li>Eine info.php mit folgendem Inhalt ins htdocs-Verzeichnis  gelegt:<br />
<code>&lt;?php<br />
phpinfo();<br />
?&gt;</code><br />
und im Browser aufgerufen.</li>
<li>Und was ist passiert? Nichts! Kein Imagick wird mir unter den aktivierten PHP-Erweiterungen angezeigt. Wenn ich PHP auf der Kommando-Zeile anspreche, dann bekomme ich die Fehlermeldung angezeigt, dass es nicht m&#246;glich w&#228;re die besagte DLL zu laden.</li>
<li>Dem obigen Howto konnte ich entnehmen, dass der Pfad zu ImageMagick-Installation der <code>PATH</code>-Umgebungsvariable von Windows hinzuzuf&#252;gen sei. Gesagt, getan, aber der Kram will immer noch nicht.</li>
<li>Der Vorschlag mit dem Setzen von<br />
<code>SetEnv MAGICK_HOME="C:/Programme/ImageMagick"</code><br />
in der <code>httpd.conf</code> des Apache will auch nicht so richtig funktionieren.</li>
<li>Letztendlich hat es dann damit geklappt, indem ich die Umgebungsvariable  <code>MAGICK_HOME</code> mit dem Wert <code>C:\Programme\ImageMagick</code> Windows beigebracht habe.</li>
<li>Aber erst nach einem Windows-typischen Neustart konnte ich endlich das Ergebnis meiner Bem&#252;hungen nach Aufruf der <code>info.php</code> im Browser bewundern:<br />
<a href="http://www.software-wahnsinn.de/wp-content/uploads/2007/10/imagick-screenshot.gif" title="Ausschnitt aus der info.php"></a></p>
<p style="text-align: center"><a href="http://www.software-wahnsinn.de/wp-content/uploads/2007/10/imagick-screenshot.gif" title="Ausschnitt aus der info.php"><img src="http://www.software-wahnsinn.de/wp-content/uploads/2007/10/imagick-screenshot.gif" title="Ausschnitt aus der info.php" alt="Ausschnitt aus der info.php" border="0" width="400" /></a></p>
</li>
</ul>
<p>Nachdem jetzt alles l&#228;uft, wollte ich doch mal ausprobieren, ob der Performance-Zuwachs tats&#228;chlich so toll ist, wie es Mikko als Ergebnis seines &#8220;<a href="http://valokuva.org/?p=40" target="_blank" title="Micor-Benchmark exec convert vs imagick">Micro-Benchmark</a>&#8221; in seinem Blog gepostet hat. Das Ergebnis war doch etwas ern&#252;chternd: Teilweise hat es mit Imagick doppelt so lange gedauert, als &#252;ber den Aufruf von <code>convert</code> via <code>exec()</code>.</p>
<p>Ich werde mal ein wenig an ein paar Stellschrauben drehen (z.B. wie sich das Einstellen der &#8220;<a href="http://valokuva.org/?p=11" target="_blank" title="Resource limiting">Ressource Limitations</a>&#8221; auswirkt) und was ich noch mit den ganzen anderen Parametern anstellen kann, die im <a href="http://www.php.net/manual/de/ref.imagick.php" target="_blank">Manual zu Imagick</a> genannt, aber kaum bzw. nicht weiter beschrieben sind.</p>
<p>Auch werde ich demn&#228;chst ein wenig Code und Beispiel-Dateien posten, mit denen meine Versuche nachvollzogen werden k&#246;nnen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.software-wahnsinn.de/24-imagick-unter-windows/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

