preload
Okt 31

Mobile_Detect ist eine einzige PHP-Klasse, mit der sich mobile Endgeräte erkennen lassen (siehe Eintrag "Mobile Endgeräte mit PHP erkennen").

php-mobile-detect liegt nun in Version 2.3 vor und bietet eine verbesserte und aktualisierte Erkennung für mobile Endgeräte (Tablets und Smartphones)

Projekt-Homepage und Download: php-mobile-detect

Okt 15

Mail-Server können eine Maximal-Länge je Zeile in einer E-Mail vorgeben. Wird diese Länge überschritten, tritt eine Fehlermeldung in der Form ... line limit exceeded auf.

Abhilfe schafft die Verwendung der PHP-Funktion chunk_split. Diese Funktion splittet einen String in Zeilen beliebiger Länge auf (standardmäßig 76 Zeichen).

Ob der mit chunk_split erzeugte String noch das gewünschte Ergebnis liefert ist natürlich für jeden Anwendungsfall einzeln zu prüfen.

Beschreibung der Funktion auf php.net:
http://php.net/manual/en/function.chunk-split.php

Feb 15

Seit PHP 5.3.9 existiert eine PHP-Einstellung max_input_vars, die standardmäßig auf den Wert 1000 gesetzt ist, was unter anderem den Zweck hat, DOS-Attacken zu vermeiden. Eine genauere Beschreibung finden Sie in Artikel ‘Supercolliding a PHP array’ in nicik’s blog.

In komplexen Formularen können durchaus mehr als 1000 Felder vorkommen – sicherlich nicht alltäglich, aber durchaus möglich. Seit PHP 5.3.9 erhält man bei solchen großen Formularen durch die standardmäßige Begrenzung auch standardmäßig Probleme, da plötzlich x POST-Felder fehlen.

Dieses Problem kann behoben werden, indem über die auf dem jeweiligen Server zur Verfügung stehenden Optionen die PHP-Einstellung max_input_vars auf einen ausreichend großen Wert gestellt wird.

Aug 10

Immer öfter besteht die Anforderung, Webseiten auch auf mobilen Endgeräten verwendbar zu halten – sei es über Anpassungen auf der eigentlichen Webseite oder über eine spezielle mobile Version. Die Datenstruktur sollte sich dabei gar nicht ändern, der Code idealerweise nur wenig. Dazu ist bei der Erzeugung der Ausgabe zwischen dem Ziel zu unterscheiden: Bspw. ein Rechner, irgendein mobiles Endgerät, ein Android-Phone, ein Windows-Phone, usw… Diese Aufgabe lässt sich bequem und sehr einfach mit php-mobile-detect bewerkstelligen…

Weiterlesen

Aug 08

Auf der Manual-Seite zu array_diff lautet die Beschreibung “Ermittelt die Unterschiede zwischen Arrays” und “Vergleicht array1 mit array2 und gibt die Unterschiede zurück.” Dieser Beschreibung nach könnte man davon ausgehen, dass der folgende Code-Abschnitt die Elemente von A liefert, die nicht in B vorkommen und die von B, die nicht in A vorkommen; eben “die Unterschiede”.

<?php
  
  $aElementA = array(1, 2, 3, 4);
  $aElementB = array(2, 4, 6, 9);
  
  $aResult = array_diff($aElementA, $aElementB);
  
  var_dump($aResult);
  
?>

Das evtl. erwartete Ergebnis, nämlich array(1, 3, 6, 9) wird nicht geliefert. Stattdessen lautet das Ergebnis array(1, 3)

Ein paar Zeilen weiter unten auf der Manual-Seite wird der erste Parameter beschrieben als “Das Array, das verglichen werden soll” und der zweite Parameter als “Das Array, mit dem verglichen werden soll”.

Eine etwas besser verständliche Beschreibung für array_diff könnte lauten Liefert A ohne B, denn genau das ist das Ergebnis des Aufrufs: Elemente aus Menge A, die nicht in Menge B vorkommen.

Jul 11

Gelegentlich kommt es vor, dass man eine mit PHP erzeugte HTML-Ausgabe vor der Ausgabe noch modifizieren möchte. Bspw. sollen alle src-Attribute in img-Tags geändert werden. Soll gleichzeitig noch jede Ersetzung anhand bestimmter Kriterien oder mit wechselnden Optionen durchgeführt werden, kommt idealerweise ein Callback einer Funktion oder einer Methode zum Einsatz. Wenn zum Finden der gewünschten Inhalte ein regulärer Ausdruck verwendet werden kann bzw. soll, ist preg_replace_callback die richtige Wahl.

Dieser Artikel beschreibt anhand eines Beispiels, wie mittels preg_replace_callback innerhalb einer Methode alle src-Attribute von img-Tags gefunden und über ein Callback einer Methode der selben Klasse ersetzt werden können.

Weiterlesen

Tagged with:
Feb 10

Der folgende Code erläutert das Vorgehen zum Skalieren einer PNG-Datei mit Alpha-Transparenz bei Verwendung der PHP-Grafikbibliothek GD. Wichtig hierbei ist, dass die Informationen aus dem Alphakanal gespeichert werden müssen (imagesavealpha), das Alphablending hingegen deaktiviert sein muss (imagealphablending).

<?php

// Original-Bild laden und dessen Breite und Höhe bestimmen
$in = imagecreatefrompng(“image.png”);
$iWidthOld = imagesx($in);
$iHeightOld = imagesy($in);

// Breite und Höhe für neues Bild festlegen und Bild erzeugen
$iWidthNew = 320;
$iHeightNew = 240;
$out = imagecreatetruecolor($iWidthNew, $iHeightNew);

// Alphablending (bspw. für grafische Objekte) deaktivieren – wichtig!
imagealphablending($out, false);

// Die Informationen aus dem Alphakanal sollen gespeichert werden
imagesavealpha($out, true);

// Originalbild mit Zielmaße in das neue Bild kopieren
imagecopyresampled($out, $in, 0, 0, 0, 0, $iWidthNew, $iHeightNew, $iWidthOld, $iHeightOld);

// Header ausgeben
header(“Content-Type: image/png”);

// PNG-Datei als Ausgabe erzeugen
imagepng($out);

?>

Jan 17

Mit der PHP.ini-Direktive post_max_size lässt sich festlegen, welchen Umfang im Maximalfall ein per POST abgeschicktes Formular haben darf. Besonders im Zusammenspiel mit der Direktive max_file_size, die wiederum bestimmt, welche maximale Dateigröße bei einem Upload akzeptiert wird, ist post_max_size gelegentlich anzupassen.
Im Druckerei-Umfeld werden nun wiederum des öfteren sehr große Dateien transferiert, so dass hier die Angabe auch entsprechend weit nach oben zu schrauben ist. Zumindest auf einem 32-Bit-System kommt man hier aber auch schnell an die Grenze. Bei einer Angabe von mehr als 2 GB übermittelt PHP auf einmal nämlich überhaupt keine Daten mehr bei einem POST. Das $_POST-Array ist leer, auch wenn das Formular nur minimale Daten enthielt. Ob man doch einen Wert größer als 2.048 MB erreichen kann, evtl. durch Anpassungen bei weiteren Direktiven, konnte ich bisher noch nicht herausfinden.

Tagged with:
Jun 23

PHP funktioniert ja recht gut im Zusammenspiel mit der Oracle-Datenabnk. Lediglich bei der Installation des Oracle-Clients muss man aufpassen. Vielfach ist wahrscheinlich noch ein Oracle 10g Client im Einsatz, den man zur Verbindung zwischen Webserver und Oracleserver verwenden möchte. Wenn man allerdings dann bei PHP 5.x (auch bei der aktuellen 5.3.2) die php_oci8.dll Extension aktivieren möchte, lässt sich der Apache 2.2 danach nicht mehr starten. Es erscheint eine Meldung im Eventviewer, dass die php5ts.dll einen Fehler verursacht.

Faulting application httpd.exe, version 2.2.3.0, faulting module php5ts.dll, version 5.3.2.0, fault address 0x000980d6.

Offensichtlich hat der Oracle-Client nicht alle erwarteten Schnittstellen implementiert. Abhilfe schafft die Installation des OracleXE-Clients, mit dem die Anbindung problemlos gelingt.

Tagged with:
Jun 19

Um statistische Daten grafisch darzustellen gibt es mittlerweile ja verschiedene Bibliotheken, allen voran ist hier wohl die JpGraph-Bibliothek zu nennen, die viele Wünsche der Statistikfreunde erfüllt. Gerade für kleinere Auswertungen gibt es aber auch eine weitere, recht einfache Möglichkeit. Google stellt hier mit der Google Chart API eine recht umfangreiche Schnittstelle zur Verfügung, der man per Post oder Get ein paar Werte unterschiebt und schon bekommt man das fertige Bild zurück.
Für interessierte Einsteiger habe ich ein Beispiel zur Google Chart API erstellt, das eine Möglichkeit aufzeigt, die Daten sowohl in einer tabellarischen Form als auch als Grafik darzustellen. Natürlich kann man das Beispiel auch direkt online betrachten.
Man muss klar sagen, dass es einige Einschränkungen gibt, z.B. die Beschränkung der Bildgröße auf 300.000 Pixel oder dass nur Werte zwischen 0 und 100 zulässig sind (was durch eine Skalierung erreicht wird), aber für viele Fälle reicht es eben doch aus und die Einbindung geht sehr schnell und einfach.
Weitergehende Informationen zur API finden sich bei der Beschreibung der Google Chart Tools.

Tagged with: