<?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>PHP hates me - Der PHP Blog &#187; PHP</title>
	<atom:link href="http://www.phphatesme.com/archives/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.phphatesme.com</link>
	<description>PhpHatesMe, but that&#039;s ok!</description>
	<lastBuildDate>Tue, 07 Feb 2012 06:00:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Closures in PHP</title>
		<link>http://www.phphatesme.com/blog/php/closures-in-php/</link>
		<comments>http://www.phphatesme.com/blog/php/closures-in-php/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 05:00:58 +0000</pubDate>
		<dc:creator>ebene7</dc:creator>
				<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=3364</guid>
		<description><![CDATA[Ab der Version 5.3 bietet auch PHP, wie auch schon viele andere Sprachen, die Möglichkeit mit anonymen Funktionen zu arbeiten. Dadurch können z.B. Callback-Funktionen zur Filterung o.Ä. implementiert werden, ohne dass man sich dafür tolle Namen ausdenken muss. Aber was &#8230; <a href="http://blog.ebene7.com/2012/01/30/closures-in-php/">Weiterlesen <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ab der Version 5.3 bietet auch PHP, wie auch schon viele andere Sprachen, die Möglichkeit mit <a href="http://www.php.net/manual/de/functions.anonymous.php" >anonymen Funktionen</a> zu arbeiten. Dadurch können z.B. Callback-Funktionen zur Filterung o.Ä. implementiert werden, ohne dass man sich dafür tolle Namen ausdenken muss. Aber was kann man damit noch machen?</p>
<p><span id="more-3364"></span>Bislang musste man Callback-Funktionen gewöhnlich definieren, bevor man sie verwenden konnte.</p>
<pre>&lt;?php
function myCallback($output) {
  return '##' . $output . '##';
}

echo call_user_func('myCallback', 'Hallo Welt');

// Ausgabe:
##Hallo Welt##</pre>
<p>Als Closure geschrieben sähe das dann so aus:</p>
<pre>&lt;?php
echo call_user_func(
  function($output) { return '##' . $output . '##'; },
  'Hallo Welt');

// Ausgabe:
##Hallo Welt##</pre>
<p>Zugegeben, dieses Beispiel hätte man durch einfache Stringverkettung wesentlich einfacher schreiben können und eigentlich war das mit <a href="http://de2.php.net/manual/de/function.create-function.php" >create_function()</a> auch schon unter PHP4 möglich.</p>
<p>Wir können die Funktion natürlich wie früher auch schon in einer Variablen speichern und dann weiter verwenden.</p>
<pre>&lt;?php
$myFunction = function($output) {
  return '##' . $output . '##';
};

echo call_user_func($myFunction, 'Hallo Welt') . '&lt;br/&gt;';
echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
##Hallo Welt##
##Hallo Welt##</pre>
<p>Und auch das ist ja noch nichts Neues. Mit Closures haben wir nun aber auch die Möglichkeit, teile unserer &#8220;Umgebung&#8221; zum Zeitpunkt der Funktionsdefinition zu konservieren.</p>
<p>Dazu müssen wir nur die Definition etwas erweitern.</p>
<pre>&lt;?php
$before = '&gt;';
$after = '&lt;';

$myFunction = function($output) use ($before, $after) {
    return $before . $output . $after;
};

echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
&gt;Hallo Welt&lt;</pre>
<p>An dieser Stelle frieren wir mit &#8220;use&#8221; sozusagen die Werte für $before und $after innerhalb unserer Funktion ein. Spätere Änderungen der beiden Variablen haben keine Auswirkungen auf die Funktion.</p>
<pre>$before = 'foo';
$after = 'bar';
echo $myFunction('Hallo Welt') . '&lt;br/&gt;';

//Ausgabe:
&gt;Hallo Welt&lt;</pre>
<p>In PHP wir mittlerweile sehr viel mit Standardinterfaces und -klassen (SPL) abgedeckt und so ist es auch in diesem Fall. In der Variablen $myFunction ist ein Objekt vom Typ &#8220;<a href="http://de2.php.net/manual/en/class.closure.php" >Closure</a>&#8221; gespeichert.</p>
<pre>&lt;?php
echo '&lt;pre&gt;' . print_r($myFunction, true) . '&lt;/pre&gt;';

//Ausgabe:
Closure Object
(
  [static] =&gt; Array
    (
      [before] =&gt; &gt;
      [after] =&gt; &lt;
    )
  [parameter] =&gt; Array
    (
      [$output] =&gt;
    )
)</pre>
<p>Will man eigene Objekte wie Funktionen aufrufen, dann geht das mit der magischen Methode <a href="http://de2.php.net/manual/de/language.oop5.magic.php#language.oop5.magic.invoke" >__invoke()</a>, die auch hier verwendet wird.</p>
<p>Anfangs erwähnte ich, dass Closure-Callbacks zur Filterung, aber auch zur Manipulation von Array verwendet werden können.</p>
<p>Wenn nur der Inhalt interessant ist, dann kommen wir mit array_map() und einem Parameter aus.</p>
<pre>&lt;?php
$values = array(
  array(
    'a' =&gt; array(
      'b' =&gt; 'foo'
    )
  ),
  array(
    'a' =&gt; array(
      'b' =&gt; 'bar'
    )
  ),
);

$filtered = array_map(
  function ($item) { return $item['a']['b']; },
  $values
);
echo '&lt;pre&gt;' . print_r($filtered, true) . '&lt;/pre&gt;';

// Ausgabe:
Array
(
  [0] =&gt; foo
  [1] =&gt; bar
)</pre>
<p>Wollen wir aber Werte im Array in Abhängigkeit zum Key/Index verändern, dann geht das mit array_walk und einem zweiten Parameter im Callback. Bei beiden kann natürlich auch &#8220;use&#8221; verwendet werden. Der Parameter $value wird dabei als Referenz übernommen.</p>
<pre>$values = array(
  'a' =&gt; 100,
  'b' =&gt; 200,
  'c' =&gt; 300,
);

array_walk(
  $values,
  function (&amp;$value, $key) {
    if ('b' == $key) {
      $value = 42;
    }
  }
);

echo '&lt;pre&gt;' . print_r($values, true) . '&lt;/pre&gt;';

// Ausgabe:
Array
(
  [a] =&gt; 100
  [b] =&gt; 42
  [c] =&gt; 300
)</pre>
<p>Ich hoffe, dass ich ein wenig Licht ins Dunkel bringen konnte und &#8220;Closure&#8221; nun kein geheimnisvolles Zauberwort mehr ist.</p>
<p>Wenn ihr noch gute Ergänzungen oder Anwendungbeispiele habt, dann immer her damit und bitte fleissig kommentieren. <img src='http://blog.ebene7.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center sexy-bookmarks-bg-caring-old">
<ul class="socials">
		<li class="sexy-comfeed">
			<a href="http://blog.ebene7.com/2012/01/30/closures-in-php/feed" rel="nofollow" class="external" title="Abonniere die Kommentare für diesen Beitrag">Abonniere die Kommentare für diesen Beitrag</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Closures+in+PHP+-+http://bit.ly/wcKw56+&amp;source=shareaholic" rel="nofollow" class="external" title="Twittere diesen Artikel!">Twittere diesen Artikel!</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;t=Closures+in+PHP" rel="nofollow" class="external" title="Empfehle diesen Artikel bei Facebook">Empfehle diesen Artikel bei Facebook</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.de/addurl/?bm_url=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;bm_description=Closures+in+PHP&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Füge hinzu zu Mister Wong">Füge hinzu zu Mister Wong</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://delicious.com/post?url=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;title=Closures+in+PHP" rel="nofollow" class="external" title="Empfehle diesen Artikel bei del.icio.us">Empfehle diesen Artikel bei del.icio.us</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.ebene7.com/2012/01/30/closures-in-php/" rel="nofollow" class="external" title="Empfehle diesen Artikel bei Technorati">Empfehle diesen Artikel bei Technorati</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;title=Closures+in+PHP" rel="nofollow" class="external" title="Bei StumbleUpon einstellen">Bei StumbleUpon einstellen</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;title=Closures+in+PHP" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;t=Closures+in+PHP" rel="nofollow" class="external" title="Sende dies zu MySpace">Sende dies zu MySpace</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.ebene7.com/2012/01/30/closures-in-php/&amp;title=Closures+in+PHP&amp;summary=Ab%20der%20Version%205.3%20bietet%20auch%20PHP,%20wie%20auch%20schon%20viele%20andere%20Sprachen,%20die%20M%C3%B6glichkeit%20mit%20anonymen%20Funktionen%20zu%20arbeiten.%20Dadurch%20k%C3%B6nnen%20z.B.%20Callback-Funktionen%20zur%20Filterung%20o.%C3%84.%20implementiert%20werden,%20ohne%20dass%20man%20sich%20daf%C3%BCr%20tolle%20Namen%20ausdenken%20muss.%20Aber%20was%20kann%20man%20damit%20noch%20machen&amp;source=ebene7" rel="nofollow" class="external" title="Empfehle diesen Artikel bei LinkedIn">Empfehle diesen Artikel bei LinkedIn</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/php/closures-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fundsachen KW04/2012</title>
		<link>http://www.phphatesme.com/blog/php/fundsachen-kw042012/</link>
		<comments>http://www.phphatesme.com/blog/php/fundsachen-kw042012/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 11:00:31 +0000</pubDate>
		<dc:creator>ebene7</dc:creator>
				<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.ebene7.com/?p=3374</guid>
		<description><![CDATA[Hier die kleine Sammlung von interessanten Seiten, die ich in letzter Zeit gefunden habe. Onlinetool zum (Neu-)Formatieren von JavaScript-Code http://jsbeautifier.org/ PHP Benchmark gibt einen Überblick über die Performance vergleichbarer Operationen http://www.phpbench.com/ Responsive Design/Layout-Tester (siehe auch meinen Neujahrsartikel ) http://mattkersley.com/responsive/ Abonniere &#8230; <a href="http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/">Weiterlesen <span>&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hier die kleine Sammlung von interessanten Seiten, die ich in letzter Zeit gefunden habe.</p>
<ul>
<li>Onlinetool zum (Neu-)Formatieren von JavaScript-Code<br />
<a href="http://jsbeautifier.org/" >http://jsbeautifier.org/</a></li>
<li>PHP Benchmark gibt einen Überblick über die Performance vergleichbarer Operationen<br />
<a href="http://www.phpbench.com/" >http://www.phpbench.com/</a></li>
<li>Responsive Design/Layout-Tester (siehe auch meinen <a href="http://blog.ebene7.com/2012/01/01/gesundes-neues-jahr-und-zwei-jahre-ebene7/">Neujahrsartikel</a> <img src='http://blog.ebene7.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> )<br />
<a href="http://mattkersley.com/responsive/" >http://mattkersley.com/responsive/</a></li>
</ul>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand sexy-bookmarks-center sexy-bookmarks-bg-caring-old">
<ul class="socials">
		<li class="sexy-comfeed">
			<a href="http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/feed" rel="nofollow" class="external" title="Abonniere die Kommentare für diesen Beitrag">Abonniere die Kommentare für diesen Beitrag</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Fundsachen+KW04/2012+-+UNKNOWN_ERROR+&amp;source=shareaholic" rel="nofollow" class="external" title="Twittere diesen Artikel!">Twittere diesen Artikel!</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;t=Fundsachen+KW04/2012" rel="nofollow" class="external" title="Empfehle diesen Artikel bei Facebook">Empfehle diesen Artikel bei Facebook</a>
		</li>
		<li class="sexy-misterwong">
			<a href="http://www.mister-wong.de/addurl/?bm_url=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;bm_description=Fundsachen+KW04/2012&amp;plugin=sexybookmarks" rel="nofollow" class="external" title="Füge hinzu zu Mister Wong">Füge hinzu zu Mister Wong</a>
		</li>
		<li class="sexy-delicious">
			<a href="http://delicious.com/post?url=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;title=Fundsachen+KW04/2012" rel="nofollow" class="external" title="Empfehle diesen Artikel bei del.icio.us">Empfehle diesen Artikel bei del.icio.us</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/" rel="nofollow" class="external" title="Empfehle diesen Artikel bei Technorati">Empfehle diesen Artikel bei Technorati</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;title=Fundsachen+KW04/2012" rel="nofollow" class="external" title="Bei StumbleUpon einstellen">Bei StumbleUpon einstellen</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;title=Fundsachen+KW04/2012" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;t=Fundsachen+KW04/2012" rel="nofollow" class="external" title="Sende dies zu MySpace">Sende dies zu MySpace</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://blog.ebene7.com/2012/01/27/fundsachen-kw04-2012/&amp;title=Fundsachen+KW04/2012&amp;summary=Hier%20die%20kleine%20Sammlung%20von%20interessanten%20Seiten,%20die%20ich%20in%20letzter%20Zeit%20gefunden%20habe.%0D%0A%0D%0A%09Onlinetool%20zum%20(Neu-)Formatieren%20von%20JavaScript-Code%0D%0Ahttp://jsbeautifier.org/%0D%0A%09PHP%20Benchmark%20gibt%20einen%20%C3%9Cberblick%20%C3%BCber%20die%20Performance%20vergleichbarer%20Operationen%0D%0Ahttp://www.phpbench.com/%0D%0A%09Responsive%20D&amp;source=ebene7" rel="nofollow" class="external" title="Empfehle diesen Artikel bei LinkedIn">Empfehle diesen Artikel bei LinkedIn</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/php/fundsachen-kw042012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QR-Codes erstellen</title>
		<link>http://www.phphatesme.com/blog/allgemein/qr-codes-erstellen/</link>
		<comments>http://www.phphatesme.com/blog/allgemein/qr-codes-erstellen/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 09:07:40 +0000</pubDate>
		<dc:creator>php monkeys</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpmonkeys.de/?p=1705</guid>
		<description><![CDATA[Seit ein paar Jahren gibt es die QR-Codes zu sehen. Mit der Verbreitung der Smartphones hat sich die Verbreitung stark erhöht und überall stößt man auf die Quadrate, die an durcheinander gewürfelte Schachbretter erinnern. Sehr beliebt sind diese Muster ...]]></description>
			<content:encoded><![CDATA[<p>Seit ein paar Jahren gibt es die QR-Codes zu sehen. Mit der Verbreitung der Smartphones hat sich die Verbreitung stark erhöht und überall stößt man auf die Quadrate, die an durcheinander gewürfelte Schachbretter erinnern. Sehr beliebt sind diese Muster im Zusammenhang mit den vielen Android-Seiten.<br />
<span id="more-1705"></span></p>
<h2>Was ist der QR-Code eigentlich?</h2>
<p>Der Begriff QR-Code steht für Quick Response Code und es handelt sich um einen 2-dimensionalen Code, der von Denso Wave im Jahre 1994 entwickelt wurde. Die Größe ist abhängig von der Datenmenge und von der Güte der Fehlerkorrektur. Die kleineren Quadrate werden von der Erkennungssoftware zur Bestimmung der Ausrichtung genutzt. Im Code selbst werden Daten transportiert. Smartphones haben die Software zur Erkennung schon installiert oder aber sie lässt sich im jeweiligen AppStore/Market finden. Ich persönlich nutze Google Goggles unter Android. </p>
<h2>Welche Daten werden hinterlegt</h2>
<p>QR-Codes findet man inzwischen an vielen Stellen, an denen man eine Brücke zwischen einem Offline- und einem Online-Medium schlagen möchte oder muss. Werbung in Zeitschriften bspw. verweist auf die entsprechende Internetseite des Herstellers. Es können aber auch Telefonnummern, vCards oder speziellere Daten hinterlegt werden. Wlan-Zugangsdaten werden u.a. gerne in einem QR-Code für die Gäste eines Cafes hinterlegt.<br />
Die Erkennungssoftware ist normalerweise so programmiert, dass sie bestimmte Muster in den Daten erkennt und davon abhängig eine entsprechende Software startet. Solche Muster sehen bspw so aus:</p>
<h4>Webseiten</h4>
<ul>
<li>http://www.phpmonkeys.de</li>
<li>market://details?id=com.google.android.apps.unveil</li>
</ul>
<h4>Email</h4>
<ul>
<li>mailto:user@example.com</li>
<li>mailto:user@example.com?subject=Readme</li>
</ul>
<h4>Telefon</h4>
<ul>
<li>tel:012345678</li>
</ul>
<h4>Kontaktdaten (vCard)</h4>
<ul>
<li><a href="http://www.ietf.org/rfc/rfc2426.txt" >siehe vCard Spec</a></li>
<li><a href="http://de.wikipedia.org/wiki/VCard" >Kurzübersicht (Wikipedia)</a></li>
</ul>
<h2>QR-Codes generieren im Netz</h2>
<p>Wie so ein Code aussieht ist rudimentär klar und welche Daten darin enthalten sein können haben wir auch gesehen. Jetzt geht es an die Generierung. Der einfachste Weg ist eine entsprechende Seite zu nutzen. Dies bietet sich vor allem dann an, wenn man nicht viele Codes benötigt oder wenn man die Generierung auslagern möchte.</p>
<h4>Kaywa</h4>
<p>Ein besonders einfaches Formular zum Erstellen solches Codes findet man bei Kaywa. Dies ist auch der Hersteller von entsprechender Software, die die Codes analysieren kann. Dort kann man ein paar Informationen angeben und schon wird ein QR-Code generiert. Einen statischen Link dazu gibt es auch. Besonders nett an dem Formular ist die Auswahl nach den verschiedenen Möglichkeit. Vorlagen für URL, Telefon und SMS sind bereits vorhanden und ein generelles Text-Eingabefeld gibt es auch noch. Leider gibt es aber einige Limitierungen und das Formular ist auch nur für die private Nutzung erlaubt. Für die ersten Tests reicht dies aber allemal aus.<br />
<em>Link</em>: <a href="http://qrcode.kaywa.com/" >http://qrcode.kaywa.com/</a></p>
<h4>Google Chart API</h4>
<p>Möchte man QR-Codes dynamisch erzeugen so bietet Google eine entsprechende API an. Über den Generator für Charts kann man neben schönen Diagrammen auch die QR-Codes generieren. Hierbei muss man im Gegensatz zu kaywa aber wissen, welchen textlichen Inhalt man im Code unterbringen muss. Wie sieht ein Telefonnummer-QR-Code aus? Und dann ist die Google API ein gutes Stück interessanter.<br />
Der Aufruf ist sehr überschaubar:</p>
<pre class="brush: bash; title: ; notranslate">
https://chart.googleapis.com/chart?chs=150x150&#038;cht=qr&#038;chl=Hello%20world
</pre>
<p>Die Parameter ergeben sich folgendermaßen:</p>
<ul>
<li><code>chs</code>: Die Größe des Codes im Format <em>Breite</em>x<em>Höhe</em></li>
<li><code>cht</code>: Hier steht qr, weil das eben der Typ ist</li>
<li><code>chl</code>: Der Inhalt des QR-Codes in einem URL-Encoded Format</li>
</ul>
<p>Netterweise kann man statt der GET-Syntax auch die Daten per POST übermitteln. Hierbei wird dann natürlich ein Formular oder eine Zwischenschicht benötigt, die die Daten per POST übermitteln kann. Zum Beispiel mit cURL auf der Kommandozeile oder natürlich mit  PHP, wie man das Übermitteln von POST-Daten ja kennt.<br />
Dadurch ist man auch in der Lage komplexere Daten in einem QR-Code unterzubringen und die Menge der Daten erhöht sich ebenfalls. Denn üblicherweise ist eine GET-Anfrage auf ca 2k beschränkt, POST hingegen kann 16k übermitteln. Unter dem angegebenen Link finden sich einige Beispiele für die Benutzung.<br />
<em>Link</em>: <a href="http://code.google.com/intl/de-DE/apis/chart/infographics/" >http://code.google.com/intl/de-DE/apis/chart/infographics/</a></p>
<h2>PHP QR Code Library</h2>
<p>Die vorgestellten Methoden benutzen beiden den Service eines Dritten. Wer nun seine Codes selbst erstellen möchte, muss auf eine entsprechende Bibliothek zurückgreifen. Als Beispiel dient hier <a href="http://phpqrcode.sourceforge.net/" >PHPQRCode</a>. Um einen QR-Code zu generieren muss man nur qrlib inkludieren. Die Generierung geschieht dann über den Aufruf einer statischen Methode. Hierbei sind einige Parameter verfügbar. Beispielhaft sieht dies so aus:</p>
<pre class="brush: php; title: ; notranslate">
require 'qrlib.php';
QRcode::png('http://www.phpmonkeys.de', 'code.png', QR_ECLEVEL_H, 10);
</pre>
<p>Die Daten werden als erster Parameter übergeben, dann folgt der Dateiname, die Fehlerkorrektur und die Größe. Fehlerkorrektur und Größe sind optional.</p>
<h2>Fazit</h2>
<p>Das eigentliche Geheimnis der QR-Codes liegt in den Daten und in der Formatierung dieser. Wenn eine Software ein spezielles Format unterstützt, so kann man viele Eingaben vereinfachen.<br />
Eine kommende Alternative könnten die NFC-Tags sein. Diese Aufkleber lassen sich ebenso mit Daten befüllen. Jedoch sind QR-Codes sehr viel einfacher und günstiger herzustellen und können von jedem Gerät mit Kamera gelesen und ausgewertet werden.</p>
<p>Ergänzend für nk hier noch 4 Testdateien. Diese haben 1k bis 4k an Daten als Inhalt. Wobei als letztes Zeichen ein A angegeben ist und alle Zeichen zuvor eine 1 sind. Dadurch kann man einfach sicherstellen, dass alle Zeichen im QRCode vorhanden sind.  </p>
<ul>
<li><a href="http://www.phpmonkeys.de/wp-content/uploads/2012/01/code_large_1k.png" >QR Code 1k</a></li>
<li><a href="http://www.phpmonkeys.de/wp-content/uploads/2012/01/code_large_2k.png" >QR Code 2k</a></li>
<li><a href="http://www.phpmonkeys.de/wp-content/uploads/2012/01/code_large_3k.png" >QR Code 3k</a></li>
<li><a href="http://www.phpmonkeys.de/wp-content/uploads/2012/01/code_large_4k.png" >QR Code 4k</a></li>
</ul>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/allgemein/qr-codes-erstellen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PGP und GPG: Wie arbeite ich mit asynchroner Verschlüsselung</title>
		<link>http://www.phphatesme.com/blog/php/pgp-und-gpg-wie-arbeite-ich-mit-asynchroner-verschlusselung/</link>
		<comments>http://www.phphatesme.com/blog/php/pgp-und-gpg-wie-arbeite-ich-mit-asynchroner-verschlusselung/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 08:36:43 +0000</pubDate>
		<dc:creator>Michael Kliewe</dc:creator>
				<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpgangsta.de/?p=3845</guid>
		<description><![CDATA[PGP und GPG sollte den meisten ein Begriff sein, auch wenn es selbst noch nie oder nur sehr selten eingesetzt wird. Die wenigsten nutzen es wahrscheinlich täglich und beispielsweise mit allen E-Mail-Adressen. Einen Rundumschlag bezüglich asynchroner Verschlüsselung und PGP/GPG mit PHP habe ich für das PHP Magazin geschrieben. In der Ausgabe 1.12 erkläre ich darin [...]<br /><br /> Keine ähnlichen Artikel.]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-3943 alignright" style="border: 0pt none;" title="PHP Magazin Cover" src="http://www.phpgangsta.de/wp-content/uploads/phpmagcover.png" alt="" width="200" height="283" />PGP und GPG sollte den meisten ein Begriff sein, auch wenn es selbst noch nie oder nur sehr selten eingesetzt wird. Die wenigsten nutzen es wahrscheinlich täglich und beispielsweise mit allen E-Mail-Adressen.</p><p>Einen Rundumschlag bezüglich asynchroner Verschlüsselung und PGP/GPG mit PHP habe ich für das <a href="http://it-republik.de/php/php-magazin/" >PHP Magazin</a> geschrieben. In der Ausgabe 1.12 erkläre ich darin das Grundkonzept von asynchroner Verschlüsselung und der Nutzung von GPG aus PHP heraus, zum Beispiel zum Versenden von signierten und/oder verschlüsselten E-Mails. Seit vorgestern gibt es den <a href="http://it-republik.de/php/artikel/Ziemlich-gute-Privatsphaere-4305.html" >Artikel auch kostenlos Online</a>. Ich zeige wie man Dateien und Texte verschlüsseln, signieren, entschlüsseln und Signaturen prüfen kann. Am Ende verweise ich auf <a href="http://gpgtest.phpgangsta.de/" >eine kleine GPG-Test-Webseite</a>, auf der man etwas mit GPG rumspielen kann. Außerdem habe ich <a href="http://gpgtest.phpgangsta.de/#gpgemailbot" >einen kleinen GPG-E-Mail-Bot</a> gebastelt der auf eingehende E-Mails reagiert und mit dem man seine E-Mail-Verschlüsselung testen kann. Alle weiteren Details befinden sich auf der angesprochenen Webseite.</p><p><span id="more-3845"></span>Auch sehr interessante Informationen bietet der Artikel von Oliver Sperke hier im Blog <a href="http://www.phpgangsta.de/tlsssl-fur-heimwerker" >zu GPG und speziell der Nutzung mit Javascript und PHP</a>, auch unbedingt lesenswert!</p><p>Ich würde mich freuen wenn ihr die Webseite und den E-Mail-Bot ausprobiert, und natürlich auch wenn ihr das PHP Magazin kauft und Feedback gebt. Mich würde zum Beispiel auch interessieren ob ihr aktuell E-Mails die ihr mit PHP verschickt, signiert und/oder verschlüsselt verschickt, und wenn nein, warum nicht? Oder nutzt ihr statt PGP eventuell S/MIME zur E-Mail-Verschlüsselung?</p> <br/><br/><p>Keine ähnlichen Artikel.</p>]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/php/pgp-und-gpg-wie-arbeite-ich-mit-asynchroner-verschlusselung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neuer frischer Gutschein für PHPStorm 3.0!</title>
		<link>http://www.phphatesme.com/blog/php/neuer-frischer-gutschein-fur-phpstorm-3-0/</link>
		<comments>http://www.phphatesme.com/blog/php/neuer-frischer-gutschein-fur-phpstorm-3-0/#comments</comments>
		<pubDate>Tue, 24 Jan 2012 08:59:24 +0000</pubDate>
		<dc:creator>PHP Gangsta</dc:creator>
				<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpgangsta.de/?p=4214</guid>
		<description><![CDATA[Ich habe gute Nachrichten von JetBrains: Nach dem erfolgreichen Release der Version 3.0 im Dezember letzten Jahres habe ich wieder Gutscheine über 20% Preisnachlass beim Kauf einer Personal License von PHPStorm bekommen und kann diese an euch rausgeben! Wie bereits beim letzten Mal gilt dies nicht für Verlängerungen sondern nur für Neubestellungen der Personal License. [...]<br /><br /> Ähnliche Artikel:<ol><li><a href="http://www.phpgangsta.de/20-gutschein-fur-phpstorm-verlangert" rel="bookmark" title="20% Gutschein für PHPStorm verlängert!">20% Gutschein für PHPStorm verlängert!</a></li><li><a href="http://www.phpgangsta.de/phpstorm-20-gunstiger-hier-bei-mir" rel="bookmark" title="PHPStorm 20% günstiger, hier bei mir">PHPStorm 20% günstiger, hier bei mir</a></li><li><a href="http://www.phpgangsta.de/eilmeldung-phpstorm-satte-60-gunstiger" rel="bookmark" title="Eilmeldung: PHPStorm satte 50% günstiger!">Eilmeldung: PHPStorm satte 50% günstiger!</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-4216" style="margin-left: 5px; margin-right: 5px; border: 0pt none;" title="PHPStorm" src="http://www.phpgangsta.de/wp-content/uploads/phpstorm1.png" alt="" width="297" height="79" />Ich habe gute Nachrichten von <a href="http://www.jetbrains.com/" >JetBrains</a>: Nach dem erfolgreichen <a href="http://www.phpgangsta.de/phpstorm-3-0-erschienen" >Release der Version 3.0 im Dezember</a> letzten Jahres habe ich wieder Gutscheine über 20% Preisnachlass beim Kauf einer Personal License von <a href="http://www.phpgangsta.de/?s=PHPStorm" >PHPStorm</a> bekommen und kann diese an euch rausgeben!</p><p><span id="more-4214"></span>Wie bereits <a href="http://www.phpgangsta.de/20-gutschein-fur-phpstorm-verlangert" >beim letzten Mal</a> gilt dies nicht für Verlängerungen sondern nur für Neubestellungen der Personal License. Der Gutschein ist gültig bis zum 23. Februar 2012.</p><p><img class="alignright size-full wp-image-4217" style="margin-left: 5px; margin-right: 5px; border: 0pt none;" title="PHPStorm 3.0 is out" src="http://www.phpgangsta.de/wp-content/uploads/phpstorm2.png" alt="" width="261" height="77" />Tja, was gibt es noch groß zu sagen, jeder PHP Entwickler sollte sich diese IDE anschauen und 30 Tage ausprobieren falls er sie noch nicht kennt, es ist aktuell meiner Meinung nach (und der vieler anderer) die beste IDE für PHP, auf der <a href="http://www.jetbrains.com/phpstorm/" >Produktseite von PHPStorm bei JetBrains</a> kann man sich ausführlich informieren über die Features und Neuigkeiten, in <a href="http://www.jetbrains.com/phpstorm/documentation/index.html" >Demo-Videos</a> wird eindrucksvoll gezeigt was die Software drauf hat, und <a href="http://blog.jetbrains.com/webide/" >im Blog</a> stehen Neuigkeiten, werden wichtige Features wie das Remote Debugging erklärt etc.</p><p>Also erst ausprobieren, dann kaufen!</p> <br/><br/><p>Ähnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/20-gutschein-fur-phpstorm-verlangert' rel='bookmark' title='20% Gutschein für PHPStorm verlängert!'>20% Gutschein für PHPStorm verlängert!</a></li><li><a href='http://www.phpgangsta.de/phpstorm-20-gunstiger-hier-bei-mir' rel='bookmark' title='PHPStorm 20% günstiger, hier bei mir'>PHPStorm 20% günstiger, hier bei mir</a></li><li><a href='http://www.phpgangsta.de/eilmeldung-phpstorm-satte-60-gunstiger' rel='bookmark' title='Eilmeldung: PHPStorm satte 50% günstiger!'>Eilmeldung: PHPStorm satte 50% günstiger!</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/php/neuer-frischer-gutschein-fur-phpstorm-3-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Den USB Mail Melder per Webseite steuern</title>
		<link>http://www.phphatesme.com/blog/php/den-usb-mail-melder-per-webseite-steuern/</link>
		<comments>http://www.phphatesme.com/blog/php/den-usb-mail-melder-per-webseite-steuern/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 08:47:21 +0000</pubDate>
		<dc:creator>PHP Gangsta</dc:creator>
				<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpgangsta.de/?p=4198</guid>
		<description><![CDATA[Mein erstes richtiges USB-Gadget ist der USB Mail Melder (USB Mail Notifier). Um damit etwas zu experimentieren habe ich ein kleines Webinterface gebaut mit dem man in nahezu Echtzeit die Farben verändern kann. Doch erstmal ein Bild: Diese kleine Box kann man in allen Farben aufleuchten lassen. Normalerweise gibt es dazu Treiber und Software auf [...]<br /><br /> Ähnliche Artikel:<ol><li><a href="http://www.phpgangsta.de/bug-in-php-5-3-0s-mail-funktion" rel="bookmark" title="Bug in PHP 5.3.0′s mail() Funktion">Bug in PHP 5.3.0&#8242;s mail() Funktion</a></li><li><a href="http://www.phpgangsta.de/die-mail-de-gmbh-sucht-javascript-entwickler" rel="bookmark" title="Die mail.de GmbH sucht Javascript-Entwickler">Die mail.de GmbH sucht Javascript-Entwickler</a></li><li><a href="http://www.phpgangsta.de/webseite-testen-mit-browser-sandboxen" rel="bookmark" title="Webseite testen mit Browser Sandboxen">Webseite testen mit Browser Sandboxen</a></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Mein erstes richtiges USB-Gadget ist der <a href="http://www.getdigital.de/products/USB_Mail_Melder/" >USB Mail Melder</a> (USB Mail Notifier). Um damit etwas zu experimentieren habe ich ein kleines Webinterface gebaut mit dem man in nahezu Echtzeit die Farben verändern kann. Doch erstmal ein Bild:</p><p><img class="alignnone size-medium wp-image-4201" title="USB Mail Melder" src="http://www.phpgangsta.de/wp-content/uploads/mail_melder-300x226.jpg" alt="" width="300" height="226" /></p><p>Diese kleine Box kann man in allen Farben aufleuchten lassen. Normalerweise gibt es dazu Treiber und Software auf einer CD mitgeliefert. In der Software kann man via POP3 bzw. Webmail auf E-Mail-Accounts zugreifen, und bei neuen E-Mails aufleuchten lassen.</p><p><span id="more-4198"></span><img class="alignnone size-medium wp-image-4202" title="Mail Notifier Software" src="http://www.phpgangsta.de/wp-content/uploads/dreamcheeky-300x237.png" alt="" width="300" height="237" /></p><p>Ich dachte mir dann, wie wäre es das Gadget aus PHP heraus zu steuern? Leider mußte ich schnell feststellen dass man mit PHP nicht so leicht auf die USB-Schnittstelle zugreifen kann. Ich habe es jedenfalls nicht hinbekommen.</p><p>Aber Dank der hervorragenden Arbeit von <a href="http://www.christophs-blog.de/2011/01/usb-mail-notifier-schon-wieder/" >Christoph gibt es auch ein kleines Kommandozeilen-Tool</a> mit dem man das Gadget erleuchten kann. Mein Webfrontend sieht dann so aus:</p><p><img class="alignnone size-full wp-image-4203" title="Mail Notifier Web" src="http://www.phpgangsta.de/wp-content/uploads/mailnotifierweb.png" alt="" width="322" height="398" /></p><p>Hier noch ein kleines Video:</p><p><iframe src="https://www.youtube.com/embed/KjNCEQpZy_M" frameborder="0" width="420" height="315"></iframe></p><p>Der Benutzer kann aktuell per Slider die drei Grundfarben einstellen, es X mal pulsieren lassen oder es ausschalten. Man könnte natürlich auch einen kleinen Daemon bauen der per IMAP/POP3 einige E-Mail-Accounts prüft, oder einen RSS Feed abfragt, oder oder oder. Alles was man mit PHP machen kann und bei dem man ein visuelles Feedback benötigt.</p><p>Den <a href="https://github.com/PHPGangsta/MailNotifierWebfrontend" >Code gibt es bei Github</a>. Es ist nichts besonderes, hauptsächlich HTML, CSS und Javascript, sowie einige wenige Zeilen um auf das Kommandozeilentool von Christoph zuzugreifen.</p><p>Ich weiß nicht ob es unter Linux geht direkt auf die USB-Schnittstelle zuzugreifen, ich denke da an so etwas ähnliches hier:</p><pre class="brush: php; title: ; notranslate">&lt;?php
$string = &quot;Hallo Schnittstelle!\n&quot;;
$pointer = fopen(&quot;/dev/ttyS0&quot;,&quot;w&quot;);
fwrite ($pointer, $string);
fclose($pointer);</pre><p>Für Windows und die COM1 Schnittstelle habe ich diesen Schnipsel gefunden, ob das so oder so ähnlich auch für ein USB Gerät funktioniert habe ich noch nicht herausfinden können:</p><pre class="brush: php; title: ; notranslate">&lt;?php
`mode COM1: BAUD=4800 PARITY=N data=8 stop=1 xon=off`;

$fp = fopen (&quot;COM1:&quot;, &quot;w+&quot;);
if (!$fp) {
    echo &quot;can't open port: COM1&quot;;
} else {
    fputs ($fp, $string );
}</pre><p>Oder aber mittels der <a href="http://www.php.net/manual/de/ref.w32api.php" >W32API auf eine DLL zugreifen</a> und darin eine Funktion aufrufen. Habe ich aber auch noch nie gemacht.</p><p>Wer das also schonmal gemacht hat oder eine Idee hat wie man auf eine Zwischensoftware verzichten kann, möge sich melden!</p><p>Danke nochmals an <a href="http://www.getdigital.de/" >getDigital</a> für das Gadget!</p> <br/><br/><p>Ähnliche Artikel:</p><ol><li><a href='http://www.phpgangsta.de/bug-in-php-5-3-0s-mail-funktion' rel='bookmark' title='Bug in PHP 5.3.0&#8242;s mail() Funktion'>Bug in PHP 5.3.0&#8242;s mail() Funktion</a></li><li><a href='http://www.phpgangsta.de/die-mail-de-gmbh-sucht-javascript-entwickler' rel='bookmark' title='Die mail.de GmbH sucht Javascript-Entwickler'>Die mail.de GmbH sucht Javascript-Entwickler</a></li><li><a href='http://www.phpgangsta.de/webseite-testen-mit-browser-sandboxen' rel='bookmark' title='Webseite testen mit Browser Sandboxen'>Webseite testen mit Browser Sandboxen</a></li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/php/den-usb-mail-melder-per-webseite-steuern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTful Webservices mit PHP</title>
		<link>http://www.phphatesme.com/blog/allgemein/restful-webservices-mit-php/</link>
		<comments>http://www.phphatesme.com/blog/allgemein/restful-webservices-mit-php/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:46:48 +0000</pubDate>
		<dc:creator>php monkeys</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[phmnetwork]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.phpmonkeys.de/?p=1659</guid>
		<description><![CDATA[Webapplikationen bieten oftmals eine Schnittstelle an, über die auch Entwickler den angebotenen Service in ihren Applikationen nutzen können. Diese Webservices wurden gerne durch XML-RPC oder SOAP bereitgestellt. Doch der neue Trend ist REST.
Was ist REST?
REST steht für REpresentational State ...]]></description>
			<content:encoded><![CDATA[<p>Webapplikationen bieten oftmals eine Schnittstelle an, über die auch Entwickler den angebotenen Service in ihren Applikationen nutzen können. Diese Webservices wurden gerne durch XML-RPC oder SOAP bereitgestellt. Doch der neue Trend ist REST.<br />
<span id="more-1659"></span></p>
<h2>Was ist REST?</h2>
<p>REST steht für REpresentational State Transfer und wurde von Thomas Roy Fielding in seiner <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" >Dissertation</a> benannt. REST benutzt URLs um Ressourcen bereitzustellen und das Hypertext Transfer Protocol um Manipulationen an diesen Ressourcen durchzuführen. Die einzelnen HTTP-Methoden werden für verschiedene Operationen genutzt dabei entspricht GET Lesen, PUT Update, POST Create und DELETE Löschen.</p>
<h2>REST-Service in PHP &#8211; das Slim-Framework</h2>
<p>Möchte man einen solchen REST-Service erstellen bietet sich das <a href="http://www.slimframework.com/" >Slim-Framework</a> an. Die Sourcen können bei <a href="https://github.com/codeguy/Slim" >Github</a> gefunden werden. Der Aufbau eines Hello-World-Services ist denkbar einfach.</p>
<pre class="brush: php; title: ; notranslate">
require 'Slim/Slim.php';
$app = new Slim();
$app-&gt;get('/hello/:name', function ($name) {
   echo &quot;Hello $name&quot;;
});
$app-&gt;run();
</pre>
<p>Die interessante Zeile ist <code>$app->get()</code>. Hier wird ein Pfad und ein Parameter mit einer Funktion verknüpft. Das ganze verwendet die GET-Methode von HTTP.</p>
<p>Wenn man einen umfangreicheren Service anbieten will, werden weitere Methoden verwendet wie zum Beispiel PUT, DELETE, POST.</p>
<p>Als Beispiel sei ein Service für die Verwaltung einer Person zu nennen der so aussehen könnte:</p>
<pre class="brush: php; title: ; notranslate">
require 'Slim/Slim.php';
$app = new Slim();
$app-&gt;get('/person/:id', function ($id) {
   // retrieve person
});
$app-&gt;post('/person', function () {
   // create person
});
$app-&gt;put('/person/:id', function ($id) {
   // update data
});
$app-&gt;delete('/person/:id', function ($id) {
   // delete data
});
$app-&gt;run();
</pre>
<p>Das Framework bietet neben der REST-Funktionalität auch noch eine Logging Komponente und alles ist mit Unittest abgedeckt.</p>
<h2>Testen mit Chrome und FF</h2>
<p>Um den REST-Service zu nutzen benötigt man normal einen REST-Client. Für Tests ist es natürlich überaus praktisch, wenn man die einzelnen Funktionen manuell triggern kann. </p>
<p>Hierfür gibt es eine <a href="https://chrome.google.com/webstore/detail/hgmloofddffdnphfgcellkdfbfbjeloo" >Chrome Erweiterung</a>, die den Entwickler die Methode, Header Information und Daten (bspw POST) setzen lässt. </p>
<p>Eine <a href="https://addons.mozilla.org/en-US/firefox/addon/restclient/" >Firefox Extension</a> gibt es auch, die ich aber bisher nicht getestet habe. </p>
<h2>Webservice Tipp</h2>
<p>Beim Entwerfen eines REST-Webservices sollte man gleich die Versionierung der API bedenken. So sollten Ressourcen dann bspw. über URLS wie <code>/v1/person/1234</code> bereitgestellt werden. </p>
<p class="wp-flattr-button"></p>]]></content:encoded>
			<wfw:commentRss>http://www.phphatesme.com/blog/allgemein/restful-webservices-mit-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

