<?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>Fladi Blog &#187; PHP</title>
	<atom:link href="http://www.fladi.de/kategorie/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.fladi.de</link>
	<description>Die Welt aus den Augen eines Webmuckel</description>
	<lastBuildDate>Fri, 02 Dec 2011 09:08:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Verschlüsseltes LDAP (LDAPS) nach Upgrade von Debian Etch auf Lenny</title>
		<link>http://www.fladi.de/2010/11/01/verschluesseltes-ldap-ldaps-nach-upgrade-von-debian-etch-auf-lenny/</link>
		<comments>http://www.fladi.de/2010/11/01/verschluesseltes-ldap-ldaps-nach-upgrade-von-debian-etch-auf-lenny/#comments</comments>
		<pubDate>Mon, 01 Nov 2010 12:35:51 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ubuntu/Debian]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[ldaps]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=292</guid>
		<description><![CDATA[Nach einem Dist-Upgrade von Debian Etch auf Lenny funktionierte bei mir die verschlüsselte LDAP Abfrage nicht mehr. Wir haben auf dem Debian-Server ein zentrales ROOT-CA installiert und in der /etc/ldap/ldap.conf entpsrechend konfiguriert: TLS_CACERT /etc/ldap/certs/our_Rootzertifikat.cer TLS_REQCERT never Nach dem Upgrade funktionierte &#8230; <a href="http://www.fladi.de/2010/11/01/verschluesseltes-ldap-ldaps-nach-upgrade-von-debian-etch-auf-lenny/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p style="text-align: left;"><span style="font-size: small;">Nach einem Dist-Upgrade von Debian Etch auf Lenny funktionierte bei mir die verschlüsselte LDAP Abfrage nicht mehr. Wir haben auf dem Debian-Server ein zentrales ROOT-CA installiert und in der /etc/ldap/ldap.conf entpsrechend konfiguriert:</span></p>
<blockquote><p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">TLS_CACERT /etc/ldap/certs/our_Rootzertifikat.cer<br />
TLS_REQCERT never </span></span></p>
</blockquote>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">Nach dem Upgrade funktionierte aber die Authentifizierung in allen PHP-Applikationen (wie z.B. das TYPO3-Backend) nicht mehr. Das der Fehler nicht an den Applikationen bzw. PHP lag, war also recht offensichtlich. </span></span></p>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">Weitere Sicherheit in diese These brachte, das auch auf der Kommandozeile ein Abfrage via</span></span></p>
<blockquote><p style="text-align: left;"><span style="font-size: small;">ldapsearch -x -W -b &#8216;ou=FLADI,o=FLADI-DIR&#8217; -H ldaps://ldap.fladi.de:636 -D &#8220;cn=LOOKUP,ou=SVC,o=ADM&#8221; &#8216;(&amp;(objectClass=Persons)(cn=LU1))&#8217; -d 1</span></p>
</blockquote>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">nicht möglich war und als Ergebnis ein weitesgehend nichtssagendes</span></span></p>
<blockquote><p style="text-align: left;"><span style="font-size: small;">ldap_sasl_bind(SIMPLE): Can&#8217;t contact LDAP server (-1)</span></p>
</blockquote>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">lieferte. Da der Connect zum LDAP-Server jedoch funktionierte, musste es ein Fehler beim eigentlichen BIND sein. Entsprechendes debugging während einer Anmeldung durch eine PHP-Anwendung zeigte dies ebenso.</span></span></p>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">Als Ursache stellte sich heraus, dass mit Wechsel von Etch auf Lenny die OpenLDAP-Implementierung nicht mehr gegen OpenSSL verlinkt ist, sondern gegen GnuTLS. Diese interpretiert die ein oder andere Konfiguration wohl verschieden. Obgleich unsere Konfiguration (s.o.) ja schon recht überschaulich ist, lag hier der Fehler. Das Zertifikat wurde nicht richtig gelesen.</span></span></p>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: small;">Abhilfe schaffte dann, anstelle der direkten Angabe des Zertifikates nur noch das Verzeichnis mit Zertifikaten zu konfigurieren.</span></span></p>
<blockquote><p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-size: small;">TLS_CACERTDIR /etc/ldap/certs/</span></span></span></p>
</blockquote>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-size: small;">Seitdem klappt wieder alles wie es soll.</span></span></span></p>
<p style="text-align: left;"><span style="font-size: x-small;"><span style="font-size: x-small;"><span style="font-size: small;">Nachtrag: Die o.g. Server-Adressen, Usernamen &#8230; wurden ersetzt und sind so in der Realität nicht zu gebrauchen. :-)</span></span></span></p>
<p style="text-align: left;"><span style="font-family: Arial; font-size: x-small;"><br />
</span></p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2010/11/01/verschluesseltes-ldap-ldaps-nach-upgrade-von-debian-etch-auf-lenny/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Limit Funktion mit Oracle und PHP für jqGrid</title>
		<link>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/</link>
		<comments>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 10:29:35 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=208</guid>
		<description><![CDATA[Für ein Projekt habe ich gerade mit dem tollen jqgrid-Plugin für jQuery gearbeitet. Damit lassen sich recht schnell und einfach Tabellendaten dynamisch darstellen. Das Plugin ist sehr gut dokumentiert und es gibt viele Beispiele. Diese beziehen sich aber i.d.R. auf &#8230; <a href="http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p style="text-align: left;">Für ein Projekt habe ich gerade mit dem tollen <a title="jqGrid jQuery Grid Plugin" href="http://www.trirand.com/blog/">jqgrid</a>-Plugin für jQuery gearbeitet. Damit lassen sich recht schnell und einfach Tabellendaten dynamisch darstellen. Das Plugin ist sehr gut dokumentiert und es gibt viele Beispiele. Diese beziehen sich aber i.d.R. auf MySQL. Nun habe ich hier aber eine Oracle Datenbank aus der ich die Daten beziehe.</p>
<p style="text-align: left;">jqGrid zeigt die Daten standardmässig &#8220;gepaged&#8221; an, d.h. nur eine bestimmte Anzahl Datensätze pro Seite. Diese werden dynamisch via Ajax-Request neu gelesen. Da wir aber selbstverständlich nicht immer alle Sätze aus der Datenbank lesen wollen und anschliessend filtern, soll das Query nur die nötigen Sätze zurückliefern.</p>
<p style="text-align: left;">In MySQL ist das einfach mit der <a title="MySQL Limit in PHP" href="http://php.about.com/od/mysqlcommands/g/Limit_sql.htm">Limit-Funktion</a> möglich. Diese Funktion gibt es so leider in Oracle nicht, weshalb man etwas umständlicher zum Ziel kommen muss. Dazu umfassen wir uns eigentlichs SQL (hier ###select###) zusätzlich.</p>
<blockquote><p style="text-align: left;">SELECT   *   FROM <br />
 (<br />
 SELECT<br />
 r.*, ROWNUM as row_number <br />
 FROM<br />
 ( ###select### ORDER BY ###sidx### ###sord###) r<br />
 WHERE<br />
 ROWNUM &lt;= :end_row<br />
 )<br />
 WHERE :start_row &lt;= row_number</p>
</blockquote>
<p style="text-align: left;">Da ich meine SQL in diesem Projekt als TXT-Datei einlese habe ich hier 3 Marker die ich anschliessend mit den entsprechenden Werten ersetze um mein tatsächliches Statement zu bekommen.</p>
<blockquote><p style="text-align: left;">$sql = file_get_contents(&#8216;modules/reports/sql/oracle_limit-wrap.sql&#8217;);<br />
 $sql = str_replace(&#8216;###select###&#8217;,$select,$sql);<br />
 $sql = str_replace(&#8216;###sidx###&#8217;,$sidx,$sql);<br />
 $sql = str_replace(&#8216;###sord###&#8217;,$sord,$sql);</p>
</blockquote>
<p style="text-align: left;">###select### / $select ist das SQL mit dem ich die eigentlich gewollten Daten aus der Datenbank ziehe.<br />
 ###sidx### und ###sord### sind die Parameter die von jqGrid beim Update der Ansicht übergeben werden (Sort-Index und Sort-Order).</p>
<p style="text-align: left;">Bevor wir nun unser neues SQL abschicken müssen wir noch :start_row und :end_row ermitteln. Diese sind abhängig von den von jqGrid übergebenen Parametern (<strong>$limit</strong> und <strong>$start</strong>). Sie kommen aus der Berechnung der Gesamtsätze wie es im jqGrid-Beispiel zu sehen ist. <strong>$count</strong> ist hierbei die Gesamtzahl aller Sätze die wir via<em> &#8220;select count(*) &#8230;&#8221;</em> ermittelt haben.</p>
<blockquote><p style="text-align: left;">if( $count &gt; 0 ) { <br />
 $total_pages = ceil($count/$limit); <br />
 } else { <br />
 $total_pages = 0; <br />
 }</p>
<p>if ($page &gt; $total_pages) $page=$total_pages;<br />
 $start = $limit*$page &#8211; $limit+1;<br />
 $end = $start + $limit-1;<br />
 if($start &lt;0) $start = 0;</p>
</blockquote>
<p style="text-align: left;">Nun aber endlich das Query ausführen:</p>
<blockquote><p style="text-align: left;">$stmt = oci_parse($conn,$sql);<br />
 oci_bind_by_name($stmt, &#8216;:start_row&#8217;, $start);<br />
 oci_bind_by_name($stmt, &#8216;:end_row&#8217;, $end);    <br />
 oci_execute($stmt);<br />
 $rows_per_page = $limit;    <br />
 ocisetprefetch($stmt, $rows_per_page);</p>
<p>// build result-array<br />
 while ($row = oci_fetch_array($stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {<br />
 $rows[] = $row;                  <br />
 }</p>
</blockquote>
<p style="text-align: left;">Zu beachten ist noch, dass wir in unserem Result-Array pro Datensatz jetzt noch eine zusätzliches Feld ROW_NUM haben, das wir in PHP oder im jqGrid noch rausfiltern können.</p>
<p style="text-align: left;"><span style="text-decoration: underline;">Zusammenfassung in einfachen Worten:</span><br />
 Anstelle der LIMIT-Funktion umfassen wir unser SELECT nochmals mit einem zusätzlichen SQL und übergeben diese die Limit-Parameter.</p>
<p style="text-align: left;">OFFTOPIC: Wie bringe ich WordPress bei Quellcode schön darzustellen?</p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/11/13/mysql-limit-funktion-mit-oracle-und-php-fuer-jqgrid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HowTo: PHP-Script per cron ausführen</title>
		<link>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/</link>
		<comments>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 10:22:12 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=203</guid>
		<description><![CDATA[Um ein PHP-Script zeitgesteuert auszuführen nimmt man unter Linux am besten einen Cronjob. Nun gibt es viele Möglichkeiten das PHP aufzurufen. Als Kommandozeile etwa. Hier ist es aber nicht immer ganz einfach, das auch zum Laufen zu bekommen. Was liegt &#8230; <a href="http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p style="text-align: left;">Um ein PHP-Script zeitgesteuert auszuführen nimmt man unter Linux am besten einen Cronjob. Nun gibt es viele Möglichkeiten das PHP aufzurufen. Als Kommandozeile etwa. Hier ist es aber nicht immer ganz einfach, das auch zum Laufen zu bekommen. Was liegt also näher als das Script als &#8220;Webseite&#8221; aufzurufen. Alles was man dazu braucht ist der Lynx-Browser. Dieser textbasierte Browser ist z.B. unter Debian mit einem einfachen &#8220;<em>apt-get install lynx</em>&#8221; schnell installiert.</p>
<p style="text-align: left;">Nun braucht man nur noch die URL unter der das Script normalerweise via Web aufrubar ist. Mit dem Befehl &#8220;<em>crontab -e</em>&#8221; editieren wir unsere Cronjobs. So sieht dann der Eintrag aus um unser Script jede Minute laufen zu lassen:</p>
<blockquote><p style="text-align: left;">* * * * * lynx -dump http://fladi.de/wp-content/upload/scheduler.php &gt;/dev/null 2&gt;&amp;1</p>
</blockquote>
<p style="text-align: left;"><span style="text-decoration: underline;">Erklärung:</span><br />
 <strong>* * * * * </strong>- Zeitsteuerung, wann der Job laufen soll (siehe <a title="Cron erklärt" href="http://de.wikipedia.org/wiki/Cron">Wikipedia</a>)<br />
 <strong>lynx -dump &lt;adresse&gt;</strong> &#8211; der Aufruf der URL im Browser <br />
 <strong>&gt;/dev/null 2&gt;&amp;1</strong> &#8211; verhindern, dass bei jedem Cron-Aufruf eine Mail gesendet wird</p>
<p style="text-align: left;"> </p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/10/10/howto-php-script-per-cron-ausfuehren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5 ich komme</title>
		<link>http://www.fladi.de/2009/08/05/php5-ich-komme/</link>
		<comments>http://www.fladi.de/2009/08/05/php5-ich-komme/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 17:21:34 +0000</pubDate>
		<dc:creator>Fladi</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[links]]></category>

		<guid isPermaLink="false">http://www.fladi.de/?p=194</guid>
		<description><![CDATA[Seit kurzem beschäftige ich mich mal wieder etwas intensiver mit PHP. Dann gibt es sicher auch mal hier wieder öfter ein Update, als das in letzter Zeit der Fall war. Als erstes möchte ich Dir die Seite phphatesme.com ans Herz &#8230; <a href="http://www.fladi.de/2009/08/05/php5-ich-komme/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Seit kurzem beschäftige ich mich mal wieder etwas intensiver mit PHP. Dann gibt es sicher auch mal hier wieder öfter ein Update, als das in letzter Zeit der Fall war.</p>
<p>Als erstes möchte ich Dir die Seite <a href="http://www.phphatesme.com">phphatesme.com</a> ans Herz legen. Seitdem ich etwas tiefer in die Materie einsteige ist das eine der Seiten die ich quasi täglich besuche. Nebenbei hatte die Seite vor kurzem ihren noch jungen ersten Geburtstag. Trotzdem erfreut sie sich großer stetig wachsender Beliebtheit, was wohl auf die durchweg gute Qualität der Artikel zurückzuführen ist. Bei den rund 400 Artikeln dürfte für jeden etwas dabei sein.</p>
<p><br class="spacer_" /></p>

<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.fladi.de/2009/08/05/php5-ich-komme/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

