PHP: cURL als Alternative für allow_url_fopen

26. Mai 2011, 17:18 von Tobi | 7 Kommentare

Gestern bekam ich eine Mail von meinem Webhoster, dass ab sofort die aktuellste PHP-Version 5.3.6 zur Verfügung steht. Die neue Version ist nun direkt als Modul in Apache integriert, anstatt wie früher als CGI-Programm. Dadurch sollen sich spürbare Geschwindigkeitsverbesserungen ergeben. Tatsächlich muss ich sagen, dass mein Blog deutlich schneller lädt, vor allem der Admin-Bereich.

Allerdings wurde aus Sicherheitsgründen auch die Funktion “allow_url_fopen” standardmäßig deaktiviert. Damit funktioniert mein kürzlich vorgestelltes Skript zum RSS-Feeds auslesen leider nicht mehr. Den Code habe ich auch zum Anzeigen der “Hartware News” in der Sidebar ganz unten auf der Startseite verwendet. Also was tun? Zurück auf die alte PHP-Version und die bessere Performance herschenken? Nein, kommt nicht in Frage. Also musste mein Skript angepasst werden. War sogar deutlich einfacher als ich anfangs dachte.

Anstatt des bisherigen Codes zum Laden des RSS-Feeds

$xml =simplexml_load_file('http://www.hartware.net/xml/news.rdf

hier die Lösung mit cURL:

$url = "http://www.hartware.de/xml/news.rdf";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($xml_raw)

RSS-Feeds mit PHP auslesen

10. Mai 2011, 16:30 von Tobi | 10 Kommentare

Nachfolgend ein kleiner Codeschnipsel, wie man einen RSS-Feed mit PHP ausliest. Mit dem gleichen Code sind auch die “Hartware News” in der Sidebar ganz unten auf der Startseite meines Blogs realisiert. Die Ausgabe könnt ihr natürlich mit HTML formatieren und an euer Design anpassen.

// Feed einlesen
if( !$xml = simplexml_load_file('http://www.hartware.net/xml/news.rdf') ) {
    die('Fehler beim Einlesen der XML Datei!');
}

// Ausgabe Array
$out = array();

// auszulesende Datensaetze
$i = 5;

// Items vorhanden?
if( !isset($xml->channel[0]->item) ) {
	die('Keine Items vorhanden!');
}

// Items holen
foreach($xml->channel[0]->item as $item) {
	if( $i-- == 0 ) {
		break;
	}

	$out[] = array(
		'title'        => (string) $item->title,
		'description'  => (string) $item->description,
		'link'         => (string) $item->guid,
		'date'         => date('d.m.Y H:i', strtotime((string) $item->pubDate))
	);
}

// Eintraege ausgeben
foreach ($out as $value) {
	echo $value['title'].$value['description'].$value['link'];
}

Linksammlung – PHP Frameworks

5. Februar 2011, 08:52 von Tobi | 6 Kommentare

Nachfolgend eine Linksammlung mit verschiedenen PHP Frameworks. Die bekannteren Frameworks sind fett markiert.

Meine Favoriten sind das “Adventure PHP Framework” und “Kohana”. Beide Frameworks sind relativ schlank, bieten aber trotzdem sehr viele durchdachte Funktionen. Zudem verfügen beide über eine gute Dokumentation und die Entwicklung schreitet stetig voran.

Adminer – schlankes Tool zur Verwaltung von Datenbanken

28. Dezember 2010, 10:38 von Tobi | 1 Kommentar

Zur Administration von MySQL-Datenbanken nutzen die meisten Webentwickler sicherlich phpMyAdmin.
Was tut man aber wenn phpMyAdmin nicht verfügbar ist und man nur ganz schnell eine Änderung an der Datenbank vornehmen muss? Die rund 900 Dateien von phpMyAdmin mit insgesamt 15 MByte auf den Server schieben und installieren?
Eher nicht – und genau hier kommt das PHP-basierende Tool Adminer zum Einsatz.

Adminer besteht aus einer einzelnen PHP-Datei und arbeitet mit MySQL, PostgreSQL, SQLite, MS SQL und Oracle zusammen. Die aktuelle Version 3.1.0 wiegt gerade einmal 292 KByte, kommt mit einer großen Anzahl von Sprachen daher und bietet annähernd dieselbe Funktionalität wie phpMyAdmin. Außerdem ist das Tool frei zur kommerziellen sowie nicht-kommerziellen Verwendung.

Download Adminer 3.1.0

Weiterlesen →

PHP Benchmark-Klasse

31. Oktober 2010, 01:03 von Tobi | Keine Kommentare

In manchen Situationen kann eine kleine Benchmark-Klasse für PHP ganz sinnvoll sein. Beispielsweise kann man damit sehen, wie lange die Laufzeit bestimmter Codeabschnitte ist.
Hier die Klasse:

/**
 * Benchmark-Klasse um Laufzeit von PHP-Code zu überprüfen
 */

class Benchmark {
	private $starttime;
	private $stoptime;
	private $resulttime;

	public function start() {
		$this->starttime = microtime(true);
	}

	public function stop() {
		$this->stoptime = microtime(true);
	}

	public function result() {
		$this->resulttime = $this->stoptime-$this->starttime;
		return $this->resulttime;
	}
}

Hier noch eine kleine Erklärung, wie man die Klasse nutzt:

// Objekt erzeugen
$Benchmark = new Benchmark();

// Startzeit festlegen
$Benchmark->start();

// Endzeit festlegen
$Benchmark->stop();

// Laufzeit mit vier Nachkommastellen ausgeben
echo 'Laufzeit: '.number_format($Benchmark->result(),4).' sec.';

Webseite optimieren – HTTP-Requests reduzieren

3. Januar 2010, 12:32 von Tobi | 2 Kommentare

Viele Webseiten besitzen oft lange Ladezeiten. Das kann mitunter viele Ursachen haben. Ein häufig augtretendes Problem ist aber, dass oft recht viele HTTP-Requests gemacht werden werden. Heutzutage benötigen größere Seiten locker 40 Requests und mehr.

Es muss für jedes Bild, jede JS- und CSS-Datei eine neue HTTP-Verbindung zwischen Browser und Server geöffnet werden. Da viele Browser oft nur 2-4 parallele HTTP-Requests zulassen, ist dies ein deutlicher Flaschenhals.

Um eine Beschleunigung des Ladevorgangs zu erreichen, könnte man nun entweder die Anzahl der parallelen Requests erhöhen oder die Anzahl der benötigten Requests verringern.

Eine recht einfache Lösung, um die Requests bereits als Developer niedrig zu halten, ist die Kombination von CSS- und JavaScript-Dateien. Auch nachträglich lassen sich mit entsprechenden PHP-Tools deutliche Performancezuwächse erziehlen.

Empfehlenswert ist vor allem minify. Es fügt alle CSS- und JavaScript-Dateien zu jeweils einer Datei zusammen. Beispielsweise hat man im Ursprungszustand drei CSS- und sieben JavaScript-Dateien eingebunden. minify macht daraus eine CSS- und eine JavaScript-Datei. Zusätzlich werden unnötige Leerzeichen und Tabs entfernt und die Dateien werden gzip-kodiert mit optimalen HTTP-Cache-Headern gesendet.
Den Download und eine Dokumentation zu dem Tool findet ihr direkt auf der minify-Homepage.