<?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/"
	xmlns:series="http://unfoldingneurons.com/"
	>

<channel>
	<title>Bits, Bytes and my 5 cents &#187; PHP</title>
	<atom:link href="http://blog.encodingit.ch/category/programmieren/php-coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.encodingit.ch</link>
	<description>Life is just a technical game</description>
	<lastBuildDate>Wed, 08 Feb 2012 07:57:25 +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>LDAP Synchronisation Script</title>
		<link>http://blog.encodingit.ch/2012/02/ldap-synchronisation-script/</link>
		<comments>http://blog.encodingit.ch/2012/02/ldap-synchronisation-script/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 07:40:45 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Active Directory]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[LDAP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Planet]]></category>

		<guid isPermaLink="false">http://blog.encodingit.ch/?p=3159</guid>
		<description><![CDATA[Für einen Kunden wurde ich angefragt, ob ich ein Synchronisationsscript in PHP erstellen könne, welches die User samt Telefonnummer aus dem LDAP / AD ausliest und in eine MySQL-Tabelle umspeichert, so dass diese danach auf der Intranet-Seite angezeigt werden können. Leider wurde aus dem Auftrag nichts, da sich der User plötzlich nicht mehr gemeldet hatte, also dachte ich mir, veröffentlichen wir das Script halt, das es anderen vielleicht auch hilft.
Das könnte dich auch interessieren:<ol>
<li><a href='http://blog.encodingit.ch/2012/01/apache-mit-ldap-durch-xampp/' rel='bookmark' title='Apache mit LDAP durch XAMPP'>Apache mit LDAP durch XAMPP</a> <small>XAMPP ist ja eine ganz einfache Variante, wenn man schnell...</small></li>
</ol><img src="http://www.encodingit.ch/piwik/piwik.php?idsite=2&rec=1" style="border:0" alt="" />]]></description>
			<content:encoded><![CDATA[<p>Für einen Kunden wurde ich angefragt, ob ich ein Synchronisationsscript in PHP erstellen könne, welches die User samt Telefonnummer aus dem LDAP / AD ausliest und in eine MySQL-Tabelle umspeichert, so dass diese danach auf der Intranet-Seite angezeigt werden können. Leider wurde aus dem Auftrag nichts, da sich der User plötzlich nicht mehr gemeldet hatte, also dachte ich mir, veröffentlichen wir das Script halt, das es anderen vielleicht auch hilft.<br />
Damit das ganze funktioniert, muss das LDAP-Modul in der PHP.ini einkommentiert und die passende SO-Datei vorhanden sein.<br />
Unter Ubuntu und Debian geht das ganz einfach:</p>
<pre class="brush: bash; title: ; notranslate">
apt-get install php5-ldap
</pre>
<p>Auch andere Distros sind nicht allzu wild, genaueres dazu findet man zum Beispiel <a href="http://www.mediawiki.org/wiki/Extension:LDAP_Authentication/AD_Configuration_Examples#General_Configuration"  target="_blank" class="broken_link" rel="nofollow">hier</a>.</p>
<p>Das Script selbst war dann auch ganz einfach geschrieben, geplant war es, dieses jeweils mittels Cronjob alle paar Stunden laufen zu lassen, da sich die Benutzerdatenbank ja nicht gerade alle Minuten ändert. Also durchaus angemessen so!</p>
<p>So und hier ist also das Script.<br />
<span id="more-3159"></span></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
	// Adresse des Domänencontrollers:
	$ldap_server = &quot;ldap://173.194.35.24&quot;;

	// Konto für den Zugriff:
	$auth_user = &quot;sync@domain.local&quot;;
	$auth_pass = 'password';

	//Login für MySQL:
	$server = &quot;localhost&quot;;
	$user = &quot;sync&quot;;
	$pass = &quot;password&quot;;
	$db = &quot;users&quot;;

	// Mit LDAP Server verbinden:
	if (!($connect=@ldap_connect($ldap_server))) {
		die(&quot;Keine Verbindung zum Verzeichnis-Server möglich.&quot;);
	}

	// Diese Parameter sind nötig für den Zugriff auf ein Active Directory:
	ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION, 3);
	ldap_set_option($connect, LDAP_OPT_REFERRALS, 0);

	// An Server binden:
	if (!($bind=@ldap_bind($connect, $auth_user, $auth_pass))) {
		die(&quot;Bind fehlgeschlagen.&quot;);
	}

	// BaseDN festlegen:
	$base_dn = &quot;CN=Users,DC=DOMAIN,DC=local&quot;;

	// LDAP filter setzen: Nur Kontakt- und Benutzer-Objekte sollen zurückgegeben werden
	$filter = &quot;(|(objectClass=contact)(objectClass=user))&quot;;

	// Mit MySQL Server verbinden:
	mysql_connect($server,$user,$pass) or die (&quot;Keine Verbindung mit SQL Server möglich&quot;);
	mysql_select_db($db) or die (&quot;Die Datenbank existiert nicht.&quot;);

	// Suche starten:
	if (!($search=@ldap_search($connect,$base_dn,$filter))) {
		die(&quot;Durchsuchen des LDAP-Servers fehlgeschlagen.&quot;);
	}
	$anzahl = ldap_count_entries($connect,$search);

	// Ergebnis der Suche in der Variablen $info ablegen:
	$info = ldap_get_entries($connect, $search);

	// Nur die relevanten Teile des $info-Arrays in ein $ergebnis-Array übernehmen und Umlaute dekodieren:
	for ($i=0; $i		//$ergebnis[$i][&quot;displayname&quot;]    = utf8_decode($info[$i][&quot;displayname&quot;][0]);
		$ergebnis[$i][&quot;cn&quot;] = utf8_decode($info[$i][&quot;cn&quot;][0]);
		$ergebnis[$i][&quot;telephonenumber&quot;] = $info[$i][&quot;telephonenumber&quot;][0];
	}

	// Array alphabetisch sortieren anhand einer Vergleichsfunktion:
	usort($ergebnis, 'vergleich');

	// Datenbank leeren:
	$leeren = mysql_query(&quot;TRUNCATE TABLE users&quot;) or die(&quot;Datenbank konnte nicht geleert werden&quot;);

	// Array $ergebnis in einer Tabelle ausgeben:
	for ($i=0; $i
		//Leere Namen ausschliessen:
		if (!empty($ergebnis[$i][&quot;cn&quot;]))
		{
			//Variabeln aufbereiten:
			$name = $ergebnis[$i][&quot;cn&quot;];
			$phone = $ergebnis[$i][&quot;telephonenumber&quot;];

			// Daten in Datebank schreiben:
			$eintrag = &quot;INSERT INTO users (name, phone) VALUES ('$name', '$phone')&quot;;

			//Datensätze einfügen:
			$eintragen = mysql_query($eintrag) or die(&quot;Datensätze konnten nicht komplett eingefügt werden&quot;);
		}
	}

	//Abschliessende Meldung ausgeben:
	echo &quot;Synchronisation done!&quot;;

	function vergleich($wert_a, $wert_b)
	{
		// Sortierung nach dem surename
		$a = $wert_a[&quot;cn&quot;];
		$b = $wert_b[&quot;cn&quot;];
		if ($a == $b) {
			return 0;
		}
			return ($a &lt; $b) ? -1 : +1; 	}
?&gt;
</pre>
<p>Die Datenbank, in welche geschrieben wird, trägt den Namen &#8220;Users&#8221; und muss die beiden Spalten &#8220;name&#8221; und &#8220;phone&#8221; aufweisen.<br />
Ich hoffe, es hilft irgendwem!</p>
<br /><p>Das könnte dich auch interessieren:<ol>
<li><a href='http://blog.encodingit.ch/2012/01/apache-mit-ldap-durch-xampp/' rel='bookmark' title='Apache mit LDAP durch XAMPP'>Apache mit LDAP durch XAMPP</a> <small>XAMPP ist ja eine ganz einfache Variante, wenn man schnell...</small></li>
</ol></p><img src="http://www.encodingit.ch/piwik/piwik.php?idsite=2&rec=1" style="border:0" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.encodingit.ch/2012/02/ldap-synchronisation-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobiles Büro: einfach und anspruchslos</title>
		<link>http://blog.encodingit.ch/2009/04/mobiles-buro-einfach-und-anspruchslos/</link>
		<comments>http://blog.encodingit.ch/2009/04/mobiles-buro-einfach-und-anspruchslos/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 21:37:56 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[OpenSource]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[WWW]]></category>

		<guid isPermaLink="false">http://compr00t.co.funpic.de/?p=273</guid>
		<description><![CDATA[Seit längerem bin ich schon auf der Suche nach einem passenden Groupware-Tool. Diese sollte anspruchslos sein und auf einem simplen FTP-Server rennen!
Als Funktionen benötige ich die Möglichkeit Aufgaben zu planen, Notizen schreiben, gearbeitete Zeit aufzuzeichnen und in einer brauchbaren Form als Statistik auszugeben.<img src="http://www.encodingit.ch/piwik/piwik.php?idsite=2&rec=1" style="border:0" alt="" />]]></description>
			<content:encoded><![CDATA[<p>Seit längerem bin ich schon auf der Suche nach einem passenden Groupware-Tool. Diese sollte anspruchslos sein und auf einem simplen FTP-Server rennen!<br />
Als Funktionen benötige ich die Möglichkeit Aufgaben zu planen, Notizen schreiben, gearbeitete Zeit aufzuzeichnen und in einer brauchbaren Form als Statistik auszugeben.</p>
<p>Als erstes bin ich auf <a href="http://www.phprojekt.com/"  target="_blank">PHProject</a> gestossen. Damit habe ich dann auch eine Zeit lang gearbeitet, doch leider haben mich kleine Fehler, das schlichte Design und die ein bisschen überfüllte und unübersichtliche Übersicht immer gestört.</p>
<p><a href="http://blog.encodingit.ch/wp-content/uploads/2009/04/php_login1.png"  rel="lightbox[273]"></a> <a href="http://blog.encodingit.ch/wp-content/uploads/2009/04/phproject1.png"  rel="lightbox[273]"></a></p>
<p>Mit der Zeit habe ich die Groupware immer weniger benutzt und das Projekt ist mehr oder weniger in Vergessenheit geraten.</p>
<p>Doch dann bin ich über ein <span class="removed_link" title="http://ubuntublog.ch/applikationen/phprojekt-und-opengoo-in-furtwangen">Artikel</span> im Planet gestolpert. Dabei wurden mehrere Groupwares angesprochen. Diese habe ich auch gleich ausprobiert.</p>
<p>Leider aber wollten die meisten der Groupwares nicht meinen ansprüchen genügen oder sich nicht mit PHP und MySQL begnügen. Bis auf eines: <a href="http://opengoo.org/"  target="_blank">OpenGoo</a>!</p>
<p>Obwohl es ein bisschen langsam ist und sehr sehr oft einen Error liefert (was aber auch am Server liegen kann) bin ich sehr zufrieden damit, da es sehr übersichtlich ist und meine geforderten Funktionen erfüllt.</p>
<p><a href="http://blog.encodingit.ch/wp-content/uploads/2009/04/login1.jpg"  rel="lightbox[273]"></a></p>
<p>Dadurch will ich es hier kurz vorstellen:</p>
<p>Die Anforderungen sind sehr simpel: PHP und MySQL.</p>
<p><a href="http://blog.encodingit.ch/wp-content/uploads/2009/04/overview1.jpg"  rel="lightbox[273]"></a></p>
<p>Die ganzen Aufgaben, Task, Notes etc sind in sogenannte Workspaces organisiert. So kann man z.B. eine Workspace für Privat und eine für die Arbeit erstellen. Wenn man eine Workspace anwählt, werden auch nur diese Aufgaben angezeigt. Weiter hat man auch die Möglichkeit einzelne User für Workspaces zu berechtigen.</p>
<p><a href="http://blog.encodingit.ch/wp-content/uploads/2009/04/kalender1.jpg"  rel="lightbox[273]"></a></p>
<p>Ein weiteres gutes Feature ist auch, dass man für Task einen Zeitbutton hat, welcher automatisch die gearbeitete Zeit misst.</p>
<p>Sehr nützlich ist auch die Versionskontrolle für hochgeladene Files. Man hat die Möglichkeit jedes Update eines Files mit einem Kommentar zu versehen, so dass man später genau nachvollziehen kann, wann was geändert wurde.</p>
<p>Alles in allem trifft es meine Vorstellungen sehr genau <img src='http://blog.encodingit.ch/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<img src="http://www.encodingit.ch/piwik/piwik.php?idsite=2&rec=1" style="border:0" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.encodingit.ch/2009/04/mobiles-buro-einfach-und-anspruchslos/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

