<?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/"
	>

<channel>
	<title>Einfaches CMS (Webseiten Bearbeitungsprogramm) Stuttgart, Ulm, Esslingen, Göppingen</title>
	<atom:link href="http://www.ein-einfaches-cms.de/feed" rel="self" type="application/rss+xml" />
	<link>http://www.ein-einfaches-cms.de</link>
	<description>Simploo CMS</description>
	<pubDate>Tue, 21 Dec 2010 09:55:08 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>&#8220;Die Ware Weihnacht ist nicht die wahre Weihnacht.&#8221;</title>
		<link>http://www.ein-einfaches-cms.de/die-ware-weihnacht-ist-nicht-die-wahre-weihnacht</link>
		<comments>http://www.ein-einfaches-cms.de/die-ware-weihnacht-ist-nicht-die-wahre-weihnacht#comments</comments>
		<pubDate>Tue, 21 Dec 2010 09:55:08 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Simploo CMS]]></category>

		<category><![CDATA[Grüße]]></category>

		<category><![CDATA[Neues Jahr]]></category>

		<category><![CDATA[Weihnachten]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=491</guid>
		<description><![CDATA[Im Sinne dieses Zitates von Kurt Marti (*) wünschen wir Ihnen ein besinnliches Weihnachtsfest und einen guten Rutsch ins neue Jahr.
Die Vorweihnachtszeit ist für viele eine Zeit voller Streß, Hektik und Anspannung. Im Geschäft müssen die letzten Projekte fertig gemacht werden, zuhause warten noch unzählig nicht besorgte Geschenke auf den Einkauf und der Weihnachtsbaum steht [...]]]></description>
			<content:encoded><![CDATA[<p>Im Sinne dieses Zitates von Kurt Marti (*) wünschen wir Ihnen ein besinnliches Weihnachtsfest und einen guten Rutsch ins neue Jahr.</p>
<p><span id="more-491"></span>Die Vorweihnachtszeit ist für viele eine Zeit voller Streß, Hektik und Anspannung. Im Geschäft müssen die letzten Projekte fertig gemacht werden, zuhause warten noch unzählig nicht besorgte Geschenke auf den Einkauf und der Weihnachtsbaum steht immer noch im Wald.</p>
<p>Ich hoffe Sie können diesem Streß entfliehen, denn &#8220;die Ware Weihnacht ist schließlich nicht die wahre Weihnacht&#8221;. Deshalb wünscht Ihnen das gesamte Team der Simploo GmbH ein besinnliches Weihnachtsfest und einen guten Rutsch ins neue Jahr 2011.</p>
<p>Auf diesem Weg möchten wir uns auch bei allen Kunden, Partnern, Mitarbeitern und Downloadern und Benutzern des Simploo CMS bedanken. Für das kommende Jahr haben wir bereits einige Neuerungen auf unsere Neujahrs-Wunschliste gelegt. Ich hoffe wir können diese Neuerungen auch im Jahr 2011 mit Ihnen teilen.</p>
<p><em>(*) Kurt Marti, geboren 1921, ist ein schweizer Pfarrer und Schriftsteller.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/die-ware-weihnacht-ist-nicht-die-wahre-weihnacht/feed</wfw:commentRss>
		</item>
		<item>
		<title>Hybrid ist nicht gleich hybrid - mobile Apps für iPhone und Android</title>
		<link>http://www.ein-einfaches-cms.de/hybrid-ist-nicht-gleich-hybrid-mobile-apps-fur-iphone-und-android</link>
		<comments>http://www.ein-einfaches-cms.de/hybrid-ist-nicht-gleich-hybrid-mobile-apps-fur-iphone-und-android#comments</comments>
		<pubDate>Fri, 10 Dec 2010 15:39:17 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Aus dem Web]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[Android]]></category>

		<category><![CDATA[HTML5]]></category>

		<category><![CDATA[iPhone]]></category>

		<category><![CDATA[Mobile]]></category>

		<category><![CDATA[PhoneGap]]></category>

		<category><![CDATA[Titanium]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=489</guid>
		<description><![CDATA[Unter hybriden Apps versteht man die Mischung von Webtechnologien und  nativen Technologien aus Basis von Objective-C (iOS) und Java (Android).  Damit sind sie strukturell zwischen reinen Webapps und komplett nativen  Apps einzuordnen. Doch auch im mittleren, hybriden Bereich gibt es  wichtige Unterschiede.
Der Grundsatz hybrider Apps, die Mischung von Webtechnologien und  [...]]]></description>
			<content:encoded><![CDATA[<p>Unter hybriden Apps versteht man die Mischung von Webtechnologien und  nativen Technologien aus Basis von Objective-C (iOS) und Java (Android).  Damit sind sie strukturell zwischen reinen Webapps und komplett nativen  Apps einzuordnen. Doch auch im mittleren, hybriden Bereich gibt es  wichtige Unterschiede.</p>
<p><span id="more-489"></span>Der Grundsatz hybrider Apps, die Mischung von Webtechnologien und  nativen Technologien, ist immer gegeben. Die eigentliche Entwicklung  einer hybriden App erfolgt dabei in bekannten Webtechnologien wie  Javascript, HTML und CSS. Aus diesem Code kann dabei mit verschiedenen  Programmen eine native App für die jeweilig gewünschte mobile Plattform  erstellt werden.</p>
<p>Der Vorteil liegt auf der Hand. Entwickler können  sich auf eine Entwicklung mit bekannten Webtechnologien konzentrieren  und damit verschiedenste Smartphone-Plattformen bedienen. Die <a href="http://www.app-agentur-bw.de">App-Agentur in Baden-Württemberg</a> stellen  Ihnen zwei wichtige Varianten der hybriden App-Entwicklung und deren  Vor- und Nachteile vor.</p>
<p><strong>Den ganzen Artikel lesen:</strong></p>
<ul>
<li><a href="http://www.app-agentur-bw.de/blog/hybrid-ist-nicht-gleich-hybrid-mobile-apps-fuer-iphone-und-android">Hybrid ist nicht gleich hybrid - mobile Apps für iPhone und Android</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/hybrid-ist-nicht-gleich-hybrid-mobile-apps-fur-iphone-und-android/feed</wfw:commentRss>
		</item>
		<item>
		<title>Die NoSQL-Datenbank Apache Cassandra als Alternative zu MySQL</title>
		<link>http://www.ein-einfaches-cms.de/die-nosql-datenbank-apache-cassandra-als-alternative-zu-mysql</link>
		<comments>http://www.ein-einfaches-cms.de/die-nosql-datenbank-apache-cassandra-als-alternative-zu-mysql#comments</comments>
		<pubDate>Wed, 01 Dec 2010 09:46:10 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Aus dem Web]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[Apache Cassandra]]></category>

		<category><![CDATA[Facebook]]></category>

		<category><![CDATA[Key Value Store]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[NoSQL]]></category>

		<category><![CDATA[Twitter]]></category>

		<category><![CDATA[Wide Columm Store]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=478</guid>
		<description><![CDATA[Für einen Großteil der PHP-Webentwickler ist MySQL als Datenspeicherung die erste Wahl. Nahezu alle Provider unterstützen das relationale Datenbanksystem, es gibt gut funktionierende Verwaltungsoberflächen und der Zugriff, sowie die Funktionsweise ist einfach und klar verständlich.
Derzeit allerdings tingelt der NoSQL-Begriff als neuer Trend durch die Medienszene
NoSQL, steht dabei für &#8220;not only SQL&#8221;. Wie bei vielen Buzzwords stellt [...]]]></description>
			<content:encoded><![CDATA[<p>Für einen Großteil der PHP-Webentwickler ist MySQL als Datenspeicherung die erste Wahl. Nahezu alle Provider unterstützen das relationale Datenbanksystem, es gibt gut funktionierende Verwaltungsoberflächen und der Zugriff, sowie die Funktionsweise ist einfach und klar verständlich.</p>
<p><strong>Derzeit allerdings tingelt der NoSQL-Begriff als neuer Trend durch die Medienszene</strong><br />
NoSQL, steht dabei für &#8220;not only SQL&#8221;. Wie bei vielen Buzzwords stellt auch dieses Wortspiel einen Oberbegriff für eine Vielzahl unterschiedlicher Technologien und Produkte dar. <a href="http://www.drweb.de/magazin/author/dieter-petereit/">Dieter Petereit</a> bringt in seinem Artikel bei <a href="http://www.drweb.de ">drweb.de</a> Klarheit in die Begrifflichkeiten und stellt die NoSQL-Datenbank <a href="http://cassandra.apache.org/">Apache Cassandra</a> näher vor.</p>
<p><span id="more-478"></span></p>
<p>Dabei führt der Artikel mit einem Überblick über die NoSQL-Technologien (Key Value Store, Document Store, Graph Databases, Wide Column Store) in die Thematik ein, ehe nach einem kurzen Exkurs zur Skalierbarkeit von NoSQL-Systemen ein näherer Blick auf das Projekt Apache Cassandra geworfen wird.</p>
<p>Apache Cassandra wurde übrigens ursprünglich von<a href="http://www.facebook.com/note.php?note_id=24413138919"> Facebook</a> entwickelt und ist dort in einem Cluster von über 150 Rechnern (einzig und allein) für die  Suchfunktion in den Inboxes zuständig. Inzwischen ist Cassandra ein Top-Level Projekt der Apache Foundation und wird unter anderem auch von der in den USA so erfolgreichen Social-Bookmark-Site <a href="http://about.digg.com/node/564">digg.com</a> eingesetzt. Die allseits bekannte <a href="http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king">Twitter-Plattform</a> ist derzeit ebenfalls dabei, auf die NoSQL-Technologie zu migrieren.</p>
<p>Ein lesenswerter und interessanter Artikel von Dieter Petereit:</p>
<ul>
<li><strong><a href="http://www.drweb.de/magazin/apache-cassandra-was-kann-die-nosql-datenbank/">Apache Cassandra - Was kann die NoSQL-Datenbank?</a></strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/die-nosql-datenbank-apache-cassandra-als-alternative-zu-mysql/feed</wfw:commentRss>
		</item>
		<item>
		<title>Das Dilemma mit den Fans auf Facebook-Fanpages-Apps</title>
		<link>http://www.ein-einfaches-cms.de/simploo-facebook-fanpages-apps-oauth</link>
		<comments>http://www.ein-einfaches-cms.de/simploo-facebook-fanpages-apps-oauth#comments</comments>
		<pubDate>Thu, 04 Nov 2010 08:52:05 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Aus dem Web]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Simploo CMS]]></category>

		<category><![CDATA[App]]></category>

		<category><![CDATA[Faebook]]></category>

		<category><![CDATA[Fanpage]]></category>

		<category><![CDATA[is_fan]]></category>

		<category><![CDATA[OAuth]]></category>

		<category><![CDATA[signed_request]]></category>

		<category><![CDATA[user_id]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=466</guid>
		<description><![CDATA[Fanpages bei Facebook werden bei Unternehmen immer beliebter, doch ohne eine sinnvoll geplante Interaktion und Kommunikation bleibt die gewünschte Viralität aus. Es sein denn man hat einen so aussage- und imagekräftigen Markennamen, dass die Facebook-Benutzer alleine ihre Zugehörigkeit zur Marke  zum Ausdruck bringen möchten - für viele kleinere Unternehmen allerdings eine utopische Vision. Deshalb sollen [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ein-einfaches-cms.de/wp-content/uploads/2010/11/b_1234209334_facebook_logo2.jpg"><img class="alignright size-full wp-image-476" title="b_1234209334_facebook_logo2" src="http://www.ein-einfaches-cms.de/wp-content/uploads/2010/11/b_1234209334_facebook_logo2.jpg" alt="b_1234209334_facebook_logo2" width="200" height="66" /></a>Fanpages bei Facebook werden bei Unternehmen immer beliebter, doch ohne eine sinnvoll geplante Interaktion und Kommunikation bleibt die gewünschte Viralität aus. Es sein denn man hat einen so aussage- und imagekräftigen Markennamen, dass die Facebook-Benutzer alleine ihre Zugehörigkeit zur Marke  zum Ausdruck bringen möchten - für viele kleinere Unternehmen allerdings eine utopische Vision. Deshalb sollen vermehrt interaktive Angebote auf den Fanpages für mehr Zuspruch sorgen, die Möglichkeit Facebook Apps innerhalb eines Reiters (Tab) auf der Fanpage zu integrieren scheint der perfekte Weg. Doch dieser Weg hat Tücken.</p>
<p><span id="more-466"></span>Um das Fazit vorneweg zu nehmen: Komplexe Applikationen mit Interaktionen mit den Besuchern sind innerhalb Fanpage-Tabs schlichtweg unmöglich. Eine Alternative ist den Tab-Inhalt lediglich als Teaser zu nutzen, um dort mit einem Hinweis auf die eigentliche Applikation zu verlinken. Der offensichtliche Nachteil: Die Besucher sind ersteinmal weg von der Fanpage.</p>
<p><strong>Ein praktisches Beispiel mit dem Simploo CMS</strong><br />
In einem praktischen Beispiel mussten wir mit dem Simploo CMS ein Facebook-Voting erstellen und in eine Fanpage integrieren. Der Ansatz um Applikation und Fanpage optimal miteinander zu vernetzen war folgender:</p>
<ol style="margin-left:25px">
<li>Öffentlich beworben wird nicht die Applikation, sondern die Fanpage. Einstiegsseite auf der Fanpage ist der Voting-Tab</li>
<li>Innerhalb des Votings-Tabs wird eine Übersicht des bisher abgelaufenen Votings (Zwischenstand) und weitere Informationen dargestellt.</li>
<li>Die Buttons zum Voten sind inaktiv und erst als Fan der Fanpage (Hinweis auf &#8220;Gefällt mir&#8221;-Button) nutzbar.</li>
<li>Mit Klick auf einen Voting-Button wird der Besucher auf die Applikation weitergeleitet. Nach den Facebook-Sicherheitsabfragen wird das Voting in der Applikations-Datenbank (Simploo CMS)  abgespeichert, ein entsprechender Feed für den Benutzer veröffentlicht und nach einer abschließenden Meldung wieder auf den Tab zurückverwiesen</li>
<li>Dort wird der entsprechende Eintrag des Benutzers (auch für spätere Besuche) entsprechend markiert.</li>
<li>Kommt ein Benutzer ohne direktes Klicken eines Buttons innerhalb des Votings-Tabs auf die eigentliche Applikation, wird dort lediglich eine Einstiegsseite mit Verlinkung zurück auf den Fanpage-Voting-Tab dargestellt.</li>
</ol>
<p>Mit diesem Ansatz dachten wir die perfekte Integration erarbeitet zu haben. Doch das Ganze hatte einen kleinen Haken, der erst beim Durchstöbern der Dokumentation und der Foren sichtbar wurde. Für Entwickler lauern vor allem bei der Dokumentation zu Tab-Applikationen viele Hürden: Es lässt sich nur schwer herausfinden, welche Aktionen, Funktionen oder FBML-Tags innherhalb einer Tab-Applikation nun verfügbar sind. Zumal ändert derzeit Facebook seine Strategie für Developer. Diese wird in Zukunft wohl auf reine IFrame-Unterstützung innerhalb Tabs, sowie der Authentifizierung per OAuth 2.0 abzielen.</p>
<p><strong>Mit oder ohne OAuth 2.0?</strong><br />
Ohne die Aktivierung des künftig empfohlenen  OAuth 2.0 Standards, stehen den Entwicklern innerhalb einer Tab-Applikation die bekannten &#8220;fb_sig&#8221;-POST-Paremeter zur Verfügung. Die oben aufgeführten Punkte 3 und 5 könnten damit relativ leicht über die Parameter</p>
<ul>
<li><strong>$_POST['fb_sig_is_fan']</strong> und</li>
<li><strong>$_POST['fb_sig_user']</strong></li>
</ul>
<p>realisiert werden. Um allerdings für die Zukunft gewappnet zu sein, stellten wir die Authorisierung innerhalb der Applikation auf das OAuth 2.0 Protokoll um - mit der Konsequenz die kompletten &#8220;fb_sig&#8221;-Parameter zu verlieren. Innerhalb einer Tab-Applikation haben Entwickler nur noch Zugriff auf den<strong> &#8220;signed_request&#8221;-Parameter</strong>, der mit folgender PHP-API-Funktion entschlüsselt werden kann:</p>
<ul>
<li><strong>$facebook-&gt;getSignedRequest(); </strong></li>
</ul>
<p>Als Rückgabewert enthält man folgende Werte:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">6</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;algorithm&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">11</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;HMAC-SHA256&quot;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;expires&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1288864800</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;issued_at&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> int<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1288859489</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;oauth_token&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">99</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;TOKEN_STRING&quot;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;profile_id&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;XXXXX&quot;</span>
<span style="color: #009900;">&#91;</span><span style="color: #0000ff;">&quot;user_id&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">12</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;XXXXX&quot;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Zumindest meint man, damit zumindest auf die ID des Besuchers (user_id) zugreifen zu können - doch diese ist die gleiche wie die ID der Fanseite (profile_id). Und nach allem was man so liest, scheint Facebook den Zugriff auf die Benutzer-Id innerhalb von Fanpages auch nicht mehr zu erlauben. Auch die simple Abfragemöglichkeit, ob der Besucher bereits Fan der Seite ist oder nicht, wurde von Facebook deaktiviert. Da die OAuth-Unterstützung derzeit noch in der Beta-Phase ist, könnte sich hoffentlich zumindest in diesem Bereich noch etwas tun.</p>
<p><strong>Es bleibt also beim ganz zu Beginn beschriebenen Fazit: Fanpage-Tabs sollten lediglich als Teaser mit minimaler Funktionalität genutzt werden, alles weitere gehört aus Entwickler- und Fanpage-Betreiber-Sicht leider in die Applikation.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/simploo-facebook-fanpages-apps-oauth/feed</wfw:commentRss>
		</item>
		<item>
		<title>Simploo unterstützt bundesweiten Selbsthilfe-Verein</title>
		<link>http://www.ein-einfaches-cms.de/simploo-unterstutzt-bundesweiten-selbsthilfe-verein</link>
		<comments>http://www.ein-einfaches-cms.de/simploo-unterstutzt-bundesweiten-selbsthilfe-verein#comments</comments>
		<pubDate>Fri, 22 Oct 2010 11:09:58 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Simploo CMS]]></category>

		<category><![CDATA[Charity]]></category>

		<category><![CDATA[Mutismus]]></category>

		<category><![CDATA[Relaunch]]></category>

		<category><![CDATA[Umkreissuche]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=458</guid>
		<description><![CDATA[Für viele dürfte der Mutismus nahezu unbekannt sein, ist er doch eine eher seltene und teilweise schwer zu diagnostizierende Kommunikationsstörung. Die Mutismus Selbsthilfe Deutschland e.V. in Köln hat sich dieser Thematik angenommen und versucht mit dem Online-Portal unter www.mutismus.de Informationslücken zu schließen und therapeutische Hilfe zu vermitteln.

Doch der umfangreiche Internetauftritt mitsamt Online-Forum der Selbsthilfe war [...]]]></description>
			<content:encoded><![CDATA[<p>Für viele dürfte der Mutismus nahezu unbekannt sein, ist er doch eine eher seltene und teilweise schwer zu diagnostizierende Kommunikationsstörung. Die Mutismus Selbsthilfe Deutschland e.V. in Köln hat sich dieser Thematik angenommen und versucht mit dem Online-Portal unter www.mutismus.de Informationslücken zu schließen und therapeutische Hilfe zu vermitteln.</p>
<p><span id="more-458"></span><br />
Doch der umfangreiche Internetauftritt mitsamt Online-Forum der Selbsthilfe war inzwischen in die Jahre gekommen und nur noch schlecht pflegbar. Der Verein nahm deshalb das Angebot der süddeutschen Software-Schmiede Simploo GmbH dankbar an. Diese erklärte sich bereit den Verein beim umfangreichen Relaunch des Online-Portals im Rahmen eines Charity-Projektes zu unterstützen.</p>
<p>Zusammen mit Dr. Boris Hartmann, europaweit ein gefragter Experte zum Thema Mutismus, analysierte das IT-Unternehmen die bestehenden Strukturen und konzipierte den neuen Online-Auftritt. Um die zukünftige Pflege für den Verein zu erleichtern, wurde das selbstentwickelte Redaktionssystem Simploo CMS eingesetzt, mit dem die Vereinsmitglieder den Auftritt nun einfach und im Browser direkt auf der jeweiligen Inhaltsseite bearbeiten können.</p>
<p>Die neue Webseite basiert auf dem Simploo CMS 1.7.0, für das die gleichnamige Simploo GmbH auch gleich ein paar neue Module entwickelt hat. Die bestehenden Listen zu einem Therapeuten- und Elternnetzwerk konnte so problemlos mit einer fehlertoleranten Umkreissuche ergänzt werden.</p>
<p>„Die neuen Seiten sind nun sehr übersichtlich gestaltet, und mit dem Simploo CMS können wir diese auch jederzeit aktuell halten“, so Michael Lange, Bundesvorsitzender der Mutismus Selbsthilfe Deutschland e.V., der als Gründer der ersten deutschsprachigen Mutismus-Website für den Bereich Medien zuständig ist.</p>
<p>Eine perfekte Plattform also, um über den Mutismus zu informieren. Denn betroffene Personen leiden an einer Störung, die ihnen eine normale Kommunikation teilweise unmöglich macht: Sie sprechen nicht, obwohl keine Defekte der Sprechorgane oder des Gehörs vorliegen. So leben mutistische Personen teilweise über Jahre hinweg in sozialer Isolation und können nur durch therapeutische Hilfe zurück in ein normales Leben finden. Hilfe, die die neue Online-Plattform bieten und vermitteln kann.</p>
<p>Weitere Informationen:</p>
<ul>
<li><a href="http://www.mutismus.de" target="_blank">www.mutismus.de</a></li>
<li><a href="www.simploo.de" target="_blank">www.simploo.de</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/simploo-unterstutzt-bundesweiten-selbsthilfe-verein/feed</wfw:commentRss>
		</item>
		<item>
		<title>Speicherlimit bei PHP gdlib, imagecreate und memory_limit</title>
		<link>http://www.ein-einfaches-cms.de/speicherlimit-bei-php-gdlib-imagecreate-und-memory_limit</link>
		<comments>http://www.ein-einfaches-cms.de/speicherlimit-bei-php-gdlib-imagecreate-und-memory_limit#comments</comments>
		<pubDate>Thu, 15 Jul 2010 09:07:07 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Fatal Error]]></category>

		<category><![CDATA[fehler]]></category>

		<category><![CDATA[gblib]]></category>

		<category><![CDATA[imagecreate]]></category>

		<category><![CDATA[memory_limit]]></category>

		<category><![CDATA[Out of memory]]></category>

		<category><![CDATA[Speicherlimit]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=443</guid>
		<description><![CDATA[Oftmals wundert man sich über den hohen Speicherverbrauch bei den Grafikfunktion der GD Library in PHP. Da lädt man Bilder mit einer relativ geringen Dateigröße über ein Formular hoch, möchte daraus ein Thumbnail erstellen und bekommt dennoch einen Fatal Error mit der Meldung &#8220;Out of memory (allocated&#8230;&#8221; geworfen. Und das obwohl man schon auf eine [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ein-einfaches-cms.de/wp-content/uploads/2010/07/php-big.gif"><img class="alignright size-full wp-image-450" title="php-big" src="http://www.ein-einfaches-cms.de/wp-content/uploads/2010/07/php-big.gif" alt="php-big" width="175" height="94" /></a>Oftmals wundert man sich über den hohen Speicherverbrauch bei den Grafikfunktion der GD Library in PHP. Da lädt man Bilder mit einer relativ geringen Dateigröße über ein Formular hoch, möchte daraus ein Thumbnail erstellen und bekommt dennoch einen Fatal Error mit der Meldung &#8220;Out of memory (allocated&#8230;&#8221; geworfen. Und das obwohl man schon auf eine kleine Dateigröße geachtet hat. Doch die Dateigröße hat nur bedingt etwas mit dem Speicherverbrauch der Grafikfunktionen zu tun und schon ein Bild mit lediglich 12 Kbyte kann das Speicherlimit sprengen.<br />
<span id="more-443"></span><br />
Zumeist trifft uns diese Fehlermeldung beim Einlesen von Bildern über beispielsweise <a href="http://de2.php.net/manual/de/function.imagecreatefromjpeg.php">imagecreatefromjpeg()</a>. Wenn man sich die Funktionsweise dieses Einlesens ein wenig genauer betrachtet, kann man sich den teilweise utopisch wirkenden Speicherverbrauch relativ einfach erklären.</p>
<p>Nehmen wir beispielsweise ein weißes Bild mit der Abmessung von 1024&#215;1024 Pixel als normales JPEG abgespeichert. Die Dateigröße dürfte danach, je nach Kompression, um die 12 KByte haben. Beim Einlesen dieses Bildes in einem PHP-Skript über <a href="http://de2.php.net/manual/de/function.imagecreatefromjpeg.php">imagecreatefromjpeg()</a> könnte man ohne Hintergrundwissen einen Speicherverbrauch von vielleicht maximal 400-500 KByte vermuten.</p>
<p>Doch das Einlesen belastet den Server mit fast genau 5 Mbyte. Eine Menge (Speicher)Holz, das sich aber schnell erklären lässt. Denn PHP speichert die Bilder im Hintergrund unkomprimiert, das bedeutet mit 40Bit Farbinformationen pro Pixel. Rechnen wir also einmal nach:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #cc66cc;">1024</span> x <span style="color: #cc66cc;">1024</span> x <span style="color: #cc66cc;">40</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">41943040</span> Bit
&nbsp;
<span style="color: #cc66cc;">41943040</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">8</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">1024</span> <span style="color: #66cc66;">/</span> <span style="color: #cc66cc;">1024</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">5</span> MByte</pre></div></div>

<p>Ähnlich speichern übrigens Programme wie Photoshop ihre Dateien im Rohzustand ab. Damit ist eine schnellere und bessere Verarbeitung als mit komprimierten Dateien möglich. Es reicht beim Webupload also nicht, Bilder auf die Dateigröße zu überprüfen. Wichtiger für die spätere Bearbeitung ist die Bildgröße in Pixel, die über <a href="http://php.net/manual/de/function.getimagesize.php">getimagesize()</a> ausgelesen werden kann.</p>
<p>Sollten beim Weiterverarbeiten der Bilder in PHP zudem mehrere Schritte und eventuell Zusatzbilder (z.B. für Wasserzeichen) notwendig sein, so sollte man auch darauf achten, diese Ressourcen auch wieder entsprechend freizugeben: <a href="http://de2.php.net/manual/de/function.imagedestroy.php">imagedestroy()</a> ist da die Funktion der Wahl.</p>
<p>Einen weiteren interessanten Artikel darüber, der auch auf die Funktionen <a href="http://de.php.net/manual/de/function.imagecreate.php">imagecreate</a> und <a href="http://de.php.net/manual/de/function.imagecreatetruecolor.php">imagecreatetruecolor</a> eingeht, finden Sie unter:<br />
<a href="http://www.cix-blog.de/PHP-GDlib-und-der-Speicherbedarf-169-2008.html">www.cix-blog.de/PHP-GDlib-und-der-Speicherbedarf-169-2008.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/speicherlimit-bei-php-gdlib-imagecreate-und-memory_limit/feed</wfw:commentRss>
		</item>
		<item>
		<title>Mehrere PHP-Versionen parallel auf einem Entwicklungsserver</title>
		<link>http://www.ein-einfaches-cms.de/mehrere-php-versionen-parallel-auf-einem-entwicklungsserver</link>
		<comments>http://www.ein-einfaches-cms.de/mehrere-php-versionen-parallel-auf-einem-entwicklungsserver#comments</comments>
		<pubDate>Thu, 01 Jul 2010 13:18:23 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Keine Kategorie]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[Apache]]></category>

		<category><![CDATA[CGi]]></category>

		<category><![CDATA[DNS]]></category>

		<category><![CDATA[Entwicklungsserver]]></category>

		<category><![CDATA[mehrere PHP-Versionen]]></category>

		<category><![CDATA[Modul]]></category>

		<category><![CDATA[parallel]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=425</guid>
		<description><![CDATA[Der Wunsch ist fast so alt wie die PHP-Entwicklung an sich: Selbst geschriebene PHP-Software automatisch und komfortabel für mehrere PHP-Versionen testen zu können. Oder gar auf gleichen Versionen, mit allerdings unterschiedlich installierten Modulen. Prinzipiell gibt es mehrere Möglichkeiten. Eine Alternative wären entsprechend unterschiedliche virtuelle Maschinen mit den gewünschten Systemvoraussetzungen aufzusetzen. Damit ist man natürlich recht [...]]]></description>
			<content:encoded><![CDATA[<p>Der Wunsch ist fast so alt wie die PHP-Entwicklung an sich: Selbst geschriebene PHP-Software automatisch und komfortabel für mehrere PHP-Versionen testen zu können. Oder gar auf gleichen Versionen, mit allerdings unterschiedlich installierten Modulen. Prinzipiell gibt es mehrere Möglichkeiten. Eine Alternative wären entsprechend unterschiedliche virtuelle Maschinen mit den gewünschten Systemvoraussetzungen aufzusetzen. Damit ist man natürlich recht flexibel - auch was den Betriebssystem-Unterbau angeht. Allerdings ist diese Vorgehensweise nicht gerade die einfachste und schnellste Möglichkeit. Daher stellen wir in diesem Artikel eine andere &#8220;leichtgewichtigte&#8221; Lösung vor.<br />
<span id="more-425"></span><br />
Unsere Anforderung, ist ein Webserver auf dem verschiedene PHP-Versionen parallel laufen. Das zu testende Programm muss dabei lediglich in einen Ordner gespielt werden, der Aufruf auf die verschiedenen PHP-Versionen erfolgt per URL, z.B.</p>
<ul>
<li>http://php6.testserver.intra</li>
<li>http://php5.testserver.intra</li>
<li>http://php43.testserver.intra</li>
</ul>
<p>Als Voraussetzungen dafür benötigen wir einen Linux-Server (mit Microsoft-Mitteln geht das sicherlich auch irgendwie), einen Webserver, einen DNS-Server und die entsprechenden PHP-Versionen. Alle folgenden Programme können wir uns über die Paketverwaltung per &#8220;apt-get install&#8221; installieren. In Klammer die zu installierenden Paketnamen.</p>
<ul>
<li>für den Linux-Server verwenden wir im Beispiel <strong>Debian Etch</strong></li>
<li>als Webserver den <strong>Apache 2</strong> in der aktuellsten Version  (&#8221;apache2&#8243;)</li>
<li>für den DNS-Server installieren wir uns <strong>BIND </strong>(&#8221;bind9&#8243;)</li>
<li>als <strong>Standard-PHP-Modul</strong> für den Apache holen wir uns das jeweilig aktuelle Paket (z.B. &#8220;php5&#8243; und &#8220;libapache2-mod-php5&#8243;)</li>
</ul>
<p>Die grundlegende Installation der obigen Anwendungen werden wir nur ganz grob streichen, darüber dürfte es im Netz bereits genügend Informationen geben. Die Installation aller genannten Anwendungen über die Paketverwaltung dürfte im ersten Schritt allerdings kein größeres Problem darstellen. Nach der erfolgreichen Installationsprozedur müsste beim Aufruf des Servers über die IP oder Hostname im Browser eine entsprechende Standard-Seite des Apache Webservers erscheinen. Mit der Erstellung eines&#8221;phpinfo()&#8221;-Skriptes prüfen wir, ob das PHP-Modul korrekt läuft. Danach steht uns der Konfiguration der einzelnen Systeme nichts mehr im Wege.</p>
<p><strong>1. Apache Webserver</strong><br />
Unseren Häuptling konfigurieren wir für virtuelle Hosts, um über verschiedene Subdomains auf unser zu testendes PHP-Programm zugreifen zu können. Erstellen wir uns - wenn nicht schon vorhanden - eine Datei names &#8220;default&#8221; im Verzeichnis &#8220;/etc/apache2/sites-available&#8221; mit folgendem Inhalt</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">NameVirtualHost <span style="color: #339933;">*</span>
<span style="color: #339933;">&lt;</span>VirtualHost <span style="color: #339933;">*&gt;</span>
  DocumentRot <span style="color: #0000ff;">&quot;/var/www/test&quot;</span>
  ServerName www<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra
  ServerAlias php5<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra
<span style="color: #339933;">&lt;/</span>VirtualHost<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Den DocumentRoot und den ServerName können wir natürlich entsprechend beliebig anpassen. Diesen virtuellen Standard-Host aktivieren wir im Verzeichnis &#8220;/etc/apache2/sites-enabled&#8221; dann mit dem Befehl für einen symbolischen Link &#8220;ln -s default ../sites/available/default&#8221;. Mit einem Neustart des Webservers, bzw. einem Neuladen der Konfigurationsdateien (&#8221;/etc/init.t/apache2 force-reload&#8221;) sollten wir beim Aufruf über den Browser den Inhalt des neuen DocumentRoots angezeigt bekommen.</p>
<p>Gleichzeitig legen wir uns testweise schon einmal für die PHP-Version 4.3 einen virtuellen Hosteintrag an. Also gleiches Prinzip wie oben, eine Datei mit dem Namen &#8220;php43&#8243; in &#8220;/etc/apache2/sites-availabe&#8221; mit folgendem Inhalt</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>VirtualHost <span style="color: #339933;">*&gt;</span>
  DocumentRot <span style="color: #0000ff;">&quot;/var/www/test&quot;</span>
  ServerName www<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra
  ServerAlias php43<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra
  <span style="color: #339933;">&lt;</span>Directory <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>test<span style="color: #339933;">&gt;</span>
    AddHandler php43<span style="color: #339933;">-</span>cgi <span style="color: #339933;">.</span>php
  <span style="color: #339933;">&lt;/</span>Directory<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>VirtualHost<span style="color: #339933;">&gt;</span></pre></div></div>

<p>Die erste Zeile aus der default-Konfigurationsdatei dürfen wir nur einmal vergeben. Ansonsten teilen wir dem Apache mit, dass er bei Aufruf der Seite unter der URL &#8220;http://php43.testserver.intra&#8221; PHP in der Version 4.3 als CGI-Version aufrufen soll. Die Aktivierung dieses Hosts erfolgt parallel zum default-Eintrag. Die entsprechende Einrichtung von PHP 4.3 als CGI-Version erfolgt in einem späteren Schritt.</p>
<p><strong>2. DNS-Server konfigurieren</strong><br />
Sollte das ganze intern und ohne eine &#8220;gültige&#8221; Domain erfolgen (wie im obigen Beispiel) müssen wir natürlich noch unseren eigenen DNS-Server entsprechend einrichten. Im Verzeichnis &#8220;/etc/bind&#8221; legen wir uns eine Datei namens &#8220;db.testserver.intra&#8221; mit folgendem Inhalt an</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$TTL</span>    <span style="color: #cc66cc;">607800</span>
<span style="color: #339933;">@</span>     IN   SOA   ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #339933;">.</span> root<span style="color: #339933;">.</span>ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #009900;">&#40;</span>
<span style="color: #cc66cc;">1</span> <span style="color: #339933;">;</span>Serial
<span style="color: #cc66cc;">604800</span> <span style="color: #339933;">;</span>Refresh
<span style="color: #cc66cc;">86400</span> <span style="color: #339933;">;</span>Retry
<span style="color: #cc66cc;">2419200</span> <span style="color: #339933;">;</span>Expire
<span style="color: #cc66cc;">604800</span> <span style="color: #339933;">;</span>Negative Cache TTL
<span style="color: #009900;">&#41;</span>
       IN  NS     ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #339933;">.</span>
ns     IN  A      192<span style="color: #339933;">.</span>168<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1
www    IN  CNAME  ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #339933;">.</span>
php5   IN  CNAME  ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #339933;">.</span>
php43  IN  CNAME  ns<span style="color: #339933;">.</span>testserver<span style="color: #339933;">.</span>intra<span style="color: #339933;">.</span></pre></div></div>

<p>Das ganze könnte man natürlich auch per Wildcards lösen, dazu - und auch zu den anderen Optionen - lesen Sie bitte die entsprechenden Dokumentation im Internet. Mit einem Restart des DNS-Servers &#8220;/etc/init.d/bind9 restart&#8221; müsste unser Testserver unter den oben eingetragenen URLs erreichbar sein - vorausgesetzt Sie haben natürlich die IP des Testservers (hier 192.168.0.1) auf Ihrem lokalen Rechner als (alternativen) DNS-Server in den Netzwerkeinstellungen eingetragen.</p>
<p><strong>3. Weitere PHP-Versionen hinzufügen</strong><br />
Als Standard-PHP-Version läuft in unserem Beispiel bereits PHP5 als Apache-Modul. Weitere PHP-Versionen müssen wir als CGI-Variante einbinden - Sie erinnern sich an die Apache-Einstellungen? Laden wir uns auf dem Linux-Server also testweise mal in irgendweinem Temp- oder Home-Verzeichnis PHP 4.3 herunter und entpacken es:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">wget http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//museum.php.net/php4/php-4.3.0.tar.gz</span>
tar xzfv php<span style="color: #339933;">-</span>4<span style="color: #339933;">.</span>3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>tar<span style="color: #339933;">.</span>gz</pre></div></div>

<p>Die entsprechenden Download-Pfade erhalten Sie unter <a href="http://www.php.net/downloads.php">www.php.net</a>. Gehen nach dem Entpacken in das entsprechende Verzeichnis und kompilieren und installieren Sie die Version per klassischem Dreisatz &#8220;configure, make und make install&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">./</span>configure <span style="color: #339933;">--</span>prefix<span style="color: #339933;">=/</span>usr<span style="color: #339933;">/</span>share<span style="color: #339933;">/</span>php43\
 <span style="color: #339933;">--</span>datadir<span style="color: #339933;">=/</span>usr<span style="color: #339933;">/</span>share<span style="color: #339933;">/</span>php43\
 <span style="color: #339933;">--</span>mandir<span style="color: #339933;">=/</span>usr<span style="color: #339933;">/</span>share<span style="color: #339933;">/</span>man\
 <span style="color: #339933;">--</span>bindir<span style="color: #339933;">=/</span>usr<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>php43\
 <span style="color: #339933;">--</span>includedir<span style="color: #339933;">=/</span>usr<span style="color: #339933;">/</span><span style="color: #b1b100;">include</span>\
 <span style="color: #339933;">--</span>sysconfdir<span style="color: #339933;">=/</span>etc<span style="color: #339933;">/</span>php43<span style="color: #339933;">/</span>apache2\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>config<span style="color: #339933;">-</span>file<span style="color: #339933;">-</span>path<span style="color: #339933;">=/</span>etc<span style="color: #339933;">/</span>php43<span style="color: #339933;">/</span>apache2\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>config<span style="color: #339933;">-</span>file<span style="color: #339933;">-</span>scan<span style="color: #339933;">-</span><span style="color: #990000;">dir</span><span style="color: #339933;">=/</span>etc<span style="color: #339933;">/</span>php43<span style="color: #339933;">/</span>conf<span style="color: #339933;">.</span>d\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>libxml\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>session\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>xml\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>simplexml\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>filter\
 <span style="color: #339933;">--</span>disable<span style="color: #339933;">-</span>debug\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>inline<span style="color: #339933;">-</span>optimization\
 <span style="color: #339933;">--</span>disable<span style="color: #339933;">-</span>rpath\
 <span style="color: #339933;">--</span>disable<span style="color: #339933;">-</span><span style="color: #990000;">static</span>\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>shared\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>pic\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span><span style="color: #990000;">mysql</span>\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>pdo<span style="color: #339933;">-</span><span style="color: #990000;">mysql</span>\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>gnu<span style="color: #339933;">-</span>ld\
 <span style="color: #339933;">--</span>enable<span style="color: #339933;">-</span>pdo\
 <span style="color: #339933;">--</span>with<span style="color: #339933;">-</span>gnu<span style="color: #339933;">-</span>ld
&nbsp;
<span style="color: #339933;">./</span>make
&nbsp;
<span style="color: #339933;">./</span>make install</pre></div></div>

<p>Die Konfigurationseinstellungen können Sie natürlich entsprechend anpassen und die gewünschten PHP-Module einbinden. Beachten Sie aber bitte die Pfadangabe mit dem Ordner &#8220;php43&#8243; bei anderen Versionen entsprechend abzuändern. Eventuell müssen Sie nach dem installieren der PHP-Version noch den Apache neu starten, bwz. die Konfigurationsdatein neu laden. Damit sollte Ihnen aber nun wirklich über &#8220;http://php43.testserver.intra&#8221; Ihr Programm als PHP 4.3 Variante verfügbar sein.</p>
<p><strong>Um nun weitere beliebige PHP-Versionen integrieren zu können, wiederholen Sie einfach die enstprechenden Schritte:</strong></p>
<ul>
<li>Download und Entpacken PHP-Version</li>
<li>configure, make und make install der PHP Version</li>
<li>Anlegen eines virtuellen Apache Hosts</li>
<li>eventuell Anlegen eines DNS-Eintrags (wenn ohne Wildcards gearbeitet wurde)</li>
<li>Neustart der entsprechenden Server</li>
<li>Fertig!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/mehrere-php-versionen-parallel-auf-einem-entwicklungsserver/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fatal Error in PHP abfangen</title>
		<link>http://www.ein-einfaches-cms.de/fatal-error-in-php-abfangen</link>
		<comments>http://www.ein-einfaches-cms.de/fatal-error-in-php-abfangen#comments</comments>
		<pubDate>Thu, 01 Jul 2010 11:47:37 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Softwareentwicklung]]></category>

		<category><![CDATA[E_COMPLIE_ERROR]]></category>

		<category><![CDATA[E_ERROR]]></category>

		<category><![CDATA[E_PARSE]]></category>

		<category><![CDATA[Fatal Error]]></category>

		<category><![CDATA[Fehlerausgabe]]></category>

		<category><![CDATA[Fehlerbehandlung]]></category>

		<category><![CDATA[Speicherlimit]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=416</guid>
		<description><![CDATA[PHP bietet genügend Möglichkeiten, um Fehler und Exception abzufangen und benutzerdefiniert zu verarbeiten. Die Funktionen set_error_handler() und set_exception_handler() seien als Grundlagen für jeden Entwickler an die Hand gelegt. Beispiele für die Implementation und den Einsatz sind zu Hauf im Netz vorhanden. Schnell schleicht sich der trügerische Gedanke ein, mit den beschriebenen Methoden alle Fehler abfangen [...]]]></description>
			<content:encoded><![CDATA[<p>PHP bietet genügend Möglichkeiten, um Fehler und Exception abzufangen und benutzerdefiniert zu verarbeiten. Die Funktionen <a href="http://de2.php.net/manual/de/function.set-error-handler.php" target="_blank">set_error_handler()</a> und <a href="http://de2.php.net/manual/de/function.set-exception-handler.php" target="_blank">set_exception_handler()</a> seien als Grundlagen für jeden Entwickler an die Hand gelegt. Beispiele für die Implementation und den Einsatz sind zu Hauf im Netz vorhanden. Schnell schleicht sich der trügerische Gedanke ein, mit den beschriebenen Methoden alle Fehler abfangen zu können. Doch etliche fatale Fehler wie ein &#8220;Parse Error&#8221; bei z.B. Syntax-Fehlern im Skript oder einem &#8220;Fatal Error&#8221; bei z.B. einer Speicherüberschreitung können nicht mit den oben benannten Funktionen behandelt werden.<br />
<span id="more-416"></span><br />
Doch beginnen wir mit einer eigenen Fehlerbehandlung nach dem PHP-Handbuch.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">set_error_handler</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'my_error_handler'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">function</span> my_error_handler<span style="color: #009900;">&#40;</span><span style="color: #000088;">$errno</span><span style="color: #339933;">,</span><span style="color: #000088;">$errstr</span><span style="color: #339933;">,</span> <span style="color: #000088;">$errfile</span><span style="color: #339933;">,</span>  <span style="color: #000088;">$errline</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errno</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_USER_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_PARSE</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_CORE_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_COMPILE_ERROR</span><span style="color: #339933;">:</span>
            <span style="color: #990000;">echo</span> <span style="color: #0000ff;">'&lt;h1&gt;Meine Fehlerausgabe&lt;/h1&gt;'</span><span style="color: #339933;">;</span>
            <span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Entsprechende Fehlerausgabe...'</span><span style="color: #339933;">;</span>
            <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_USER_WARNING</span><span style="color: #339933;">:</span>
        <span style="color: #666666; font-style: italic;">//Weitere Behandlung von Warnungen, Hinweise....</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ohne genaueres Studium (ok zugegeben - aufmerksames Lesen würde auch reichen) des entsprechenden Seite im Online-Handbuch, könnte man denken beim Aufruf dieses Skriptes, würde die eigene Fehlermeldung erscheinen - da die Klasse &#8220;Bar&#8221; ja gar nicht existiert oder bekannt ist.</p>
<p>Doch wie wir uns erinnern, werden mit dieser eigenen Fehlerbehandlung nicht alle Fehler abgefangen. Um folgende Fehler  handelt es sich dabei:</p>
<ul>
<li><strong>E_ERROR</strong><br />
z.B. bei Überschreitung des Speicherlimits für das PHP-Skript (Bildergenerierung, etc.)</li>
<li><strong>E_PARSE</strong><br />
z.B. Syntax-Fehler im PHP-Skript</li>
<li><strong>E_COMPILE_ERROR</strong><br />
z.B. bei einer per &#8220;require&#8221; eingebunden Datei, die nicht existiert</li>
<li><strong>E_CORE_ERROR</strong><br />
Fehler beim Starten von PHP</li>
</ul>
<p>Der obige Aufruf von &#8220;$foo = new Bar()&#8221; würde in diesem Fall einen E_ERROR werfen. Im folgenden Beispiel zeigen wir eine Vorgehensweise mit dem die Fehler E_ERROR, E_PARSE und E_COMPILE_ERROR benutzerdefiniert gefangen und behandelt werden können. Beim E_CORE_ERROR sind uns dann allerdings endgültig die Hände gebunden. Doch Hand aufs PHP-Herz, wer hat diese Fehlermeldung produktiv schon einmal erhalten?</p>
<p>Voraussetzung für das Abfangen obiger Fehler ist die Aktivierung der Ausgabepufferung, um die von PHP geworfenen Fehlermeldungen durch eigene Ausgaben überschreiben zu können. Dazu fehlt uns noch eine Funktion, die beim Beenden des PHP-Skriptes aufgerufen wird und (fast) fertig ist das Ganze. Erweitern wir also unser obiges Skript folgendermaßen:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">obj_start<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">set_error_handler</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'my_error_handler'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">register_shutdown_function</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'my_shutdowm_handler'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> my_error_handler<span style="color: #009900;">&#40;</span><span style="color: #000088;">$errno</span><span style="color: #339933;">,</span><span style="color: #000088;">$errstr</span><span style="color: #339933;">,</span> <span style="color: #000088;">$errfile</span><span style="color: #339933;">,</span>  <span style="color: #000088;">$errline</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$errno</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_USER_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_PARSE</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_CORE_ERROR</span><span style="color: #339933;">:</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_COMPILE_ERROR</span><span style="color: #339933;">:</span>
            <span style="color: #990000;">echo</span> <span style="color: #0000ff;">'&lt;h1&gt;Meine Fehlerausgabe&lt;/h1&gt;'</span><span style="color: #339933;">;</span>
            <span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Entsprechende Fehlerausgabe...'</span><span style="color: #339933;">;</span>
            <span style="color: #990000;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #000000; font-weight: bold;">E_USER_WARNING</span><span style="color: #339933;">:</span>
        <span style="color: #666666; font-style: italic;">//Weitere Behandlung von Warnungen, Hinweise....</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> my_shutdown_handler<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span> <span style="color: #339933;">=</span> error_get_last<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">ob_end_clean</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        my_error_handler<span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'type'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'message'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'file'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$error</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'line'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$foo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">ob_end_flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Sobald unser PHP-Skript also beendet wird, überprüfen wir ob ein Fehler aufgetreten ist. Ist dies der Fall, übergeben wir die Fehlerdetails an unsere benutzerdefinierte Fehlerbehandlung und erhalten wie gewollt unsere eigene, wunderschön formatierte Fehlerbehandlung. Das Skript sollte natürlich nur als Anregung dienen und hat keinen Anspruch auf Vollständigkeit.</p>
<p><em><strong>In diesem Sinne: Frohe Fehlerbehandlung&#8230;</strong></em></p>
<p>Für diesen Blogbeitrag wurden wir inspiriert durch den englischen Artikel von Michael Caplan in seinem Blog:<br />
<a href="http://www.eggplant.ws/blog/php/mayday-php-going-down/" target="_blank">Mayday, Mayday, Mayday - PHP Going Down</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/fatal-error-in-php-abfangen/feed</wfw:commentRss>
		</item>
		<item>
		<title>Vorschau auf die Version 1.5.0</title>
		<link>http://www.ein-einfaches-cms.de/vorschau-auf-die-version-140</link>
		<comments>http://www.ein-einfaches-cms.de/vorschau-auf-die-version-140#comments</comments>
		<pubDate>Thu, 20 May 2010 15:20:30 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Simploo CMS]]></category>

		<category><![CDATA[Content Management]]></category>

		<category><![CDATA[einfach]]></category>

		<category><![CDATA[Homepage]]></category>

		<category><![CDATA[Redaktionssystem]]></category>

		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=409</guid>
		<description><![CDATA[In wenigen Wochen wird die Simploo GmbH die Version 1.5.0 des gleichnamigen Simploo CMS veröffentlichen und für mehr Flexibilität in der Seitengestaltung sorgen. Mit der neuen Version wird es möglich sein, eigene Inhaltselemente per Konfigurationsdatei zu erstellen und diese über Templates entsprechend auszugeben. Zudem kann die Anzahl der Inhaltselemente auf einer Seite nun begrenzt werden [...]]]></description>
			<content:encoded><![CDATA[<p>In wenigen Wochen wird die Simploo GmbH die Version 1.5.0 des gleichnamigen Simploo CMS veröffentlichen und für mehr Flexibilität in der Seitengestaltung sorgen. Mit der neuen Version wird es möglich sein, eigene Inhaltselemente per Konfigurationsdatei zu erstellen und diese über Templates entsprechend auszugeben. Zudem kann die Anzahl der Inhaltselemente auf einer Seite nun begrenzt werden und jede  Seite mit einer Blätterfunktion versehen werden.</p>
<p><span id="more-409"></span>Damit stehen News-Bereichen, oder zum Beispiel die Auflistung von Partnerfirmen oder Ansprechpartnern nichts mehr im Wege. Diese selbst definierten Inhaltselemente können eine beliebige Anzahl an Eigenschaften/Feldern haben. Bei einem Inhaltselement &#8220;News&#8221; könnte das eine Überschrift, ein Einleitungstext und Nachrichtentext sein. Für jedes dieser Felder kann einzeln definiert werden, welche Editor-Funktionen dem Redakteuer zur Verfügung stehen sollen, oder ob der Editor beispielsweise komplett deaktiviert ist (für reine Texteingabe bei z.B. Überschriften). Alle Felder können anschließend  in einem eigenem Template entsprechend angeordnet und ausgegeben werden.</p>
<p>Dabei können für jedes Inhaltselement bis zu zwei Templates definiert werden. In einem ersten Template wird definiert, wie das neue Element in der Listenansicht auf der Seite dargestellt werden soll (list.phtml). Zusätzlich gibt es optional noch die Möglichkeit in einem weiteren Template (single.phtml) eine Detailsansicht für das neue Element anzubieten.</p>
<p>Als weitere Neuerung kann für jede Seite festgelegt werden, wieviel Inhalte angezeigt werden sollen. Sind auf einer Seite mehr Inhalte als eingestellt verfügbar, so sind diese für den Bescher über eine automatisch eingefügte Blätterfunktion erreichbar.</p>
<p>Mit der Version 1.4.0 werden voraussichtlich zwei neue Inhaltselemente mitgeliefert: News und Bildergalerie. Über letztere können aus einem Bilderordner automatisch entsprechende Bildergalerien auf der Internetseite präsentiert werden. Die mitgelieferte Ausgabefunktion kann natürlich mit eigenen Templates relativ leicht überschrieben werden, so dass eigenen, beliebigen Galerieansichten und -optionen nichts im Wege steht.</p>
<p><strong>Das Simploo CMS 1.5.0 wird in den nächsten Wochen verfügbar sein. Eine Video-Präsentation der neuen Funktionen finden Sie unter:</strong></p>
<ul>
<li><a href="http://www.simploo.de/support/videos">www.simploo.de/support/videos</a></li>
<li><a href="http://www.youtube.com/user/simploogmbh">www.youtube.com/user/simploogmbh</a></li>
</ul>
<p><strong>Ab sofort steht die Version 1.5.0 auch in der Online-Demo zum Testen zur Verfügung:</strong></p>
<ul>
<li><a href="http://demo.simploo.de">demo.simploo.de</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/vorschau-auf-die-version-140/feed</wfw:commentRss>
		</item>
		<item>
		<title>Alles neu macht der Mai</title>
		<link>http://www.ein-einfaches-cms.de/alles-neu-macht-der-mai</link>
		<comments>http://www.ein-einfaches-cms.de/alles-neu-macht-der-mai#comments</comments>
		<pubDate>Mon, 03 May 2010 15:56:25 +0000</pubDate>
		<dc:creator>Markus Schmid</dc:creator>
		
		<category><![CDATA[Simploo CMS]]></category>

		<category><![CDATA[1.3.0]]></category>

		<category><![CDATA[APS-Standard]]></category>

		<category><![CDATA[Cloud Computing]]></category>

		<category><![CDATA[Design]]></category>

		<category><![CDATA[Dokumentation]]></category>

		<category><![CDATA[Jquery]]></category>

		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[SaaS]]></category>

		<category><![CDATA[Templates]]></category>

		<category><![CDATA[Update]]></category>

		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.ein-einfaches-cms.de/?p=400</guid>
		<description><![CDATA[Unter dem Motto &#8220;Alles neu macht der Mai&#8221; gibt es ab sofort mehrere neue
Downloads auf unseren Seiten. Unter anderem gibt es die neue Version 1.3.0 des Simploo CMS, eine neue Dokumentation für Desginer und Entwickler, sowie zwei Online-Videos zum einfachen Webseiten-Bearbeitungsprogramm als Download.
Neue Version 1.3.0
Mit dem wichtigsten Download steht Ihnen ab sofort das Simploo CMS [...]]]></description>
			<content:encoded><![CDATA[<p>Unter dem Motto &#8220;Alles neu macht der Mai&#8221; gibt es ab sofort mehrere neue<br />
Downloads auf unseren Seiten. Unter anderem gibt es die neue Version 1.3.0 des Simploo CMS, eine neue Dokumentation für Desginer und Entwickler, sowie zwei Online-Videos zum einfachen Webseiten-Bearbeitungsprogramm als Download.</p>
<p><span id="more-400"></span><strong>Neue Version 1.3.0</strong><br />
Mit dem wichtigsten Download steht Ihnen ab sofort das Simploo CMS in der Version 1.3.0 mit folgenden Neuerungen zur Verfügung:</p>
<ul>
<li>Suche im Frontend (Test/Demo siehe auf <a href="http://www.simploo.de">www.simploo.de</a>)</li>
<li>Ausgabe Rootline (&#8221;Breadcrumb&#8221;) / Klickpfad in den Templates</li>
<li>Benutzerlogin mit Passwort-Vergessen-Funktion</li>
<li>Kontaktformular als neues Inhaltselement (anpassbar über Config-Datei)</li>
</ul>
<p>Die neue Version erhalten Sie als Komplettdownload unter <a href="http://www.simploo.de">www.simploo.de</a> oder in Ihrem Simploo CMS Administrationsbereich unter &#8220;Admin-&gt;Updates-&gt;suchen&#8221; als automatisches Update. Mehr zur neuen Version finden Sie in unserem Update-Forum unter <a href="http://forum.simploo.de/read.php?21,46">forum.simploo.de</a></p>
<p><strong>Dokumentation &#8220;Integration von eigenen Templates&#8221;</strong><br />
Da dies aber im Mai ja nicht alles gewesen sein kann, haben wir ab sofort auch die Dokumentation zur Integration  von eigenen Templates unter <a href="http://www.simploo.de/cms-dokumentation">www.simploo.de/cms-dokumentation</a> fertig gestellt.</p>
<p><strong>Online-Videos</strong><br />
Und wer sich gerne das Simploo CMS von den Machern höchstpersönlich erklären lassen will, dem seien die neuen Online-Videos unter <a href="http://www.simploo.de/support/videos">www.simploo.de/support/videos</a> ans Herz gelegt.</p>
<p><strong>Simploo CMS wird SaaS-fähig</strong><br />
Und auch in Zukunft bleiben wir mir Neuerungen natürlich am Ball. Speziell für unsere Partner und hier vor allem die Provider arbeiten wir gerade an einem SaaS-fähigen (&#8221;Software as a Service&#8221; / Cloud Computing) Installationspaket nach dem APS-Standard (<a href="http://www.apsstandard.org">www.apsstandard.org</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ein-einfaches-cms.de/alles-neu-macht-der-mai/feed</wfw:commentRss>
		</item>
	</channel>
</rss>

