<?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>Börngen-Schmidt IT Consulting &#187; PHP</title>
	<atom:link href="http://www.boerngen-schmidt.de/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.boerngen-schmidt.de</link>
	<description>Die Summe der Kleinigkeiten ergibt das Ganze.</description>
	<lastBuildDate>Mon, 07 Nov 2011 20:00:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>HowTO: Pear unter Snow Leopard</title>
		<link>http://www.boerngen-schmidt.de/2010/08/howto-pear-unter-snow-leopard/</link>
		<comments>http://www.boerngen-schmidt.de/2010/08/howto-pear-unter-snow-leopard/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 10:00:42 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Macintosch]]></category>
		<category><![CDATA[HowTo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Snow Leopard]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/2010/08/howto-pear-unter-snow-leopard/</guid>
		<description><![CDATA[PEAR ist ein Framework und ein Distributionssystem mit dem PHP Softwarepakete verteilt und installiert werden können. Die Installation an sich ist super einfach: # root Rechte mit &#34;richtigem einloggen&#34; und in das richtige Verzeichnis wechseln sudo su - cd /usr/local &#160; # PEAR Installer herunterladen und ausführen curl http://pear.php.net/go-pear &#62; go-pear.php php go-pear.php rm go-pear.php <a href='http://www.boerngen-schmidt.de/2010/08/howto-pear-unter-snow-leopard/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p><a title="Official PEAR Homepage" href="http://pear.php.net/" target="_blank">PEAR</a> ist ein Framework und ein Distributionssystem mit dem PHP Softwarepakete verteilt und installiert werden können.</p>
<p>Die Installation an sich ist super einfach:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># root Rechte mit &quot;richtigem einloggen&quot; und in das richtige Verzeichnis wechseln</span>
 <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">su</span> -
 <span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># PEAR Installer herunterladen und ausführen</span>
 curl http:<span style="color: #000000; font-weight: bold;">//</span>pear.php.net<span style="color: #000000; font-weight: bold;">/</span>go-pear <span style="color: #000000; font-weight: bold;">&gt;</span> go-pear.php
 php go-pear.php
 <span style="color: #c20cb9; font-weight: bold;">rm</span> go-pear.php</pre></div></div>

<p>Danach können wir eigentlich alles bestätigen und PEAR sollte installiert werden, dennoch lohnt es sich vorher die Pfade zu überprüfen.</p>
<p>Last but not least muss noch die Konfigurationsdatei von PHP angepasst werden.Dazu kann man die mitgelieferte php.ini.default benutzen oder alternativ können zwei verschiedene php.ini (für Development und Production) unter http://wiki.php.net/rfc/newinis gefunden werden.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># PHP.ini editieren</span>
 <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini.default <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini
 <span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini</pre></div></div>

<p>Dort den <em>include_path</em> anpassen auf: .:/usr/local/PEAR und falls noch nicht geschehen <em>date.timezone</em> setzen (z.B. auf Europe/Berlin). Zu guter letzt noch ein Neustart des Apache Webservers via <strong>apachectl restart</strong></p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2010/08/howto-pear-unter-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache ITK mit mod_php und eingener php.iniApache2 ITK with mod_php and own php.ini</title>
		<link>http://www.boerngen-schmidt.de/2009/09/apache-itk-mit-mod_php-und-eingener-php-ini/</link>
		<comments>http://www.boerngen-schmidt.de/2009/09/apache-itk-mit-mod_php-und-eingener-php-ini/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 15:53:48 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache2]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=208</guid>
		<description><![CDATA[Die ganze Zeit habe ich PHP als FastCGI über mod_fcgid laufen gehabt und war eigentlich auch ganz zufrieden. Auf dem jetzigem Server war ich über die Performance aber doch sehr enttäuscht. So wurden durchschnittlich nur 0,49 Requests/Sek. verarbeitet, laut ab -n1000, was meiner Ansicht nach doch etwas sehr wenig ist. Darum habe ich mich entschlossen kurzer <a href='http://www.boerngen-schmidt.de/2009/09/apache-itk-mit-mod_php-und-eingener-php-ini/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p><!--:de-->Die ganze Zeit habe ich PHP als FastCGI über mod_fcgid laufen gehabt und war eigentlich auch ganz zufrieden. Auf dem jetzigem Server war ich über die Performance aber doch sehr enttäuscht. So wurden durchschnittlich nur <strong>0,49 Requests/Sek.</strong> verarbeitet, laut <em>ab -n1000,</em> was meiner Ansicht nach doch etwas sehr wenig ist. Darum habe ich mich entschlossen kurzer Hand wieder mod_php einzusetzen und siehe da, die Requests pro Sekunde sprangen auf <strong>1,89 Requests/Sek.</strong></p>
<h3>Apache ITK</h3>
<p>Da mir aber auch an Sicherheit gelegen ist soll PHP aber nicht als www_data respektive apache laufen. Außerdem fand ich es bei PHP als FastCGI doch sehr angenehm, dass man sich seine eigene <em>php.ini </em>anlegen konnte. Mit dem ITK Patch für Apache ist es möglich einem vHost einen Benutzer und eine Gruppe zu zuweisen unter welchem Sie laufen sollen, also wird nicht erst der PHP Prozess sondern direkt der vHost, respektive der Apache Prozess, unter diesem Benutzer ausgeführt. Einen schönen einführenden Artikel zu Apache ITK hat <a href="http://blog.stuartherbert.com/php/2008/04/19/using-mpm-itk-to-secure-a-shared-server/">Stuart Herbert</a> in seinem Blog geschrieben.</p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">AssignUserID <span style="color: #00007f;">user</span> <span style="color: #00007f;">group</span></pre></div></div>

<p>Dies ist die einzige Ergänzung die im vHost gemacht werden muss um ihn einem speziellen Benutzer zu zuordnen.</p>
<p><strong>PHP mit eigener php.ini</strong></p>
<p><span style="text-decoration: line-through;">Wenn Apache ITK läuft brauch man nur noch mod_php zu aktivieren und PHP läuft nun auch unter dem angegebenem Benutzer, dennoch hat </span><em><span style="text-decoration: line-through;">mod_php</span></em><span style="text-decoration: line-through;"> die Eigenschaft eine gemeinsame </span><em><span style="text-decoration: line-through;">php.ini</span></em><span style="text-decoration: line-through;"> zu verwenden. Aber auch hierfür gibt es Abhilfe! Bei askapache.com gibt es einen netten Artikel über </span><a href="http://www.askapache.com/php/custom-phpini-tips-and-tricks.html"><span style="text-decoration: line-through;">Custom php.ini tips and tricks</span></a><span style="text-decoration: line-through;"> über den ich eine Lösung für das Problem der php.ini gefunden habe. Im vHost Container muss einfach folgende Direktive gesetzt werden:</span></p>

<div class="wp_syntax"><div class="code"><pre class="apache" style="font-family:monospace;">&lt;span style=<span style="color: #7f007f;">&quot;text-decoration: line-through;&quot;</span>&gt;PHPIniDir /path/to/php_ini/&lt;/span&gt;</pre></div></div>

<p><span style="text-decoration: line-through;">Nun wird die php.ini welche sich in diesem Verzeichnis befindet geladen.</span></p>
<p>Leider muss ich das oben geschriebene revidieren, da das Setting PHPIniDir nicht pro vHost sondern global gilt. Es scheint bis jetzt so, als wäre es nicht möglich mit mod_php für jeden vHost eine eigene php.ini festzulegen.</p>
<h3>Fazit</h3>
<p>Durch Apache ITK und einigen Einstellungen ist es möglich ein wesentlich performanteres PHP zu bekommen, dass zudem Vergleich zur FastCGI Variante auch noch mehr Features besitzt und nicht unter dem generellen Benutzers des Apache Webservers läuft.<!--:--></p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2009/09/apache-itk-mit-mod_php-und-eingener-php-ini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Der Agavi Filter VersuchPlaying with Agavi Filters</title>
		<link>http://www.boerngen-schmidt.de/2009/08/der-agavi-filter-versuch/</link>
		<comments>http://www.boerngen-schmidt.de/2009/08/der-agavi-filter-versuch/#comments</comments>
		<pubDate>Mon, 17 Aug 2009 14:58:19 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Agavi]]></category>
		<category><![CDATA[Filter]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=169</guid>
		<description><![CDATA[Die Filter von Agavi sind ein mächtiges Werkzeug, wenn man weiß wie man sie einsetzen kann. Leider weiß ich das noch nicht so genau, werde mich aber heute im laufe des Artikel Schreibens damit beschäftigen.

Grundlegend kann man bei den Filtern in Globale und Action Filter unterscheiden welche wie eine Zwiebel aufgebaut sind und sich gegenseitig nach und nach aufrufen.


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p><!--:de--><br />
<h3>Generelles zu Filtern</h3>
<p>In der kleinen AsciiArt unten kann man erkennen wie Filter funktionieren. Von links kommt das Request an die Applikation, dieses wird vom Dispatcher bearbeitet, der das Request und seine Daten durch die Globalen Filter schickt, diese leiten es dann an die entsprechende Action weiter, welche wiederum das ganz durch ihre eigenen Filter schickt. Jetzt wird erst das Output generiert und die Filter werden danach in umgekehrter Reihenfolge wieder durchlaufen.</p>
<div id="attachment_174" class="wp-caption aligncenter" style="width: 479px"><img class="size-full wp-image-174 " title="Agavi_Filter" src="http://www.boerngen-schmidt.de/wp-content/uploads/2009/08/Agavi_Filter.gif" alt="Agavi's Filters are like an Onion" width="469" height="240" /><p class="wp-caption-text">Agavi&#39;s Filter sind wie eine Zwiebel</p></div>
<p>Bei allen Filtern ist es so, dass die <strong>Auflistung die Reihenfolge der Ausführung</strong> bestimmt. Weiter unten ein kleines Beispiel dazu.</p>
<h3>Globale Filter</h3>
<p><strong>Was sind globale Filter?</strong> &#8211; Globale Filter gelten für das Request an die Applikation. Als Beispiel kann hier der FormPopulationFiler dienen. Dieser Filter ist in der Lage eine HTML mit Werten zu füllen, was aber erst gemacht werden kann, nachdem das ganze Request durchgelaufen ist und das Output generiert worden ist. Somit ist es möglich in dem Request weitere ActionContainer zu kreieren und weiter Actions auszuführen.</p>
<p>Die Konfiguration der Globalen Filter findet in der global_filter.xml im Konfigurationsverzeichnis der Applikation statt. Hierbei bestimmt die Reihenfolge in welcher sie in der Datei aufgelistet werden in welcher Reihenfolge sie ausgeführt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;FirstFilter&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;SecondFilter&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Hier würde der Filter mit dem Namen <em>FirstFilter</em> zuerst, danach dann der <em>SecondFilter</em> ausgeführt. Die Globalen Filter werden vom Controller geladen und auf gerufen. Hierbei gilt, dass der Controller explizit den Filter <em>AgaviDispatchFilter</em> registriert und ihn dann gleich danach aufruft. In diesem wird das Response gesetzt, aus dem was noch kommt.</p>
<h3>Action Filter</h3>
<p>Action Filter sind, wie der Name auch schon sagt, für die Action gedacht. Die Grafik oben verdeutlicht dieses sehr gut. Eine <em>Action</em> generiert uns ja in der passenden <em>View</em> das Output, welches vor der Ausgabe dann noch mit dem <em>FormPopulationFilter</em> bearbeitet wird.</p>
<p>Bei den Action Filtern gibt es eine Besonderheit. Zum einen gibt es die Action Filter, die für jede Action aufgerufen werden und Spezial Action Filter die nur für eine bestimmt Action aufgerufen werden. Die Spezialfilter werden im <em>app/Modulverzeichnis/config/action_filters.xml</em> spezifiziert. Die Filter die für alle Actions gelten sollen werden in <em>app/config/action_filters.xml</em> spezifiziert.<br />
Zur der Reihenfolge der Ausführung ist zu sagen, dass erst die generellen und dann die speziellen.</p>
<p>Noch etwas sehr wichtiges, dass man bei dem entwerfen eines Action Filters nicht vergessen darf, ist das jeder Slot, jede ForwardAction ihre eigene FilterChain hat, welche die Filter nochmal durchläuft. Deswegen gibt es zwei Verschiedene Methoden in der Klasse. Die eine, <strong>executeOnce</strong>, wird immer für die &#8220;main&#8221; Action auf gerufen, die andere <strong>execute</strong> wird dann in den restlichen FilterChains auf gerufen. Sollte man aber wollen, dass der Filter beim ersten bis zum letzten Aufruf immer gleich aufgerufen wird, bedient sich die Klasse <em>AgaviFilter</em> dem Trick, dass executeOnce einfach execute aufruft. ExecuteOnce muss als explizier überschrieben werden.</p>
<h3>Aufbau eines Filters</h3>
<p>Filter sollten immer die Klasse <em>AgaviFilter</em> erweitern. Dort sind schon einmal die grundlegenden Funktionen definiert wie die oben beschriebene executeOnce Methode.</p>
<p>In dem nachfolgenden Beispiel implementieren wir die Klasse FooBarFilter. Diese kann entweder wie im Beispiel ein Klasse sein die sowohl Global als aus Action Filter ist oder nur eines von beiden. (Hier ist es zu Demonstrationszwecken so gewählt)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?PHP</span>
<span style="color: #000000; font-weight: bold;">class</span> FooBarFilter <span style="color: #000000; font-weight: bold;">extends</span> AgaviFilter implements AgaviIActionFilter<span style="color: #339933;">,</span> AgaviIGlobalFilter <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeOnce<span style="color: #009900;">&#40;</span>AgaviFilterChain <span style="color: #000088;">$filterChain</span><span style="color: #339933;">,</span> AgaviExecutionContainer <span style="color: #000088;">$container</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/* Stuff to be done before the Rest of filters and Output generation is executed */</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* Now we continue with the other filters. THIS MUST BE DONE!!! */</span>
    <span style="color: #000088;">$filterChain</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$container</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* now to the Stuff which needs to be done afterwards. ie. Output transformation etc. */</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Das Beispiel oben hat zu dem nur die Methode executeOnce, was also heißt das der Filter pro Kontext nur einmal ausgeführt würde.</p>
<p>Weiter Infos zu und um Agavi gibt es auf <a title="Agavi" href="http://www.agavi.org" target="_blank">http://www.agavi.org</a>. Auch zu empfehlen ist der <a href="http://www.mivesto.de/agavi/agavi-faq.html" target="_blank">Agavi FAQ</a> in dem einige interessante Themen rund um Agavi behandelt werde.<!--:--><!--:en--><br />
<h3 style="font-size: 1.17em;">ENGLISH TRANSLATION WILL FOLLOW!</h3>
<h3 style="font-size: 1.17em;">Generelles zu Filtern</h3>
<p>In der kleinen AsciiArt unten kann man erkennen wie Filter funktionieren. Von links kommt das Request an die Applikation, dieses wird vom Dispatcher bearbeitet, der das Request und seine Daten durch die Globalen Filter schickt, diese leiten es dann an die entsprechende Action weiter, welche wiederum das ganz durch ihre eigenen Filter schickt. Jetzt wird erst das Output generiert und die Filter werden danach in umgekehrter Reihenfolge wieder durchlaufen.</p>
<div style="text-align: center;">
<dl id="attachment_174" style="display: block; margin-left: auto; margin-right: auto; text-align: center; background-color: #f3f3f3; padding-top: 4px; margin-top: 10px; margin-bottom: 10px; -webkit-border-top-right-radius: 3px 3px; -webkit-border-top-left-radius: 3px 3px; -webkit-border-bottom-left-radius: 3px 3px; -webkit-border-bottom-right-radius: 3px 3px; width: 479px; border: 1px solid #dddddd;">
<dt><img style="padding: 0px; margin: 0px; border: 0px none initial;" title="Agavi_Filter" src="http://www.boerngen-schmidt.de/wp-content/uploads/2009/08/Agavi_Filter.gif" alt="Agavi's Filters are like an Onion" width="469" height="240" /></dt>
<dd style="font-size: 11px; line-height: 17px; padding-top: 0px; padding-right: 4px; padding-bottom: 5px; padding-left: 4px; margin: 0px;">Agavi&#8217;s Filter sind wie eine Zwiebel</dd>
</dl>
</div>
<p>Bei allen Filtern ist es so, dass die <strong>Auflistung die Reihenfolge der Ausführung</strong> bestimmt. Weiter unten ein kleines Beispiel dazu.</p>
<h3 style="font-size: 1.17em;">Globale Filter</h3>
<p><strong>Was sind globale Filter?</strong> &#8211; Globale Filter gelten für das Request an die Applikation. Als Beispiel kann hier der FormPopulationFiler dienen. Dieser Filter ist in der Lage eine HTML mit Werten zu füllen, was aber erst gemacht werden kann, nachdem das ganze Request durchgelaufen ist und das Output generiert worden ist. Somit ist es möglich in dem Request weitere ActionContainer zu kreieren und weiter Actions auszuführen.</p>
<p>Die Konfiguration der Globalen Filter findet in der global_filter.xml im Konfigurationsverzeichnis der Applikation statt. Hierbei bestimmt die Reihenfolge in welcher sie in der Datei aufgelistet werden in welcher Reihenfolge sie ausgeführt werden.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;FirstFilter&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;filter</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;SecondFilter&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span></pre></div></div>

<p>Hier würde der Filter mit dem Namen <em>FirstFilter</em> zuerst, danach dann der <em>SecondFilter</em> ausgeführt. Die Globalen Filter werden vom Controller geladen und auf gerufen. Hierbei gilt, dass der Controller explizit den Filter <em>AgaviDispatchFilter</em>registriert und ihn dann gleich danach aufruft. In diesem wird das Response gesetzt, aus dem was noch kommt.</p>
<h3 style="font-size: 1.17em;">Action Filter</h3>
<p>Action Filter sind, wie der Name auch schon sagt, für die Action gedacht. Die Grafik oben verdeutlicht dieses sehr gut. Eine<em>Action</em> generiert uns ja in der passenden <em>View</em> das Output, welches vor der Ausgabe dann noch mit dem<em>FormPopulationFilter</em> bearbeitet wird.</p>
<p>Bei den Action Filtern gibt es eine Besonderheit. Zum einen gibt es die Action Filter, die für jede Action aufgerufen werden und Spezial Action Filter die nur für eine bestimmt Action aufgerufen werden. Die Spezialfilter werden im <em>app/Modulverzeichnis/config/action_filters.xml</em> spezifiziert. Die Filter die für alle Actions gelten sollen werden in<em>app/config/action_filters.xml</em> spezifiziert.<br />
Zur der Reihenfolge der Ausführung ist zu sagen, dass erst die generellen und dann die speziellen.</p>
<p>Noch etwas sehr wichtiges, dass man bei dem entwerfen eines Action Filters nicht vergessen darf, ist das jeder Slot, jede ForwardAction ihre eigene FilterChain hat, welche die Filter nochmal durchläuft. Deswegen gibt es zwei Verschiedene Methoden in der Klasse. Die eine, <strong>executeOnce</strong>, wird immer für die &#8220;main&#8221; Action auf gerufen, die andere <strong>execute</strong> wird dann in den restlichen FilterChains auf gerufen. Sollte man aber wollen, dass der Filter beim ersten bis zum letzten Aufruf immer gleich aufgerufen wird, bedient sich die Klasse <em>AgaviFilter</em> dem Trick, dass executeOnce einfach execute aufruft. ExecuteOnce muss als explizier überschrieben werden.</p>
<h3 style="font-size: 1.17em;">Aufbau eines Filters</h3>
<p>Filter sollten immer die Klasse <em>AgaviFilter</em> erweitern. Dort sind schon einmal die grundlegenden Funktionen definiert wie die oben beschriebene executeOnce Methode.</p>
<p>In dem nachfolgenden Beispiel implementieren wir die Klasse FooBarFilter. Diese kann entweder wie im Beispiel ein Klasse sein die sowohl Global als aus Action Filter ist oder nur eines von beiden. (Hier ist es zu Demonstrationszwecken so gewählt)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?PHP</span>
<span style="color: #000000; font-weight: bold;">class</span> FooBarFilter <span style="color: #000000; font-weight: bold;">extends</span> AgaviFilter implements AgaviIActionFilter<span style="color: #339933;">,</span> AgaviIGlobalFilter <span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> executeOnce<span style="color: #009900;">&#40;</span>AgaviFilterChain <span style="color: #000088;">$filterChain</span><span style="color: #339933;">,</span> AgaviExecutionContainer <span style="color: #000088;">$container</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">/* Stuff to be done before the Rest of filters and Output generation is executed */</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* Now we continue with the other filters. THIS MUST BE DONE!!! */</span>
    <span style="color: #000088;">$filterChain</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$container</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">/* now to the Stuff which needs to be done afterwards. ie. Output transformation etc. */</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>Das Beispiel oben hat zu dem nur die Methode executeOnce, was also heißt das der Filter pro Kontext nur einmal ausgeführt würde.</p>
<p>Weiter Infos zu und um Agavi gibt es auf <a title="Agavi" href="http://www.agavi.org" target="_blank">http://www.agavi.org</a>. Auch zu empfehlen ist der <a href="http://www.mivesto.de/agavi/agavi-faq.html" target="_blank">Agavi FAQ</a> in dem einige interessante Themen rund um Agavi behandelt werde.<!--:--></p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2009/08/der-agavi-filter-versuch/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thinking about SysCP-ng</title>
		<link>http://www.boerngen-schmidt.de/2009/06/thinking-about-syscp/</link>
		<comments>http://www.boerngen-schmidt.de/2009/06/thinking-about-syscp/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 15:01:35 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[syscp]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=123</guid>
		<description><![CDATA[SysCP ist ein prima Tool um einfach und schnell eine Webhostingumgebung zu managen. Besonders seine &#8220;keep it simple&#8221; Idee macht es zu dem was es ist. Leider sieht es unter der Haube etwas anders aus. Dort ist es seit einiger Zeit so, dass der Code ein Stadium erreicht hat, in dem er alles andere als <a href='http://www.boerngen-schmidt.de/2009/06/thinking-about-syscp/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p>SysCP ist ein prima Tool um einfach und schnell eine Webhostingumgebung zu managen. Besonders seine &#8220;keep it simple&#8221; Idee macht es zu dem was es ist. Leider sieht es unter der Haube etwas anders aus. Dort ist es seit einiger Zeit so, dass der Code ein Stadium erreicht hat, in dem er alles andere als simpel zu verwalten ist.</p>
<p>Darum habe ich mich entschlossen eine Fork von SysCP zu starten, der vorerst unter dem Namen SysCP-ng laufen wird. Ziel der Version 1.0 ist es die derzeitige Funktionalität von SysCP (1.4.2) nachzubauen.</p>
<p>Mal sehen was drauß wird.</p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2009/06/thinking-about-syscp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 mit neusten libxml &amp; libxslt unter OS X</title>
		<link>http://www.boerngen-schmidt.de/2008/12/php-53-mit-neusten-libxml-libxslt-unter-os-x/</link>
		<comments>http://www.boerngen-schmidt.de/2008/12/php-53-mit-neusten-libxml-libxslt-unter-os-x/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 15:08:56 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Macintosch]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=114</guid>
		<description><![CDATA[Appels OS X hat leider nur die Version 2.6.16 von libxml und 1.1.12 von libxslt von Haus aus an Bord. Ich hatte letztens das Problem, dass Agavi nicht will it diesen Verionen von libxml. Das Problem lässt sich für PHP relativ einfach lösen und zwar in dem wir uns die neusten Verionen von libxml und <a href='http://www.boerngen-schmidt.de/2008/12/php-53-mit-neusten-libxml-libxslt-unter-os-x/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p>Appels OS X hat leider nur die Version 2.6.16 von libxml und 1.1.12 von libxslt von Haus aus an Bord. Ich hatte letztens das Problem, dass Agavi nicht will it diesen Verionen von libxml.</p>
<p>Das Problem lässt sich für PHP relativ einfach lösen und zwar in dem wir uns die neusten Verionen von libxml und libxslt compilen. Zu finden sind die neusten Versionen auf dem <a href="ftp://xmlsoft.org/libxml2/" target="_blank">FTP</a> von xmlsoft. Eine gute <a href="http://jamesclarke.info/notes/libxml2/" target="_blank">Anleitung</a> hat James Clarke geschrieben. Da ich öfters gelesen habe, dass man die aktuelle Version von Leopard nicht einfach ersetzen kann, habe ich mich dazu entschieden, nach dem Compile der Programme die dynamischen Links entsprechend zu ändern.</p>
<h3>Compile von PHP 5.3</h3>
<p>Ich habe vergeblich versucht, PHP mit dem xmlreader zu compilen, aber keine Chance da anscheinend die Version der System libxml und libxslt zu alt sind. Zum Erfolg hat folgender configure command geführt.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CFLAGS</span>=<span style="color: #ff0000;">&quot;-arch x86_64 -I/usr/local/include -I/usr/local/php5/include/&quot;</span> <span style="color: #007800;">LDFLAGS</span>=<span style="color: #ff0000;">&quot;-L/usr/local/include -L/usr/local/php5/include/&quot;</span> .<span style="color: #000000; font-weight: bold;">/</span>configure  \
<span style="color: #ff0000;">'--prefix=/usr/local/php5.3'</span> \
<span style="color: #ff0000;">'--with-apxs2=/usr/sbin/apxs'</span> \
<span style="color: #ff0000;">'--with-config-file-scan-dir=/usr/local/php5.3/php.d'</span> \
<span style="color: #ff0000;">'--with-openssl=/usr'</span> \
<span style="color: #ff0000;">'--with-zlib=/usr'</span> \
<span style="color: #ff0000;">'--with-zlib-dir=/usr'</span> \
<span style="color: #ff0000;">'--with-gd'</span> \
<span style="color: #ff0000;">'--with-ldap'</span> \
<span style="color: #ff0000;">'--with-xmlrpc'</span> \
<span style="color: #ff0000;">'--enable-exif'</span> \
<span style="color: #ff0000;">'--enable-soap'</span> \
<span style="color: #ff0000;">'--enable-sqlite-utf8'</span> \
<span style="color: #ff0000;">'--enable-wddx'</span> \
<span style="color: #ff0000;">'--enable-ftp'</span> \
<span style="color: #ff0000;">'--enable-sockets'</span> \
<span style="color: #ff0000;">'--with-bz2=/usr'</span> \
<span style="color: #ff0000;">'--enable-zip'</span> \
<span style="color: #ff0000;">'--enable-pcntl'</span> \
<span style="color: #ff0000;">'--enable-shmop'</span> \
<span style="color: #ff0000;">'--enable-sysvsem'</span> \
<span style="color: #ff0000;">'--enable-sysvshm'</span> \
<span style="color: #ff0000;">'--enable-sysvmsg'</span> \
<span style="color: #ff0000;">'--enable-mbstring'</span> \
<span style="color: #ff0000;">'--enable-bcmath'</span> \
<span style="color: #ff0000;">'--enable-calendar'</span> \
<span style="color: #ff0000;">'--with-mhash=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-kerberos=/usr'</span> \
<span style="color: #ff0000;">'--with-libxml-dir=/usr/local/'</span> \
<span style="color: #ff0000;">'--with-xsl=/usr/local/'</span> \
<span style="color: #ff0000;">'--with-gettext=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-curl=shared'</span> \
<span style="color: #ff0000;">'--with-png-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-jpeg-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--enable-gd-native-ttf'</span> \
<span style="color: #ff0000;">'--with-freetype-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-mysql=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-mysqli=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-pdo-mysql=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-pgsql=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-pdo-pgsql=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-mcrypt=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-iconv'</span> \
<span style="color: #ff0000;">'--without-pear'</span> \
<span style="color: #ff0000;">'--disable-xmlreader'</span></pre></div></div>

<h3>Post Compile</h3>
<p>Wie ich schon erwähnt hatte, müssen nach dem compilieren noch die dynamischen Links geändert werden.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># Show dynamic links</span>
otool <span style="color: #660033;">-L</span> libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
<span style="color: #666666; font-style: italic;"># Change the dynamic links</span>
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxml2.2.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxml2.2.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxslt.1.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxslt.1.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libexslt.0.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libexslt.0.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so</pre></div></div>

<p>Nicht vergessen das ganze nocheinmal zu verifizieren, ob auch alles geklappt hat. So jetzt noch mit &#8220;make install&#8221; PHP installieren, Apache neustarten und testen.</p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2008/12/php-53-mit-neusten-libxml-libxslt-unter-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agavi FormPopulationFilter Tipps &amp; Tricks</title>
		<link>http://www.boerngen-schmidt.de/2008/12/agavi-fpf-tipps-und-tricks/</link>
		<comments>http://www.boerngen-schmidt.de/2008/12/agavi-fpf-tipps-und-tricks/#comments</comments>
		<pubDate>Sun, 07 Dec 2008 12:46:24 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Agavi]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=112</guid>
		<description><![CDATA[Wenn man den FormPopulationFilter (kurz FPF) des Agavi Frameworks benutzt, gibt es einige Sachen auf die man achten sollte. Keine HTML Special Charaters verwenden Warum nicht? Nun ja, ich habe mein Output auf XHTML &#38; UTF-8 eingestellt, so dass ich mit dem FPF meine Formulare dynamische ausfüllen kann. Nun ist das Problem, wenn man z.B. <a href='http://www.boerngen-schmidt.de/2008/12/agavi-fpf-tipps-und-tricks/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p>Wenn man den FormPopulationFilter (kurz FPF) des Agavi Frameworks benutzt, gibt es einige Sachen auf die man achten sollte.</p>
<h3>Keine HTML Special Charaters verwenden</h3>
<p>Warum nicht? Nun ja, ich habe mein Output auf XHTML &amp; UTF-8 eingestellt, so dass ich mit dem FPF meine Formulare dynamische ausfüllen kann. Nun ist das Problem, wenn man z.B. eine Navigation erstellt, dass man Sonderzeichen wie &#8220;&gt;&gt;&#8221; oder &#8220;&lt;&lt;&#8221; benutzen möchte für Vor und Zurück. Das Problem welches hierbei auftritt ist, dass der FPF denkt, dies seien Open- bzw. Endtags was ihn letztendlich aus der Bahn wirft und uns einer Exception beschert. Aber nicht nur diese Zeichen auch an &#8220;&amp;rarr;&#8221; verschluckt sich der FPF.</p>
<p>Deswegen ist es am besten, wenn man Sonderzeichen benutzen möchte, den numerischen Code dieser zu verwenden. Eine gut strukturierte Übersicht findet der interessierte Leser unter <a title="HTML Spechial Charater Codes" href="http://webdesign.about.com/library/bl_htmlcodes.htm" target="_blank">http://webdesign.about.com/library/bl_htmlcodes.htm</a></p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2008/12/agavi-fpf-tipps-und-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP 5.3 &amp; mySQL auf Mac OS X installieren</title>
		<link>http://www.boerngen-schmidt.de/2008/10/php-53-mysql-auf-mac-os-x-installieren/</link>
		<comments>http://www.boerngen-schmidt.de/2008/10/php-53-mysql-auf-mac-os-x-installieren/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 12:57:31 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Macintosch]]></category>
		<category><![CDATA[mySQL]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=91</guid>
		<description><![CDATA[PHP im Apache aktivieren PHP 5.2.6 wird standartmäßig mit OSX Leopard ausgeliefert. Damit der lokale Apache PHP nutzen kann muss dieses noch nachträglich in der /etc/apache2/httpd.conf aktiviert werden. Dies geschiet dadurch, dass man die # vor LoadModule php5_module libexec/apache2/libphp5.so wegnimmt. Nun noch die Konfigurationsdatei von PHP kopieren und den Apache Webserver neustarten. sudo cp /etc/php.ini.default <a href='http://www.boerngen-schmidt.de/2008/10/php-53-mysql-auf-mac-os-x-installieren/'>[...]</a>


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<h3>PHP im Apache aktivieren</h3>
<p>PHP 5.2.6 wird standartmäßig mit OSX Leopard ausgeliefert. Damit der lokale Apache PHP nutzen kann muss dieses noch nachträglich in der <strong>/etc/apache2/httpd.conf</strong> aktiviert werden. Dies geschiet dadurch, dass man die <strong>#</strong> vor <strong>LoadModule php5_module libexec/apache2/libphp5.so</strong> wegnimmt. Nun noch die Konfigurationsdatei von PHP kopieren und den Apache Webserver neustarten.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini.default <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>php.ini
<span style="color: #c20cb9; font-weight: bold;">sudo</span> apachectl restart</pre></div></div>

<h3>MySQL installieren</h3>
<p>Die Installation von MySQL gestaltet sich relativ einfach. Einfach unter <a title="MySQL Installations Dateien" href="http://dev.mysql.com/downloads/mysql/5.0.html#macosx-dmg" target="_blank">http://dev.mysql.com/downloads/mysql/5.0.html#macosx-dmg</a> das richtige Packet herunterladen, mounten, installieren und fast fertig. Ich habe mich für die x86_64 Variante entschieden, da mein Core2Dou ja ein &#8220;64bit&#8221; Prozessor ist.</p>
<p>Nach der Installation dann noch einen Doppelklick auf <strong>MySQL.prefpane </strong>um MySQL dann später bequem aus den Systemeinstellungen starten zu können.</p>
<p>Um die MySQL Installation abzuschießen kopieren wir noch die Konfigurationsdatei nach /etc.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>mysql<span style="color: #000000; font-weight: bold;">/</span>support-files<span style="color: #000000; font-weight: bold;">/</span>my-small.cnf <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>my.cnf</pre></div></div>

<p>Man kann sicherlich auch eine andere cnf wählen, aber da es sich nur um eine lokale Entwicklungsumgebung handelt, sollte die small Konfiguration ausreichen.</p>
<p>Nun ist MySQL installiert und bereit gestartet zu werden. Dies wir einfach über die Systemeinstellungen -&gt; MySQL gemacht. Wer den MySQL Server automatisch starten möchte kann dies dort durch setzen des Harkens bei Autostart erledigen.</p>
<h3>PHP 5.3 installieren</h3>
<p>Nach der MySQL Installation kann man PHP 5.2.6 mit MySQL benutzen, wem das genügt der kann hier nun aufhören zu lesen und sich ans entwicken machen.</p>
<h4>Vorbereitungen</h4>
<p>Nun gut: Here we go, bleeding edge of PHP.<br />
Zur Vorbereitung benötigen wir ein Leopard PHP Packet von entropy.ch und die <a title="Apple Xcode" href="http://developer.apple.com/tools/xcode/" target="_blank">Xcode Tools</a> von Apple. Das aktuellste entropy.ch Packet, welches ich beim schreiben des Artikels gefunden habe, ist Version 5.2.5-6-beta. Wichtig sind für uns allerdings nur die Bibliotheken des Packetes.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-s</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">local</span>
curl <span style="color: #660033;">-O</span> http:<span style="color: #000000; font-weight: bold;">//</span>www2.entropy.ch<span style="color: #000000; font-weight: bold;">/</span>download<span style="color: #000000; font-weight: bold;">/</span>php5-5.2.5-<span style="color: #000000;">6</span>-beta.tar.gz
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span> php5-<span style="color: #000000; font-weight: bold;">*</span>-beta.tar.gz</pre></div></div>

<p>Nun laden wir uns einen <a href="http://snaps.php.net/">Snapshot</a> von PHP 5.3 herunter und entpacken dann auch diesen in /usr/local und wechseln in das Verzeichnis.</p>
<h4>Compilen von PHP</h4>
<p>Kommen wir nun zum Compilen von PHP. Als erstes benötigen wir ein <em>Configure Command</em>, welches wir der einfachheit halber aus dem Entropy.ch Packet übernehmen.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>php <span style="color: #660033;">-i</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">&quot;Configure Command&quot;</span></pre></div></div>

<p>Nun müssen wir noch das richtige <strong>&#8211;prefix</strong> und <strong>&#8211;with-config-file-scan-dir</strong> setzen. (Achtung nicht die Pfade zu den Bibliotheken verändern!). Ein fertiges Configure Command könnte dann so aussehen:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">CFLAGS</span>=<span style="color: #ff0000;">&quot;-arch x86_64 -I/usr/local/php5/include/&quot;</span> <span style="color: #007800;">LDFLAGS</span>=<span style="color: #ff0000;">&quot;-L/usr/local/php5/include/&quot;</span> .<span style="color: #000000; font-weight: bold;">/</span>configure  \
<span style="color: #ff0000;">'--prefix=/usr/local/php5.3'</span> \
<span style="color: #ff0000;">'--with-apxs2=/usr/sbin/apxs'</span> \
<span style="color: #ff0000;">'--with-config-file-scan-dir=/usr/local/php5.3/php.d'</span> \
<span style="color: #ff0000;">'--with-openssl=/usr'</span> \
<span style="color: #ff0000;">'--with-zlib=/usr'</span> \
<span style="color: #ff0000;">'--with-zlib-dir=/usr'</span> \
<span style="color: #ff0000;">'--with-gd'</span> \
<span style="color: #ff0000;">'--with-ldap'</span> \
<span style="color: #ff0000;">'--with-xmlrpc'</span> \
<span style="color: #ff0000;">'--enable-exif'</span> \
<span style="color: #ff0000;">'--enable-soap'</span> \
<span style="color: #ff0000;">'--enable-sqlite-utf8'</span> \
<span style="color: #ff0000;">'--enable-wddx'</span> \
<span style="color: #ff0000;">'--enable-ftp'</span> \
<span style="color: #ff0000;">'--enable-sockets'</span> \
<span style="color: #ff0000;">'--with-bz2=/usr'</span> \
<span style="color: #ff0000;">'--enable-zip'</span> \
<span style="color: #ff0000;">'--enable-pcntl'</span> \
<span style="color: #ff0000;">'--enable-shmop'</span> \
<span style="color: #ff0000;">'--enable-sysvsem'</span> \
<span style="color: #ff0000;">'--enable-sysvshm'</span> \
<span style="color: #ff0000;">'--enable-sysvmsg'</span> \
<span style="color: #ff0000;">'--enable-mbstring'</span> \
<span style="color: #ff0000;">'--enable-bcmath'</span> \
<span style="color: #ff0000;">'--enable-calendar'</span> \
<span style="color: #ff0000;">'--with-mhash=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-kerberos=/usr'</span> \
<span style="color: #ff0000;">'--with-libxml-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-xsl=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-gettext=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-curl=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-png-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-jpeg-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--enable-gd-native-ttf'</span> \
<span style="color: #ff0000;">'--with-freetype-dir=/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-mysql=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-mysqli=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-pdo-mysql=mysqlnd'</span> \
<span style="color: #ff0000;">'--with-pgsql=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-pdo-pgsql=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-mcrypt=shared,/usr/local/php5'</span> \
<span style="color: #ff0000;">'--with-iconv'</span> \
<span style="color: #ff0000;">'--without-pear'</span></pre></div></div>

<p>Der -arch Parameter bei CFLAGS kann auch weggelassen werden, er deutet nur an für welche Architektur PHP compiled wird. Wer noch weitere Optionen für PHP aktivieren will, der kann sich mit</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">.<span style="color: #000000; font-weight: bold;">/</span>configure <span style="color: #660033;">--help</span></pre></div></div>

<p>einen Überblick über die Optionen verschaffen.</p>
<p>Nachdem der Configure Command ohne Probleme durchgelaufen ist, kommt nun ein gepflegtes</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #660033;">-j4</span></pre></div></div>

<p>und wir holen uns erstmal einen Kaffe.</p>
<h4>Post make</h4>
<p>Nachdem make durchgelaufen ist müssen wir noch etwas an den dynamischen Links von PHP ausbesseren. Um sich die dynamischen Links anzeigen zu lassen kann otool verwendet werden.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># show dynamic links</span>
otool <span style="color: #660033;">-L</span> libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
&nbsp;
<span style="color: #666666; font-style: italic;"># correct linking</span>
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxml2.2.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxml2.2.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxslt.1.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libxslt.1.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
install_name_tool <span style="color: #660033;">-change</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libexslt.0.dylib <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>libexslt.0.dylib libs<span style="color: #000000; font-weight: bold;">/</span>libphp5.so
&nbsp;
<span style="color: #666666; font-style: italic;"># backup der libphp5.so von leopard</span>
<span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>libphp5.so <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>libphp5.so.leopard
&nbsp;
<span style="color: #666666; font-style: italic;"># Installation der neuen PHP version</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #7a0874; font-weight: bold;">test</span>
<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Kopieren des neuen Apache Modules in unser Standalone Packet</span>
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>libexec<span style="color: #000000; font-weight: bold;">/</span>apache2<span style="color: #000000; font-weight: bold;">/</span>libphp5.so <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3</pre></div></div>

<h4>Abschließende Konfiguration</h4>
<p>So und fertig ist die Installation von PHP 5.3 unter Mac OS X. Einen letzter Feinschliff muss jedoch noch an der Installation durchgeführt werden. Dies aber nur schnell Stichpunkt artig.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cp</span> php.ini-recommended <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>php.ini
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3<span style="color: #000000; font-weight: bold;">/</span>php.d
<span style="color: #c20cb9; font-weight: bold;">cp</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5<span style="color: #000000; font-weight: bold;">/</span>php.d<span style="color: #000000; font-weight: bold;">/*</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3<span style="color: #000000; font-weight: bold;">/</span>php.d
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/php5/php5.3/g'</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3<span style="color: #000000; font-weight: bold;">/</span>php.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">10</span>-extension_dir.ini
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/20060613/20071006/g'</span> <span style="color: #660033;">-i</span> <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>php5.3<span style="color: #000000; font-weight: bold;">/</span>php.d<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">10</span>-extension_dir.ini
apachectl restart</pre></div></div>

<p>Um PHP nach den eigenen Wünschen zu konfigurieren einfach die entsprechenden Werte in der <strong>/usr/local/php5.3/lib/php.ini</strong> ändern.</p>
<p>Quellen:</p>
<ul>
<li><a title="Womberts Blog" href="http://blog.wombert.de/post/23017941/compiling-php-5-3-in-64-bit-on-os-x-leopard">http://blog.wombert.de/post/23017941/compiling-php-5-3-in-64-bit-on-os-x-leopard</a></li>
<li><a href="http://forge.mysql.com/wiki/PHP_PDO_MYSQLND" target="_blank">http://forge.mysql.com/wiki/PHP_PDO_MYSQLND</a></li>
</ul>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2008/10/php-53-mysql-auf-mac-os-x-installieren/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Pear unter Leopard einrichten</title>
		<link>http://www.boerngen-schmidt.de/2008/10/pear-unter-leopard-einrichten/</link>
		<comments>http://www.boerngen-schmidt.de/2008/10/pear-unter-leopard-einrichten/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 09:45:04 +0000</pubDate>
		<dc:creator>Benjamin</dc:creator>
				<category><![CDATA[Macintosch]]></category>
		<category><![CDATA[OSX]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.boerngen-schmidt.de/?p=92</guid>
		<description><![CDATA[Pear einzurichten unter Leopard gestaltet sich als relativ einfach. Eine gute Anleitung hier für hat das phpmagazin.de geschrieben. Die Installation sollte am besten als SuperUser druchgeführt werden. Um SuperUser zu werden benutzt man am besten das Command sudo -s. Keine verwandten Artikel gefunden.


Keine verwandten Artikel gefunden.]]></description>
			<content:encoded><![CDATA[<p>Pear einzurichten unter Leopard gestaltet sich als relativ einfach. Eine gute Anleitung hier für hat das <a href="http://phpmagazin.de/itr/news/psecom,id,38683,nodeid,61,_language,de.html" target="_blank">phpmagazin.de</a> geschrieben. Die Installation sollte am besten als SuperUser druchgeführt werden. Um SuperUser zu werden benutzt man am besten das Command <strong>sudo -s</strong>.</p>


<p>Keine verwandten Artikel gefunden.</p>]]></content:encoded>
			<wfw:commentRss>http://www.boerngen-schmidt.de/2008/10/pear-unter-leopard-einrichten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

