installation.de

Ein neues WordPress-Weblog

Archive for the ‘ PHP ’ Category

Vor 3 Tagen habe ich mich mit dem update von PHP 5.2.6 auf PHP 5.3.0 beschäftigt. Da das Neue ca. 15% schneller und weniger Resourcen fressen soll habe ich mich dazu entschlossen es zu benutzen.
Vorsicht: Bekannte Funktionen wie split, ereg, eregi und andere sind nun deprecated! Funktionieren aber natürlich somit trotzdem noch. Ein paar neue Feautures gibt es auch wie z.B. goto (sollte man aber nur bedacht einsetzen. Es ist z.B. KEINE alternative zu der Verwendung Funktionen oder Switches), namespaces (für komplexere projekte mit vielen dateien und klassen sehr sehr nützlich) und nowdoc syntax (<<<EOT & <<<EOD etc. | passend zu meinem Beitrag Die Ausgabemethode <<<EOF in PHP)

Alle Neuerungen und Änderungen und Migrations-Guide gibt es bei php.net http://www.php.net/archive/2009.php#id2009-06-30-1.

Eine beschleunigung nach dem Update konnte ich persönlich nicht 100%ig feststellen.

Probleme nach dem Update? Skripte laufen nicht mehr und man sieht nur noch eine weiße Seite?
Dann liegt das vermutlich an Einstellungen in der php.ini. Diese wurde in PHP 5.3 neu strukturiert und kann somit leider nicht einfach durch die bestehende php.ini ersetzt werden. Wer glaubt er habe alle markanten Einstellungen in die neue php.ini übertragen dem rate ich zu einem Dateivergleichprogramm wie ExamDiff.
Dieses zeigt einem alle unterschieder von der alten php.ini gegenüber der neuen php.ini an damit man auch ja nichts vergisst ;). Ich hatte z.B. vergessen short_open_tag wieder auf on zu stellen. Dies ermöglicht das coden mit <? … statt nur mit <?php …!

Wer kennt das nicht, Umlaute und Sonderzeichen werden falsch angezeigt obwohl man die Standards eingetragen hat:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
...

Nun kann man auch ein Default-Charset für diverse Dateien schon in der Apache-Conf oder in einer seperaten .htaccess angeben. Dieses zieht aber meistens nur dann wenn man sonst kaum angaben gemacht hat.

<files "*.*">
AddDefaultCharset iso-8859-1
</files>

Wer mit PHP arbeitet und immernoch Probleme hat der sollte einmal diese Zeile direkt zu Begin der Seite (or dieser Funktion kann keine andere Ausgabe gemacht werden) einfügen!

header('Content-Type: text/html; charset=iso-8859-1');

Manchmal bekommt man Text, z.B. aus der Datenbank oder aus einer anderen Datei, welcher in UTF-8 geschrieben wurde und man ihn nun aber in einer ISO-8859-1 Seite ausgeben möchte. In diesem Fall kann man den Text konvertieren. Dazu sollte man sich einmal diese Funktionen genauer anschauen.

echo iconv("UTF-8","ISO-8859-1","Dies ist ein Test üöä."); 
// ODER
echo utf8_decode("Dies ist ein Test üöä.")

Zu iconv gibt es eine ganze Reihe von Funktionen und zu utf8_decode gibt es auch das gegenstück utf8_encode.

Viel Erfolg!

Die meisten nutzen sie nicht oder kennen sie erst gar nicht. Die etwas andere Methode innerhalt eines PHP-Dokuments wieder Text/HTML auszugeben.

Statt z.B. diese Methode:

<?php /* codestuff */ ?>
<p>Mein Text</p>
<?php /* more code */ ?>

kann man es auch so machen:

<?php /* codestuff */ echo
<<<EOF
<p>Mein Text</p>
EOF;
/* more code */ ?>

Gerade fand ich einen interessanten Abschnitt in einem Artikel wo es über Zeitmessung von PHP-Skripten auf dem Apache ging. Speziell in dem darin enthaltenen Testskript geht um die Geschwindigkeit der Ausgaben der verschiedensten Möglichkeiten in PHP einen String in Kombination mit einer Variablen auszugeben.

Hier der Abschnitt:

- String und Variable in einen echo-Befehl mit doppelten Anführungszeichen packen und den fixen Teil mit der Variable zu mischen, etwa

<?php
$teststring = "Erde";
echo "Hallo $teststring";
?>

Das ist die meiner Ansicht nach bequemste Methode, Strings mit variablen Inhalten zu schreiben. Aber ist das auch die schnellste? Es gibt noch andere Möglichkeiten:

<?php
$teststring = "Erde";
echo 'Hallo '.$teststring;
?>

Hier haben wir es mit einfachen Anführungszeichen zu tun. Das bedeutet für PHP: Variablen innerhalb der einfachen Anführungszeichen werden nicht interpretiert. Also muss die Variable mit einem Punkt hinten angehängt werden.

Oder wie wäre es mit dieser Variante:

<?php
$teststring = "Erde";
?>
Hallo <?=$teststring?>

Hier wird “Hallo” allein von HTML ausgegeben, nur für die Ausgabe der Variablen macht sich der PHP-Interpreter an die Arbeit.

Zuletzt hätten wir noch diese Variante:

<?php
$teststring = "Erde";
printf("Hallo %s", $teststring);
?>

Für die formatierte Ausgabe von Strings.

Welche Methode ist also die schnellste? Ausprobieren. Vom Gefühl her würde man printf und echo”" die schlechtesten Prognosen geben.

Damit der Benchmark mit so einer simplen Programmzeile messbare Ergebnisse liefert, packen wir die Ausgabe noch in eine Schleife. Jede Zeile soll 5000mal ausgegeben werden. Das sieht dann im ersten Beispiel so aus:

<?php
$teststring = "Erde";
for ($i=0; $i < 5000; $i++)
{
echo "Hallo $teststring";
}
?>

Auch die anderen Testdateien müssen mit der Schleife ausgestattet sein.

Das Ergebnis meines kleinen Tests: Wie erwartet belegt printf den letzten Platz mit rund 78 Millisekunden pro Abruf auf einem P450 mit Suse Linux und 192 MByte Speicher. Kein Wunder: printf ist zu mächtig und vollkommen fehl am Platze, um einfach nur einen Text und eine Variable zu mixen.

Auf dem dritten Platz liegt echo mit den doppelten Anführungszeichen. Etwas schneller als printf braucht es dennoch satte 71 Millisekunden pro Abruf.

Deutlich schneller ist schon der Echo-Befehl mit einfachen Anführungszeichen. Er schafft die Seite in durchschnittlich 32 Millisekunden.

Die Mischung aus HTML mit der eingebetteten PHP-Variablen erweist sich aber als schnellste Lösung. Nur 25 Millisekunden brauchte der Server für den Abruf des PHP-Dokuments mit seinem 5000fachen “Hallo Erde”. Alle Angaben ohne Gewähr – probieren Sie es einfach mal selbst aus.

Übrigens: Führen Sie solche Benchmarks nur zu Hause oder einem Testserver durch. Ihr Produktiv-Server sollte nicht mit solchen Versuchen belastet werden.

Hier der Link zum vollen Artikel:
http://www.goldmann.de/apache-benchmark-misst-geschwindigkeit-von-php-programm_tipp_98.html