<?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>Malte's Blog &#187; PHP</title>
	<atom:link href="http://www.maltesieb.de/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.maltesieb.de</link>
	<description></description>
	<lastBuildDate>Wed, 02 Sep 2009 11:10:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.3</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Höhe des TinyMCE automatisch anpassen</title>
		<link>http://www.maltesieb.de/php/hohe-des-tinymce-automatisch-anpassen/</link>
		<comments>http://www.maltesieb.de/php/hohe-des-tinymce-automatisch-anpassen/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 01:21:29 +0000</pubDate>
		<dc:creator>Malte</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web-Entwicklung]]></category>
		<category><![CDATA[anpassen]]></category>
		<category><![CDATA[dynamisch]]></category>
		<category><![CDATA[höhe]]></category>
		<category><![CDATA[tinymce]]></category>

		<guid isPermaLink="false">http://www.maltesieb.de/?p=60</guid>
		<description><![CDATA[Für ein Projekt brauchte ich ein TinyMCE-Feature, welches die Höhe des Editors dynamisch an den enthaltenen Inhalt anpasst.
Nachdem ich im Internet nicht fündig wurde, hab ichs mir selbst geschrieben. Here it is! Am Code selbst müssen keine Anpassungen vorgenommen werden.
&#60;script type="text/javascript"&#62;
var i,d,c=0;
function $(e) {    return document.getElementById(e); }
function getEditorHeight() {
  return parseInt($(tinyMCE.activeEditor.id+'_ifr').style.height);
}
function setEditorHeight(h) {
  [...]]]></description>
			<content:encoded><![CDATA[<p>Für ein Projekt brauchte ich ein TinyMCE-Feature, welches die <strong>Höhe des Editors dynamisch an den enthaltenen Inhalt </strong>anpasst.</p>
<p>Nachdem ich im Internet nicht fündig wurde, hab ichs mir selbst geschrieben. Here it is! Am Code selbst müssen keine Anpassungen vorgenommen werden.</p>
<pre>&lt;script type="text/javascript"&gt;
var i,d,c=0;
function $(e) {    return document.getElementById(e); }
function getEditorHeight() {
  return parseInt($(tinyMCE.activeEditor.id+'_ifr').style.height);
}
function setEditorHeight(h) {
  $(tinyMCE.activeEditor.id+'_ifr').style.height = h+'px';
}

function createHiddenElement() {
  var elm = document.createElement('div');
  with (elm) {
    id='tmce_height';
    with (style) { position='absolute'; top='0'; visibility='hidden'; width='100%'; }
  }
  $(tinyMCE.activeEditor.id).parentNode.appendChild(elm);
}
function changeHeight() {
  c++;
  var old_h = getEditorHeight();
  if (c&gt;=10) { c=0; window.clearInterval(i); }
  setEditorHeight(old_h+d/10);
}

function adjustEditorHeight() {
  if (!$('tmce_height')) { createHiddenElement(); }
  var old_h = getEditorHeight();
  $('tmce_height').innerHTML = tinyMCE.activeEditor.getContent();
  var new_h = $('tmce_height').clientHeight+80;
  window.clearInterval(i);
  i = window.setInterval("changeHeight()",10);
  d = new_h-old_h;
}
&lt;/script&gt;</pre>
<p>In den TinyMCE-Optionen folgendes hinzufügen:</p>
<pre>tinyMCE.init({
...
init_instance_callback: "adjustEditorHeight",
onchange_callback: "adjustEditorHeight"
});</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.maltesieb.de/php/hohe-des-tinymce-automatisch-anpassen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memcache löschen (Flush)</title>
		<link>http://www.maltesieb.de/php/memcache-loschen-flush/</link>
		<comments>http://www.maltesieb.de/php/memcache-loschen-flush/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 12:15:59 +0000</pubDate>
		<dc:creator>Malte</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[flush]]></category>
		<category><![CDATA[löschen]]></category>
		<category><![CDATA[memcache]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[skript]]></category>

		<guid isPermaLink="false">http://www.maltesieb.de/?p=45</guid>
		<description><![CDATA[Soweit ich weiß, gibt es keine einfache Möglichkeit, den Memcache zu löschen (Flush). Ich hab mir zu diesem Zweck ein Script geschrieben. Voraussetzung dafür sind natürlich die Pakete php5-memcache und php5-cli.
Um den Memcache nun zu löschen, habe ich mir in mein Home-Verzeichnis eine memcache_flush.php mit folgendem Inhalt erstellt:
&#60;?php
$mem = new Memcache;
if ($mem-&#62;connect(&#39;127.0.0.1&#39;,&#39;11211&#39;) === false) {
echo [...]]]></description>
			<content:encoded><![CDATA[<p>Soweit ich weiß, gibt es keine einfache Möglichkeit, den <strong>Memcache zu löschen (Flush)</strong>. Ich hab mir zu diesem Zweck ein Script geschrieben. Voraussetzung dafür sind natürlich die Pakete <strong>php5-memcache</strong> und <strong>php5-cli</strong>.</p>
<p>Um den Memcache nun zu löschen, habe ich mir in mein Home-Verzeichnis eine <strong>memcache_flush.php</strong> mit folgendem Inhalt erstellt:</p>
<blockquote><p>&lt;?php<br />
$mem = new Memcache;<br />
if ($mem-&gt;connect(&#39;127.0.0.1&#39;,&#39;11211&#39;) === false) {<br />
echo &#39;Connection to Memcache server failed.&#39;.&quot;\n&quot;;<br />
}<br />
if ($mem-&gt;flush() === false) {<br />
echo &#39;Could not flush Memcache&#39;.&quot;\n&quot;;<br />
} else {<br />
echo &#39;Memcache has been flushed successfully&#39;.&quot;\n&quot;;<br />
}<br />
?&gt;</p></blockquote>
<p>Um den Memcache zu löschen, einfach folgendes ausführen:</p>
<blockquote><p>php memcache_flush.php</p></blockquote>
<p>Das Skript bezieht sich auf die Standard-Konfiguration von memcached auf dem aktuellen Webserver.</p>
<p>Ich hoffe, es versteht sich von selbst, dieses Skript nur auf lokaler Ebene oder im Development-Bereich zu verwenden. Im Produktivsystem sollten einzelne Memcache-Einträge mit Bedacht gelöscht werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maltesieb.de/php/memcache-loschen-flush/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP-Framework CodeIgniter durchleuchtet</title>
		<link>http://www.maltesieb.de/php/php-framework-codeigniter-durchleuchtet/</link>
		<comments>http://www.maltesieb.de/php/php-framework-codeigniter-durchleuchtet/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 02:24:27 +0000</pubDate>
		<dc:creator>Malte</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[applikationen]]></category>
		<category><![CDATA[apps]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[dry]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[projekte]]></category>

		<guid isPermaLink="false">http://maltesieb.de/?p=38</guid>
		<description><![CDATA[Vor ein paar Tagen wurde ich auf das PHP-Framework CodeIgniter aufmerksam. Nachdem ich mir die Propaganda auf der Startseite und den Beginn der Dokumentation durchgelesen hatte, war ich überzeugt, dass CodeIgniter der richtige Ansatz für zukünftige kleinere Projekte ist. Die Seite wirbt u.a. mit guter Performance, Kompatibilität zu konventionellen Webspace&#8217;s, wenig Konfigurationsaufwand, keiner Kommandozeile, simplen [...]]]></description>
			<content:encoded><![CDATA[<p>Vor ein paar Tagen wurde ich auf das <a href="http://codeigniter.com/" target="_blank"><strong>PHP-Framework CodeIgniter</strong></a> aufmerksam. Nachdem ich mir die Propaganda auf der Startseite und den Beginn der <strong>Dokumentation</strong> durchgelesen hatte, war ich überzeugt, dass <strong>CodeIgniter</strong> der richtige Ansatz für zukünftige <strong>kleinere Projekte</strong> ist. Die Seite wirbt u.a. mit guter Performance, Kompatibilität zu konventionellen Webspace&#8217;s, wenig Konfigurationsaufwand, keiner Kommandozeile, simplen Lösungen und guter Dokumentation. Auch die <strong>Screencasts</strong> waren interessant und so habe ich den Code heruntergeladen und das Ganze mal unter die Lupe genommen &#8230;<span id="more-38"></span></p>
<p>Das Framework ist in ein einziges Archiv gepackt und kann einfach in den Zielordner entpackt werden. Der <strong>Verzeichnis-Aufbau ist übersichtlich</strong>. Wie bei anderen Frameworks auch, spielt sich alles im &#8220;application&#8221;-Verzeichnis ab. Dort findet man die übliche <strong>MVC</strong>-Unterteilung und die übrigens sehr gelungene und einsteigerfreundliche Dokumentation fordert einen auf, den ersten <strong>Controller</strong> zu schreiben, der über das erste Segment in der URL (wie z.B in: example.com/segment1/segment2) angesprochen wird. Dort definiert man eine index-Methode, welche aufgerufen wird, wenn kein 2. Segment in der URL vorhanden ist bzw. andere Methoden für das entsprechende Segment.</p>
<p>Der eingebene Code funktioniert unmittelbar. Es ist also bis dato keinerlei Konfiguration nötig. Sofern Datenbankzugriff erforderlich ist, kann es in der config eingestellt werden und wird in der entsprechenden Klasse/Methode mit einem Funktionsaufruf geladen. Das Laden der einzelnen Libraries und Helper ist zwar immer ein Mehraufwand bei der Programmierung, aber die Schonung der Ressourcen macht es wieder wett. Das Framework stellt noch viele weitere <strong>Konfigurationsmöglichkeiten</strong> bereit, wie das Einstellen von URL-Routings, Core-Hooks, Autoloads etc. Auch die Vielzahl der <strong>Libraries</strong> und <strong>Helper</strong> soll einem das Programmieren erleichtern.</p>
<p>Sehr interessant fand ich das sog. &#8220;<strong>scaffolding</strong>&#8220;-Feature, welches anhand einer Tabellen-Struktur ein <strong>Admin-Backend</strong> generieren kann. Leider fehlt es hier an jeglichen Konfigurationsmöglichkeiten, weswegen man schon hier an die ersten Grenzen von CodeIgniter stößt. So kann man z.B. keine Feldnamen vergeben (Tabellen-Kommentare werden nicht genutzt) und auch sonst nur den Standard-Aufbau nutzen. Das macht die Nutzung für ein Backend meines Erachtens unnütz.</p>
<p>Die Dokumentation ist klar gegliedert und richtet sich offensichtlich an PHP-Einsteiger. Es wird von der Pieke auf erklärt und man hat keine Schwierigkeiten, sich schnell in das Framework einzuarbeiten. Alle Klassen und Helper werden erklärt, es ist eine übersichtliche Gliederung und ein Reference Chart vorhanden. Es gibt viele Funktionen, die einem die Programmierarbeit enorm erleichtern, z.B. automatischer Aufbau von HTML-Tabellen anhand eines mehrdimensionalen Arrays, Einfügen von Datensätzen anhand eines Arrays, es gibt eine umfangreiche Formular-Validierung usw.</p>
<p>Die Einsteigerfreundlichkeit geht allerdings auch zulasten der Sicherheit und der Performance. In der Dokumentation und vor allem in den Screencasts bleibt die Sicherheit nur ein nebensächliches Thema. Es wird zwar z.B. genannt, dass spezielle Datenbank-Funktionen automatisch die Werte escapen, allerdings wird das nur als Notiz am Rande dargestellt. Außerdem fehlte mir eine Funktion, um Werte für die HTML-Ausgabe vorzubereiten (nl2br, htmlspecialchars &#8230;). Zudem werden Session-Daten in der Standard-Konfiguration im Klartext als Cookie gespeichert und man muss erst Encryption aktivieren bzw. eine Tabelle für die Nutzung als Session-Tabelle anlegen. Die Performance bleibt sicher auch auf der Strecke, wenn vereinfachende Funktionen wie die o.g. Tabellen-Generierung oder Query-Bau berechnet werden muss und nicht einmal gecached wird.</p>
<p>Bei der Nutzung von <a href="http://codeigniter.com/" target="_blank">CodeIgniter</a> stößt man sehr schnell an Grenzen, für größere Projekte sehe ich es als <strong>gänzlich ungeeignet</strong>. Für <strong>kleinere Applikationen</strong> ist CodeIgniter allerdings sehr gut geeignet, da es sehr <strong>einsteigerfreundlich</strong> ist und man sich wirklich innerhalb kurzer Zeit eingearbeitet hat. Zudem ist es <strong>kompatibel zu PHP4</strong> und benötigt keinerlei besondere Server-Bedingungen, sodass man es problemlos auf fast jedem Webspace einsetzen kann. Die Versprechungen, mit denen geworben wird, werden auf jeden Fall größtenteils eingehalten. Wer mehr Flexibilität und eine höhere Skalierbarkeit braucht, ist mit einem alternativen Framework auf jeden Fall besser geraten.</p>
<p>Ich werde CodeIgniter demnächst bei einem kleinen regionalen Projekt einsetzen, dennoch werde ich mir nun einmal <a href="http://www.symfony-project.org/" target="_blank"><strong>Symfony</strong></a> angucken, was mir wesentlich flexibler und komplexer erscheint, aber auch mehr Einarbeitungsaufwand benötigt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maltesieb.de/php/php-framework-codeigniter-durchleuchtet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP verschönert Ausgaben wie var_dump()</title>
		<link>http://www.maltesieb.de/php/php-verschonert-ausgaben-wie-var_dump/</link>
		<comments>http://www.maltesieb.de/php/php-verschonert-ausgaben-wie-var_dump/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 23:55:46 +0000</pubDate>
		<dc:creator>Malte</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[php var_dump]]></category>

		<guid isPermaLink="false">http://maltesieb.de/?p=36</guid>
		<description><![CDATA[Kürzlich fiel mir auf, dass PHP anscheinend neuerdings Fehler-Ausgaben und Debug-Ausgaben, wie ich sie gerne mit var_dump() mache, styled. Anstatt, dass wie bisher die Ausgabe im Default-Font so hintereinander weg geschrieben wurde, erscheint sie nun mit einem umschlossenen &#60;pre&#62; und farbiger Hervorhebung verschiedener Datentypen.

Das Feature hilft sehr, ist man doch meistens zu faul, manuell entsprechende [...]]]></description>
			<content:encoded><![CDATA[<p>Kürzlich fiel mir auf, dass PHP anscheinend neuerdings Fehler-Ausgaben und Debug-Ausgaben, wie ich sie gerne mit var_dump() mache, styled. Anstatt, dass wie bisher die Ausgabe im Default-Font so hintereinander weg geschrieben wurde, erscheint sie nun mit einem umschlossenen &lt;pre&gt; und farbiger Hervorhebung verschiedener Datentypen.</p>
<p><a href="http://maltesieb.de/wp-content/uploads/2008/06/var_dump.jpg"><img class="alignnone size-medium wp-image-37" title="var_dump" src="http://maltesieb.de/wp-content/uploads/2008/06/var_dump-300x216.jpg" alt="" width="300" height="216" /></a></p>
<p>Das Feature hilft sehr, ist man doch meistens zu faul, manuell entsprechende Tags zu setzen. Installiert ist bei mir derzeit PHP Version 5.2.4</p>
]]></content:encoded>
			<wfw:commentRss>http://www.maltesieb.de/php/php-verschonert-ausgaben-wie-var_dump/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
