<?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>techspread &#187; PHP</title>
	<atom:link href="http://www.techspread.de/tag/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.techspread.de</link>
	<description></description>
	<lastBuildDate>Wed, 08 Feb 2012 07:00:32 +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>Webserver unter Mac OS installieren</title>
		<link>http://www.techspread.de/6654/webserver-unter-mac-os-installieren</link>
		<comments>http://www.techspread.de/6654/webserver-unter-mac-os-installieren#comments</comments>
		<pubDate>Sat, 19 Feb 2011 21:08:55 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Mac OS]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MAMP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Webserver]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=6654</guid>
		<description><![CDATA[Diese Anleitung zeigt die Installation eines lokalen Webservers mit den Bordmitteln von Mac OS.]]></description>
			<content:encoded><![CDATA[<p>Wie manche bereits aus meiner <a href="/4297/webserver-unter-windows-installieren">Anleitung zur Installation eines Webservers unter Windows</a> wissen, verabscheue ich vorkonfigurierte Webserver wie zum Beispiel <a href="http://www.apachefriends.org/de/xampp.html">XAMPP</a>. Unter Mac OS scheint es wohl üblich zu sein, das fertige <a href="http://www.mamp.info/de/index.html">MAMP</a>-Paket zu installieren, dabei hat Mac OS von Haus aus schon fast alle Komponenten für einen lokalen Webserver mit dabei!<span id="more-6654"></span></p>
<h3>root-Rechte verschaffen</h3>
<p>Also setzen wir uns nun einen eigenen lokalen Webserver mit Mac OS Bordmitteln auf. Verschaffe dir zunächst einmal root-Rechte im Terminal:</p>
<pre>sudo -i</pre>
<h3>Webserver konfigurieren</h3>
<p>Danach wechselst du in den Konfigurationsordner des Apache-Webservers&#8230;</p>
<pre>cd /etc/apache2</pre>
<p>&#8230; und öffnest die Haupkonfigurationsdatei des Webservers:</p>
<pre>nano httpd.conf</pre>
<p>Entferne erst einmal das Rautezeichen vor der folgenden Zeile, damit das PHP-Modul mitgeladen wird:</p>
<pre>#LoadModule php5_module        libexec/apache2/libphp5.so</pre>
<p>Für die Entwicklung empfiehlt sich die Vergabe voller Zugriffsrechte. Ändere dazu den <em>&lt;Directory&gt;</em>-Block wie folgt ab:</p>
<pre>&lt;Directory /&gt;
   Options FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
&lt;/Directory&gt;</pre>
<p>Der <em>DirectoryIndex</em>-Eintrag muss noch um die Datei <em>index.php</em> erweitert werden:</p>
<pre>DirectoryIndex index.html index.php</pre>
<p>Damit du virtuelle Hosts (vhosts) anlegen kannst,  entfernst du das Rautezeichen vor der Zeile</p>
<pre>#Include /private/etc/apache2/extra/httpd-vhosts.conf</pre>
<p>und erstellst auch gleich deinen ersten vhost-Eintrag. Öffne dazu die Konfigurationsdatei für vhosts</p>
<pre>nano extra/httpd-vhosts.conf</pre>
<p>und kommentiere beide voreingestellten vhosts mit Rautezeichen aus. Füge dann folgenden Eintrag an das Ende hinzu:</p>
<pre>&lt;VirtualHost *:80&gt;
   ServerName &lt;Projekt&gt;
   DocumentRoot "/Users/&lt;Benutzer&gt;/Sites/&lt;Projekt&gt;"
&lt;/VirtualHost&gt;</pre>
<p>Ersetze hierbei <em>&lt;Projekt&gt;</em> durch den Namen deines Webprojektes und <em>&lt;Benutzer&gt;</em> durch deinen Benutzernamen. Jetzt fügst du noch einen Eintrag zum Ende der Datei <em>/etc/hosts</em> hinzu:</p>
<pre>echo "127.0.0.1 &lt;Projekt&gt;" &gt;&gt; /etc/hosts</pre>
<p><em>&lt;Projekt&gt;</em> muss hierbei wieder durch den Namen deines Projektes ersetzt werden. Dieser Eintrag muss unbedingt mit dem <em>ServerName</em>-Eintrag in der letzten editierten Datei übereinstimmen. Für jedes weitere Projekt musst du die letzten beiden Schritte wiederholen und den Webserver neustarten:</p>
<pre>apachectl restart</pre>
<p>Bei mir kommt immer eine Warnung, der Webserver startet trotzdem neu.</p>
<h3>PHP einrichten</h3>
<p>Jetzt richtest du erst einmal PHP ein. Kopiere dazu die Vorlage für die PHP-Konfigurationsvorlage und öffne diese in einem Editor:</p>
<pre>cp /etc/php.ini.default /etc/php.ini
nano /etc/php.ini</pre>
<p>Zum Entwickeln lohnt es sich, alle Fehler auszugeben. Passe also die Einstellung für <em>error_reporting</em> wie folgt an:</p>
<pre>error_reporting = E_ALL</pre>
<p>Schalte dann die Fehlerausgabe an:</p>
<pre>display_errors = On</pre>
<p>Danach aktivierst du noch ein paar gängige PHP-Module (entferne das Semikolon am Anfang der Zeile):</p>
<pre>extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
extension=php_xmlrpc.dll</pre>
<p>Gleich unter dem Extension-Block stellst du die richtige Zeitzone ein:</p>
<pre>date.timezone = Europe/Berlin</pre>
<p>Jetzt müssen noch die Angaben für den MySQL-Socket angepasst werden, da diese auf einen falschen Pfad verweisen:</p>
<pre>pdo_mysql.default_socket = /tmp/mysql.sock
mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock</pre>
<p>Jetzt ist ein Neustart des Webservers fällig:</p>
<pre>apachectl restart</pre>
<h3>MySQL-Server installieren</h3>
<p>Lade dir nun den <a href="http://www.mysql.de/downloads/mysql/">MySQL-Server</a> als 32-Bit dmg-Datei herunter und installiere alle drei Dateien aus dem Paket. Starte den Server dann über den Eintrag in den Systemeinstellungen. Der Server wird ohne root-Passwort installiert, sodass du nun erst einmal ein Passwort vergeben solltest:</p>
<pre>/usr/local/mysql/bin/mysql -uroot
UPDATE mysql.user SET Password=PASSWORD('&lt;Passwort&gt;') WHERE User='root';
FLUSH PRIVILEGES;
quit;</pre>
<p>Statt <em>&lt;Passwort&gt;</em> setzt du natürlich dein Passwort ein. Noch einmal den MySQL-Server über die Systemeinstellungen neustarten und dein lokaler Webserver ist fertig gestellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/6654/webserver-unter-mac-os-installieren/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Bilder in MySQL-Datenbank speichern</title>
		<link>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern</link>
		<comments>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern#comments</comments>
		<pubDate>Mon, 07 Feb 2011 14:40:44 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Bilder]]></category>
		<category><![CDATA[BLOB]]></category>
		<category><![CDATA[Nachteile]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Vorteile]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=6487</guid>
		<description><![CDATA[Dieser Artikel beleuchtet die Vor- und Nachteile des Speichern von Bildern in einer MySQL-Datenbank und zeigt ein simples PHP-Script, um Bilder in die Datenbank zu schreiben und wieder auszulesen.]]></description>
			<content:encoded><![CDATA[<p>Ich habe mich heute damit beschäftigt, wie man Bilder in einer relationalen Datenbank wie MySQL ablegen kann. Diese Methode hat viele Vorteile aber auch schlagkräftige Nachteile. Mit diesem Artikel beleuchte ich zunächst einmal die Vor- und Nachteile und zeige euch dann ein passendes PHP-Script, um Bilder in eine MySQL-Datenbank zu speichern und wieder auszulesen.<span id="more-6487"></span></p>
<h3>Vorteile</h3>
<p>Viele Vorteile ergeben sich aus dem Fakt, dass Informationen (Artikel, Texte etc) zusammen in einer Datenbank abgespeichert werden. Dadurch können Bilder nicht ohne weiteres einfach verwaisen und es wird die Integrität der Daten vereinfacht. Metadaten können ebenfalls problemlos mit den Bildern verknüpft werden.</p>
<p>Die Speicherung in einer Datenbanken bringt aber auch noch andere Vorteile mit sich. So können sehr schnell und einfach Load-Balancing-Systeme auf Datenbank-Ebene eingeführt werden. Eine Portierung von einem System auf ein anderes ist ebenfalls sehr einfach, da einfach ein Backup der Datenbank erstellt und auf einen anderen Server übertragen werden kann &#8211; die Anwendung ist dann sofort wieder einsatzbereit.</p>
<p>Auch ist die Rechteverwaltung innerhalb einer Datenbank leichter umzusetzen, als auf Dateisystem-Ebene.</p>
<p>Es ergeben sich sicherlich noch weitere Vorteile, die mir auf die schnelle nicht eingefallen sind <img src='http://www.techspread.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Nachteile</h3>
<p>Das Auslesen von Bildern aus einer Datenbank ist im Gegensatz zu einem direkten Zugriff auf das Dateisystem deutlich langsamer, da zunächst immer die Datenbankabfrage abgefragt werden muss. Zudem kann ein Browser die Bilder nicht ohne weiteres zwischenspeichern, da der Webserver nicht erkennen kann, ob das Bild seit dem letzten Besuch verändert wurde. Die Backup-Strategie muss auch angepasst werden, da Bilder in Datenbanken als BLOBs (Binary Large Objects) abgelegt werden. Dadurch ist es nicht mehr so einfach möglich, textbasierte, inkrementelle Sicherungen zu erstellen.</p>
<p>Diese Nachteile können jedoch durch intelligente Lösungen drastisch reduziert werden. So kann man z.B. per PHP-Script überprüfen, ob sich das Bild in der Datenbank verändert hat und entsprechende Header zurückgeben. Für die Datenbank-Sicherung kann z.B. ein <a href="http://dev.mysql.com/doc/refman/5.1/en/point-in-time-recovery.html">Point-in-Time Recovery</a> verwendet werden.</p>
<h3>PHP-Beispiel</h3>
<p>Nachdem ich nun die Vor- und Nachteile erläutert habe, stelle ich ein simple Lösung vor, um Bilder per PHP in eine Datenbank zu bringen und wieder auszulesen. Diese Lösung ist wirklich minimalistisch und kann sollte um Überprüfungen und weitere Funktionalitäten erweitert werden.</p>
<p>Zunächst einmal muss eine entsprechende Datenbank angelegt werden:</p>
<pre class="brush:sql">CREATE DATABASE imagedb;
CREATE TABLE imagedb.images (
	id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	image BLOB NOT NULL,
	mimetype VARCHAR(32) NOT NULL
);</pre>
<p>Nachdem die Datenbank angelegt wurde, erstellst du eine Datei namens <em>connect.php</em>, in der die MySQL-Verbindungsdaten hinterlegt werden und auch gleich die Verbindung zur Datenbank aufgebaut wird:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindungsdaten
	$hostname = 'localhost';
	$database = 'imagedb';
	$username = 'Dein DB-Benutzer';
	$password = 'Dein DB-Password';

	// MYSQL-Verbindung herstellen
	mysql_connect($hostname, $username, $password) or die(mysql_error());
	mysql_select_db($database) or die(mysql_error());
?&gt;</pre>
<p>Danach legst du die Datei <em>index.php</em> an, die für das Hochladen und Anzeigen der Bilder verantwortlich ist:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindung herstellen
	require 'connect.php';

	// Formular abgeschickt
	if(isset($_FILES['image'])) {

		// Datei hochgeladen
		if(is_uploaded_file($_FILES['image']['tmp_name'])) {

			// Verweis auf Bild
			$image = $_FILES['image']['tmp_name'];

			// Vorbereiten für den Upload in DB
			$data = addslashes(file_get_contents($image));

			// Metadaten auslesen
			$meta = getimagesize($image);
			$mime = $meta['mime'];

			// Bild in DB speichern
			mysql_query("INSERT INTO images VALUES('', '$data', '$mime')");
		}
	}
?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de"&gt;
	&lt;head&gt;
		&lt;meta http-equiv="content-type" content="text/html; charset=UTF-8" /&gt;
		&lt;title&gt;MySQL-Bilder-Datenbank&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Bild hochladen&lt;/h1&gt;
		&lt;form action="" method="post" enctype="multipart/form-data"&gt;
			&lt;input name="image" type="file" /&gt;
			&lt;input type="submit" value="hochladen" /&gt;
		&lt;/form&gt;
		&lt;h1&gt;Bilderliste&lt;/h1&gt;
		&lt;?php
			$result = mysql_query("SELECT id FROM images");
			while($row = mysql_fetch_object($result)) {
				echo '&lt;img alt="" src="image.php?id='.$row-&gt;id.'" /&gt;&lt;br /&gt;';
			}
		?&gt;
	&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Zuletzt wird die Datei <em>image.php</em> benötigt, die sich um das Auslesen der Bilder aus der Datenbank kümmert:</p>
<pre class="brush:php">&lt;?php
	// MySQL-Verbindung herstellen
	require 'connect.php';

	// Bild ausgeben
	$id = addslashed($_GET['id']);
	$result = mysql_query("SELECT image, mimetype FROM images WHERE id='$id'");
	$row = mysql_fetch_object($result);
	header("Content-type: $row-&gt;mimetype");
	echo $row-&gt;image;
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/6487/bilder-in-mysql-datenbank-speichern/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Wochendenden und Feiertage mit PHP berechnen</title>
		<link>http://www.techspread.de/5680/wochendenden-und-feiertage-mit-php-berechnen</link>
		<comments>http://www.techspread.de/5680/wochendenden-und-feiertage-mit-php-berechnen#comments</comments>
		<pubDate>Tue, 26 Oct 2010 12:51:04 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[berechnen]]></category>
		<category><![CDATA[Berechnung]]></category>
		<category><![CDATA[Feiertage]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=5680</guid>
		<description><![CDATA[Diese Anleitung zeigt die Berechnung von freien Tagen und Feiertagen mit PHP.]]></description>
			<content:encoded><![CDATA[<p>Gestern kam ich spontan auf die Idee, das folgende Problem zu lösen: anhand eines Datums soll PHP berechnen, ob es sich hierbei um einen freien Tag handelt. Zu den freien Tagen zähle ich in meinem Beispiel das Wochenende (Samstag und Sonntag) sowie die gesetzlichen Feiertage. Ich hatte eigentlich damit gerechnet, dass das ein schwieriges Unterfangen wird, aber eigentlich ist das alles ganz einfach.<span id="more-5680"></span></p>
<p>Das folgende Beispiel ist für Schleswig-Holstein ausgelegt, das Script muss also für andere Bundesländer etwas angepasst werden. Dabei hilft diese <a href="http://de.wikipedia.org/wiki/Feiertage_in_Deutschland">Übersicht über alle Feiertage und deren Berechnung</a>.</p>
<p>Feste Feiertage können einfach mit einem Datumscode eingetragen werden, bewegliche Feiertage werden (bis auf den Buß- und Bettag) in Deutschland in Relation zum Ostersonntag (<a href="http://de.wikipedia.org/wiki/Osterdatum">Osterdatum</a>) berechnet, für den es glücklicherweise direkt eine Funktion in PHP gibt. Alternativ kann man die <a href="http://de.wikipedia.org/wiki/Gau%C3%9Fsche_Osterformel">Gaußsche Osterformel</a> zur Berechnung des Ostersonntags benutzen.</p>
<p>Der folgende Codeschnipsel enthält keinerlei Überprüfungen der übergebenen Parameter, diese sollten für den produktiven Einsatz noch nachgepflegt werden.</p>
<pre>function freierTag($tag, $monat, $jahr) {

   // Parameter in richtiges Format bringen
   if(strlen($tag) == 1) {
      $tag = "0$tag";
   }
   if(strlen($monat) == 1) {
      $monat = "0$monat";
   }

   // Wochentag berechnen
   $datum = getdate(mktime(0, 0, 0, $monat, $tag, $jahr));
   $wochentag = $datum['wday'];

   // Prüfen, ob Wochenende
   if($wochentag == 0 || $wochentag == 6) {
      return true;
   }

   // Feste Feiertage werden nach dem Schema ddmm eingetragen
   $feiertage[] = "0101"; // Neujahrstag
   $feiertage[] = "0105"; // Tag der Arbeit
   $feiertage[] = "0310"; // Tag der Deutschen Einheit
   $feiertage[] = "2512"; // Erster Weihnachtstag
   $feiertage[] = "2612"; // Zweiter Weihnachtstag

   // Bewegliche Feiertage berechnen
   $tage = 60 * 60 * 24;
   $ostersonntag = easter_date($jahr);
   $feiertage[] = date("dm", $ostersonntag - 2 * $tage);  // Karfreitag
   $feiertage[] = date("dm", $ostersonntag + 1 * $tage);  // Ostermontag
   $feiertage[] = date("dm", $ostersonntag + 39 * $tage); // Himmelfahrt
   $feiertage[] = date("dm", $ostersonntag + 50 * $tage); // Pfingstmontag

   // Prüfen, ob Feiertag
   $code = $tag.$monat;
   if(in_array($code, $feiertage)) {
      return true;
   } else {
      return false;
   }
}
</pre>
<p>Wie man sieht, ist die Berechnung von Wochendenden und Feiertagen recht einfach. Diese Berechnung kann man sicherlich auch schnell in anderen Programmiersprachen abbilden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/5680/wochendenden-und-feiertage-mit-php-berechnen/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Webserver unter Windows installieren</title>
		<link>http://www.techspread.de/4297/webserver-unter-windows-installieren</link>
		<comments>http://www.techspread.de/4297/webserver-unter-windows-installieren#comments</comments>
		<pubDate>Wed, 21 Jul 2010 15:24:27 +0000</pubDate>
		<dc:creator>Patrick</dc:creator>
				<category><![CDATA[Sonstiges]]></category>
		<category><![CDATA[Anleitung]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WAMP]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.techspread.de/?p=4297</guid>
		<description><![CDATA[Heute zeige ich euch, wie ihr auf Pakete wie XAMPP verzichten könnt und eure eigene PHP-Entwicklungsumgebung aufsetzt.]]></description>
			<content:encoded><![CDATA[<p>Als Webentwickler bin ich zu Hause auf ein Testsystem angewiesen. Viele Leute empfehlen immer <a href="http://www.apachefriends.org/de/xampp.html">XAMPP</a> als Entwicklungsserver. Aber XAMPP ist zumindest für mich der absolute Graus: man weiß nicht, welche Einstellungen vom &#8220;Standard&#8221; abweichen, häufig zickt XAMPP rum und letztendlich muss man eh noch in der Konfiguration herumpfuschen, damit das System läuft, wie es soll. Ich vertraue da lieber auf meine jahrelang erprobte Eigeninstallation eines <a href="http://de.wikipedia.org/wiki/LAMP#Varianten">WAMP</a>-Servers. Deshalb zeige ich euch heute, wie ich diese Umgebung immer aufsetze.<span id="more-4297"></span></p>
<h2>Pakete herunterladen</h2>
<p>Zunächst einmal musst du folgende Pakete herunterladen:</p>
<ul>
<li><a href="http://httpd.apache.org/download.cgi">Apache Webserver</a><br />
Win32 Binary including OpenSSL</li>
<li><a href="http://www.mysql.de/downloads/mysql/">MySQL-Server</a><br />
in der Essentials-Version, nach Klick auf Download unten auf <em>» No thanks, just take me to the downloads!</em> drücken</li>
<li><a href="http://windows.php.net/download/">PHP</a><br />
unbedingt VC6 x86 Non  Thread Safe / Installer</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.techspread.de/4297/webserver-unter-windows-installieren/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

