<?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>unter.Strom.bz &#187; Programmierung</title>
	<atom:link href="http://unter.strom.bz/09kategorie/programmierung/feed/" rel="self" type="application/rss+xml" />
	<link>http://unter.strom.bz</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Fri, 28 Jan 2011 09:35:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Feine grafische Diagramme in PHP mit amCharts erzeugen</title>
		<link>http://unter.strom.bz/136/feine-grafische-diagramme-in-php-mit-amcharts-erzeugen/</link>
		<comments>http://unter.strom.bz/136/feine-grafische-diagramme-in-php-mit-amcharts-erzeugen/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 09:35:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[amcharts dynamisch diagramme php]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=136</guid>
		<description><![CDATA[Jeder der schon mal versucht eine größere Menge von Daten grafisch schön mit PHP auszugeben, musste sich auf die Suche nach einer dafür geeigneten Bibliothek machen, von denen es unzählige gibt. Nach langem Suchen habe ich mich für amCharts entschlossen. Das gibt&#8217;s Download und zwar kostenlos. Einzieger Wehmutstropfen, bei der Gratis-Version wird in den Diagrammen [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder der schon mal versucht eine größere Menge von Daten grafisch schön mit PHP auszugeben, musste sich auf die Suche nach einer dafür geeigneten Bibliothek machen, von denen es unzählige gibt. Nach langem Suchen habe ich mich für <a href="http://www.amcharts.com/download" target="_self">amCharts</a> entschlossen. Das gibt&#8217;s Download und zwar kostenlos. Einzieger Wehmutstropfen, bei der Gratis-Version wird in den Diagrammen ein kleiner Link zu amCharts angezeigt.</p>
<p>Das Ganze funktioniert mit Flash. Man gibt lediglich den Dateinamen an, wo die Daten im gewünschten Format liegen (z. B. XML, CSV) und den Rest erledigt das Script. Es gibt verschiedenste Darstellungsarten, u.a. Balken- und Kreisdiagramme. Besonders spannend ist jedoch das sog. &#8220;Stock Chart&#8221;, was eigentlich für die Visualisierung von Aktienkursen gedacht ist. Jedoch lässt es sich problemlos auch auf andere Bereiche anwenden, weil man einen Datenbestand (z. B. Position in einer Suchmaschine) auf sehr lange Zeitäume darstellen und diese Zeiträume beliebig eingrenzen und verschieben.</p>
<p><strong>Hinweis für das </strong><strong>Einbinden von dynamisch generierten Daten</strong>:<br />
Meist hat man keine statische CSV-Datei, die dargestellt werden soll, sondern die Daten werden zur Laufzeit erzeugt beispielsweise in PHP. Bei amCharts gibt es eine Variable &#8220;additional_chart_settings&#8221;, in der man u. A. dem Dateinamen im &lt;filename&gt;-Element angeben kann.<br />
Im statische Fall genügt die Angabe von &#8230;&lt;filename&gt;datei.csv&lt;/filename&gt;&#8230;, damit die Daten von datei.csv korrekt übergeben werden.<br />
Handelt es sich jecdoch um eine dynamisch generierte Datei z. B. &#8220;date.php?do=getCsvData&amp;id=1&#8243;, so muss diese Url unbedingt vorher mit dem Befehl encodeUriComponent() kodiert werden.<br />
Also in etw so &#8230;&lt;filename&gt;&#8217;+encodeUriComponent(&#8221;date.php?do=getCsvData&amp;id=1&#8243;)+&#8217;&lt;/filename&gt;&#8230;</p>
<p><strong></strong>Ich bin mit amCharts sehr zufrieden und kann den Einsatz nur empfehlen. Was meint Ihr dazu? Oder nutzt ihr ein andere Bibliothek für die Erzeugung von Diagrammen in PHP?</p>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/136/feine-grafische-diagramme-in-php-mit-amcharts-erzeugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eine klasse Template-Engine für PHP &#8211; Smarty</title>
		<link>http://unter.strom.bz/131/eine-klasse-template-engine-fur-php-smarty/</link>
		<comments>http://unter.strom.bz/131/eine-klasse-template-engine-fur-php-smarty/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 20:54:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=131</guid>
		<description><![CDATA[Jeder der noch nichts von Smarty gehört, sollte hier weiterlesen   Nee im Ernst Smarty ist eine der Vielen Template-Engines, die es für PHP gibt, um die Programmlogik einfach von der Präsentation zu trennen. Smarty habe ich das erste mal ca. 2004 für eine Webprojekt benutzt und bin seitdem begeisterter Smarty-Fanatiker. Natürlich entdeckt man [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder der noch nichts von Smarty gehört, sollte hier weiterlesen <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Nee im Ernst Smarty ist eine der Vielen Template-Engines, die es für PHP gibt, um die Programmlogik einfach von der Präsentation zu trennen. Smarty habe ich das erste mal ca. 2004 für eine Webprojekt benutzt und bin seitdem begeisterter Smarty-Fanatiker. Natürlich entdeckt man über die Zeit immer mehr sinnvolle Features, die einen Einsatz von Smarty rechtfertigen.<span id="more-131"></span></p>
<p>Kurz zur Inf0: Smarty wird als PHP-Klasse eingebunden und über ein instanziiertes Objekt angesprochen. Dabei werden die Templates (Vorlagen mit Endung .tpl) eingelesen und zur Laufzeit mit den aktuellen Ausgaben (Programmlogik) ausgegeben. Dabei werden Variablen mithilfe des assign()-Befehls an ein Template übergeben. Innerhalb der Templates hat man sehr viele Möglichkeiten, wie man Sie auch direkt in PHP kennt. Z. B. das Durchlaufen einer Liste, Ausgabe von Request-Feldern, If-then-Else-Unterscheidungen und noch vieles mehr.</p>
<p>Die <strong>Installation von Smarty</strong> ist denkbar einfach:</p>
<ol>
<li><a href="http://www.smarty.net/download.php" target="_self">Smarty </a>kostenlos downloaden</li>
<li>Ggf. eine <a href="http://unter.strom.bz/smarty/MySmarty.class.txt" target="_self"><strong>eigene Smarty-Klasse</strong></a> erzeugen mit einer individuellen Konfiguration</li>
<li>Smarty-Objekt aus der Klasse erstellen</li>
<li>Template und Programmlogik implementerieren und Variableb übergeben &#8211; Je nachdem wie aufwendig das ist&#8230; <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Variablen an Smarty übergeben mit <strong>assign()</strong></li>
<li>Template am Bildschirm ausgeben mit <strong>display()</strong></li>
</ol>
<p>Nachdem man Schritt 1 und 2 erfolgreich abgeschlossen hat, kann man anhand des folgenden kleinen Beispiels kurz die Funktionsweise von Smarty erahnen. Bitte noch in der MySmarty.class.php den Pfad zu Smarty anpassen.</p>
<p>Die Programmlogik in bauch.php:</p>
<pre>
<pre>//Eigene Smarty-Klasse laden
require_once('MySmarty.class.php');
//Neues Objekt erstellen
$smarty = new MySmarty();
$essen = array(0 =&gt; array('Name' =&gt; 'Burger', 'Kalorien' =&gt; 'viel'),
1 =&gt; array('Name' =&gt; 'Salat', 'Kalorien' =&gt; 'wenig'));
//Übergebe das Array $essen an Smarty
$smarty-&gt;assign('essen', $essen);
//gebe Template aus
$smarty-&gt;display('bauch.tpl');
</pre>
</pre>
<p>Das Template in bauch.tpl:</p>
<p><a title="Smarty Beispiel Template" href="http://unter.strom.bz/smarty/bauch.tpl" target="_self">Siehe hier</a></p>
<p>Führt man jetzt einmal bauch.php aus, so erscheint eine (schöne) Ausgabe des Arrays. Natürlich kann man noch weitere Fallunterscheidungen vornehmen und so das Ergebnis der Ausgabe bis ins Detail mihilfe der Programmlogik beeinflussen. Darauf gehe ich aber jetzt nicht ein. Genauso wenig wie auf die anderen coolen Eigenschaften, die Smarty bietet, wie z. B. dem Caching von Templates oder die Benutzung vordefinierten Smarty-Funktionen wie z. B. date_format für Datumsformatierungen direkt im Template.</p>
<p>Eine weitere tolle Erklärung wie ihr Smarty für eure Webprojekte verwenden könnt, gibts <a href="http://blog.mynotiz.de/programmieren/smarty-tutorial-dynamische-webanwendung-mit-php-586/" target="_self">hier</a>. Dort wird außerdem noch gleich erklärt, wie ihr Xampp nutzen könnt um euch lokal einen Webserver zum Testen einzurichten.</p>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/131/eine-klasse-template-engine-fur-php-smarty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fatal Error: allowed memory size of bytes exhausted&#8230;</title>
		<link>http://unter.strom.bz/83/fatal-error-allowed-memory-size-of-bytes-exhausted/</link>
		<comments>http://unter.strom.bz/83/fatal-error-allowed-memory-size-of-bytes-exhausted/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 21:28:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[allowed memory size fatal error]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=83</guid>
		<description><![CDATA[Wer diesen Fatal Error von PHP schon mal gesehen hat, der hat entweder 1. ein riesige Script geschrieben oder 2. einfach nur falsch programmiert   Nein jetzt mal im Ernst. Ich hatte den Fehler auch schon mehrmals und das aufgrund von Punkt 2. Ich würde auch sagen, dass es bei den meisten Fällen durch [...]]]></description>
			<content:encoded><![CDATA[<p>Wer diesen Fatal Error von PHP schon mal gesehen hat, der hat entweder 1. ein riesige Script geschrieben oder 2. einfach nur falsch programmiert <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Nein jetzt mal im Ernst. Ich hatte den Fehler auch schon mehrmals und das aufgrund von Punkt 2. Ich würde auch sagen, dass es bei den meisten Fällen durch falsche Programmierung zu einer Speicherüberschreitung kommt.</p>
<p>Vorweg zum Verständnis: Der &#8220;Fatal Error: allowed memory size of XXX bytes exhausted&#8221; (meist mit einer bestimmten Byte-Anzahl statt der XXX <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  entsteht dann, wenn das ausgeführte PHP-Script mehr Speicher verlangt, als verfügbar ist. Ist das der Fall bricht PHP mit eben diesem Fatal Error ab. Das Speicher-Limit befindet sich in der php.ini des Servers und zwar als Variable</p>
<p>memory_limit = 16M ; Maximum amount of memory a script may consume (16MB)</p>
<p>Folgende Lösungen:</p>
<p>1. memory_limit erhöhen: entweder in der php.ini oder<a href="http://juliusbeckmann.de/blog/php-memory-limit-erhohen.html" target="_blank"> direkt in PHP</a> mit dem Befehl:</p>
<pre class="brush: php;">ini_set('memory_limit', '32M');
</pre>
<p>2. Analyse des hohen Speicherverbrauchs mithilfe des Befehls memory_get_usage(), der den aktuellen Speicherplatzverbrauch des ausgeführten PHP-Scriptes ausgibt. Dabei kann man z. B. an verschiedenen Stellen im Quellcode den Speicherplatzverbrauch ausgeben und so die Stelle finden, wo sehr viel Speicherplatz benötigt wird. Das ist dann meist ein Programmierungsfehler.</p>
<p>Beispiel:</p>
<pre class="brush: php;">$mem['start'] = memory_get_usage();
echo $mem['start'].'Bytes verbraucht.';

... PHP-Code...

// Ausgabe des aktuellen Speicherverrbrauchs
echo (memory_get_usage()-$mem['start']).'Bytes verbraucht.';

... PHP-Code...
&lt;pre&gt;// Ausgabe des aktuellen Speicherverrbrauchs&lt;/pre&gt;
echo (memory_get_usage()-$mem['start']).'Bytes verbraucht.';
</pre>
<p>Auf diese Weise lässt sich die mögliche &#8220;Fehlerquelle&#8221; für immensen Speicherplatzverbrauch analysieren. Lösung 1 ist keine richtige Lösung sondern hilft lediglich die Symptome zu beheben. Mit Lösung 2 lässt sich die Fehlerquelle relativ gut eingrenzen. Oft genügt es Variablen wieder mit unset() komplett freizugeben.</p>
<p>Beispiel:</p>
<pre class="brush: php;">//großes Array mit vielen Elementen
$feld = array(...);

//Ausgabe: 16000Byte verbraucht
echo memory_get_usage().'Bytes verbraucht.'; 

//Array löschen
unset($feld);

//Ausgabe: 2000Byte verbraucht
echo memory_get_usage().'Bytes verbraucht.';
</pre>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/83/fatal-error-allowed-memory-size-of-bytes-exhausted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP MySQL klasse Tutorial für Anfänger</title>
		<link>http://unter.strom.bz/58/php-mysql-klasse-tutorial-fur-anfanger/</link>
		<comments>http://unter.strom.bz/58/php-mysql-klasse-tutorial-fur-anfanger/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 21:13:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=58</guid>
		<description><![CDATA[Da ich mich privat sowie beruflich viel mit der PHP-Programmierung im Zusammenspiel mit mySQL zur relationalen Datenhaltung beschäftige. Möchte ich hier mal ein paar Gedanken und Beispiele vorstellen, mit der man relativ einfach auf eine mySQL-Tabelle zugreifen kann.
Zunächst habe ich eine kleine mysql-Klasse geschrieben, die alle (für mich nützlichen) Funktionen in einer Klasse kapselt. Ich [...]]]></description>
			<content:encoded><![CDATA[<p>Da ich mich privat sowie beruflich viel mit der PHP-Programmierung im Zusammenspiel mit mySQL zur relationalen Datenhaltung beschäftige. Möchte ich hier mal ein paar Gedanken und Beispiele vorstellen, mit der man relativ einfach auf eine mySQL-Tabelle zugreifen kann.</p>
<p>Zunächst habe ich eine <strong>kleine mysql-Klasse</strong> geschrieben, die alle (für mich nützlichen) Funktionen in einer Klasse kapselt. Ich finde sowieso objektorientierte Programmierung (OOP) weitaus strukturierter als der, bei funktionaler Programmierung, entstandener Spagethi-code.  Seit PHP5 werden auch OOP-Konstrukte aus anderen Sprachen unterstützt, wie z. B. private oder public, um Methoden entsprechend einzuteilen. Ein wunderschönes Tutorial zu OOP in PHP5 gibt&#8217;s übrigens hier bei <a href="http://www.peterkropff.de/site/php/oop.htm" target="_blank">Peter Kropff</a>.</p>
<p>Zurück zum Thema: Zunächst benötigen wir eine neue Datei &#8220;dbtest.php&#8221;:</p>
<pre class="brush: php;">
&lt;?php
include(&quot;mysql.class.php&quot;);

//Objekt aus mysql-Klasse instanziieren
$db = new mysql();

$name = &quot;Egon&quot;;
$alter = 17;

//Neuen Eintrag in DB speichern
$sql = sprintf(&quot;INSERT INTO tabelle VALUES('%s',%d)&quot;, mysql_real_escape_string($name), $alter)
$db-&gt;query($sql);

//Alter aus DB wieder auslesen
$sql = sprintf(&quot;SELECT * FROM tabelle WHERE name='%s'&quot;, mysql_real_escape_string($name));
$db-&gt;query($sql);
$results = $db-&gt;fetch();

//Ausgabe: &quot;Egon ist 17 Jahre alt.&quot;
foreach($results AS $result)
    echo $result['name'].&quot; ist &quot;.$result['alter'].&quot; Jahre alt.&quot;;
?&gt;</pre>
<p>Der Quellcode sollte eigentlich selbst erklärend sein. Mithilfe des <strong>sprintf</strong>()-Befehls, lassen sich auch komplexe SQL-Queries schön strukturieren und man behält die Übersicht. Außerdem kann man durch die Verwendung von sprintf() in Zusammenhang mit <strong>mysql_real_escape_string</strong> die böswilligen <strong>SQL Injection Angriffe verhindern</strong>.</p>
<p>Den Quellcode für das Beispiel sowie die notwendige mySQL-Klasse gibt&#8217;s hier zum:<br />
<strong>&gt;</strong> <a href="http://unter.strom.bz/wp-content/uploads/mysql-klasse.zip"><strong>Download der mysql-Klasse</strong></a></p>
<p>Anmerkungen und Verbesserungsvorschläge könnt Ihr gern als Kommentare abgeben.</p>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/58/php-mysql-klasse-tutorial-fur-anfanger/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Curl und PHP für Login mit Cookie nutzen</title>
		<link>http://unter.strom.bz/44/curl-und-php-fur-login-mit-cookie-nutzen/</link>
		<comments>http://unter.strom.bz/44/curl-und-php-fur-login-mit-cookie-nutzen/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 20:41:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=44</guid>
		<description><![CDATA[Curl ist ein Abkürzung für &#8220;Client für Uniform Resource Locators&#8221;   Praktisch heißt das folgendes: Mit Curl lassen sich Ressourcen abrufen, die mittels URLs addressiert werden. Dabei werden die unterschiedlichsten Transportprotokolle untersützt (z. B. HTTP oder HTTPS). Außerdem werden die HTTP-Methoden, wie POST, GET, PUT oder DELETE unterstützt.
Nun zum interessanten Teil, wie bereits beschrieben, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://curl.haxx.se/" target="_blank">Curl</a> ist ein Abkürzung für &#8220;Client für Uniform Resource Locators&#8221; <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Praktisch heißt das folgendes: Mit Curl lassen sich Ressourcen abrufen, die mittels URLs addressiert werden. Dabei werden die unterschiedlichsten Transportprotokolle untersützt (z. B. HTTP oder HTTPS). Außerdem werden die HTTP-Methoden, wie POST, GET, PUT oder DELETE unterstützt.</p>
<p>Nun zum interessanten Teil, wie <a href="http://unter.strom.bz/11/externe-inhalte-einbinden-aber-allow_url_fopen-aktivieren-ist-nicht-moglich/">bereits beschrieben</a>, existiert eine Bibliothek für PHP, die die Curl-Funktionalität zur Verfügung stellt. Dort habe ich erklärt, wie man trotz deaktiviertem allow_url_fopen auf externe Dateien zugreifen kann &#8211; nämlich mit Curl.</p>
<p>Heute möchte ich erklären, wie es mittels Curl (relativ) einfach ist, einen Login durchzuführen, bei dem jedoch Cookies gesetzt werden. Curl bietet dafür mehrere Optionen, um mit Cookies umzugehen. Wir benötigen lediglich <strong> CURLOPT_COOKIEJAR</strong> und <strong>CURLOPT_COOKIEFILE</strong>.</p>
<p>Es folgt ein kleiner Beispiel-Quellcode für den Login:</p>
<pre class="brush: php;">$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, &quot;http://www.meinserver.de/login_mit_cookie.php?user=test&amp;amp;pass=geheim&quot;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

$page = curl_exec($ch);
curl_close($ch);
</pre>
<p>Durch die <strong>CURLOPT_COOKIEJAR-Option</strong> werden nun alle Cookies, die in der Datei login_mit_cookie.php angelegt werden, in der Datei <strong>cookie.txt</strong> gespeichert. Wichtig ist, dass die cookie.txt beschreibbar sein muss (also CHMOD 777).</p>
<p>Nachdem der Login mittels Curl erfolgt ist, kann man &#8220;weitersurfen&#8221; und dabei die gesetzten Cookies verwenden. Beispielsweise möchte man sich nach dem Login seine Statistiken abrufen (wobei die URL für die Statistik beispielhaft mit stats.php bezeichnet wird).</p>
<pre class="brush: php;">$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, &quot;http://www.meinserver.de/stats.php&quot;);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');

$statsPage = curl_exec($ch);
curl_close($ch);</pre>
<p>In diesem Fall nutzen wir also, die CURLOPT_COOKIEFILE-Option, diese nutzt die Cookie-Daten aus der cookie.txt und sendet sie bei der entsprechenden Curl-Anfrage mit. Anschließend ist in der $statsPage-Variable die Statistik-Seite und kann z. B. mit dem echo-Befehl ausgegeben werden.</p>
<p>Auf diese Weise ist es leicht möglich einen Login automatisch per PHP und Curl durchzuführen, auch wenn die betreffende Website Cookies nutzt.</p>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/44/curl-und-php-fur-login-mit-cookie-nutzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Externe Inhalte einbinden aber allow_url_fopen aktivieren ist nicht möglich</title>
		<link>http://unter.strom.bz/11/externe-inhalte-einbinden-aber-allow_url_fopen-aktivieren-ist-nicht-moglich/</link>
		<comments>http://unter.strom.bz/11/externe-inhalte-einbinden-aber-allow_url_fopen-aktivieren-ist-nicht-moglich/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 18:30:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Programmierung]]></category>

		<guid isPermaLink="false">http://unter.strom.bz/?p=11</guid>
		<description><![CDATA[Vielleicht ist euch das Problem schon einmal begegnet, dass ihr gern von einem Webserver aus auf die Inhalte eines externen Servers zugreifen wollt. PHP bietet dafür standardmäßig einige Befehle.
Mittels file() lässt sich der Inhalt einer Datei in ein Array einlesen. Jede Zeile entspricht dabei einem Array-Element. Der filge_get_contents()-Befehl liest die Datei hingegen in einen String [...]]]></description>
			<content:encoded><![CDATA[<p>Vielleicht ist euch das Problem schon einmal begegnet, dass ihr gern von einem Webserver aus auf die Inhalte eines externen Servers zugreifen wollt. PHP bietet dafür standardmäßig einige Befehle.</p>
<p>Mittels <strong>file()</strong> lässt sich der Inhalt einer Datei in ein Array einlesen. Jede Zeile entspricht dabei einem Array-Element. Der filge_get_contents()-Befehl liest die Datei hingegen in einen String ein.<span id="more-11"></span></p>
<pre class="brush: php;">//kleines Beispiel

$pageAsArray = file(&quot;page.php&quot;);
print_r($pageAsArray);

$pageAsString = file_get_contents(&quot;page&quot;);
echo $pageAsString;</pre>
<p>Soweit so gut. Bei angeschaltetem allow_url_fopen können diese Befehle problemlos ausgeführt werden. Hat der Provider jedoch die Funktion allow_url_fopen in der php.ini deaktiviert, so erscheint eine Fehlermeldung und es können mit den normalen PHP-Funktionen keine externen Dateien augefufen werden. Ein kleiner Trick schafft hierbei Abhilfe. Statt die normalen Funktionen zu nutzen, verwendet (falls installiert) einfach die Curl-Bibliothek, die jedoch bei den meisten Providern integriert ist.<br />
<strong>Lösung des Problems &#8211; Schritt für Schritt:</strong></p>
<p>- Datei <strong>info.php</strong> erstellen, mit folgendem Inhalt</p>
<pre class="brush: php;">
phpinfo();
</pre>
<p>Datei ausführen und nach suchen nach &#8220;<strong>curl</strong>&#8220;.</p>
<p>Ist der Begriff nicht vorhanden, sieht&#8217;s schlecht aus, weil der Provider dann Curl (noch) nicht installiert hat. Evtl. mal nett nachfragen <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Ansonsten kann&#8217;s weiter gehen. Die Datei info.php kann wieder gelöscht werden.</p>
<p>Neue Datei test.php erstellen, die dann folgenden PHP-Code enthält:</p>
<pre class="brush: php;">
$ch = @curl_init(&quot;http://www.andererServer.de/extern.php&quot;);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$pageAsString = curl_exec( $ch );
curl_close($ch);
</pre>
<p>Auf den anderen Server die Datei extern.php mit irgendeinem Inhalt hochladen.<br />
test.php ausführen und es sollte der Inhalt der externen Datei angezeigt werden. Voila <img src='http://unter.strom.bz/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>So kann man trotz deaktiviertem allow_url_fopen ganz bequem auf externe Daten zugreifen. Curl bietet darüber hinaus noch viel mehr nützliche Funktionalitäten für allemöglichen Anwendungsfälle, z. B. Login in SSL-gesicherte Website oder Anmeldung bei Websites, die Cookies nutzen unvm. Dazu schreibe ich etwas in anderen Artikeln.</p>
<p>Bis bald.</p>
]]></content:encoded>
			<wfw:commentRss>http://unter.strom.bz/11/externe-inhalte-einbinden-aber-allow_url_fopen-aktivieren-ist-nicht-moglich/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

