Wem Argumente an der URL nicht SEO freundlich genug sind:
/abc.php?key=value
der kann eine Variante in dieser Art vorbauen:
if(isset($_SERVER['PATH_INFO'])) {
$ap = explode(‘/’, $_SERVER['PATH_INFO']); // in key/value pairs zerlegen
array_shift($ap);
while(count($ap) >= 2) {
$key = array_shift($ap);
$value = array_shift($ap);
$_GET[$key] = $value;
} // while
} // if PATH_INFO
Dann geht die gleiche URL zusätzlich auch als
/abc.php/key/value
Sieht gleich viel hübscher aus. Vorsicht allerdings bei relativen [...]
Alternative zu URL Parametern
Umlaute Zweilerlei
Baim Auslesen von EXIF-Informationen kann man auf beliebige Kodierungen von Umlauten stoßen. Die drei meisten Fälle sind so abgefangen:
if(isset($ea['ImageDescription'])) {
$caption = $ea['ImageDescription'];
$encoding = mb_detect_encoding($caption, ‘ASCII, UTF-8, ISO-8859-1′);
if(‘UTF-8′ == $encoding)
$caption = utf8_decode($caption);
}
Damit werden ISO und UTF Umlaute gleich dargestellt.
binäre Dateien und readfile
Wer sich immer wieder über PDF Dateien ärgert, die angeblich defekt vom PHP erzeugt wurden, auf dem Server abgelegt jedoch intakt sind: readfile wandelt anscheinen NULL Bytes in Blanks um im Datenstrom. Ein Parameter für binäres Verhalten ist der aktuellen Doku erst mal nicht zu entnehmen. Daher geht es erst mal nur so:
$pdf = file_get_contents($tmppdf,FILE_BINARY);
echo [...]
Cachen verboten
Soweit scheint dieses Stück Code genau das zu machen was es soll. Eine Datei wird generiert und landet immer frisch auf dem Tisch:
header(‘Content-Type: image/png’);
header(‘Content-Disposition: attachment; filename=”flyer.png”‘);
header(‘Content-Transfer-Encoding: binary’);
header(‘Content-Length: ‘ . filesize($tmpfile));
header(‘Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate, private’); // HTTP/1.1
header(‘Cache-Control: pre-check=0, post-check=0, max-age=0′, false);
header(‘Last-Modified: ‘.gmdate(‘D, d M Y H:i:s’) . ‘ GMT’);
header(‘Expires: ‘ . gmdate(‘D, d M [...]
Keine includes über Variablen
Sowas sollte man tunlichst vermeiden:
include($filename);
Sonst kommt noch einer auf diese Idee:
GET http://www.example.com/script.php?filename=/etc/passwd
externe Variablen absichern
Wenn via GET oder POST ein Wert erwartet wird, dann sollte man ihn via addslashes bearbeiten, bevor er z.B. einem SQL Server übergeben wird.
die oder error_log
Die Angewohnheit Fehler via die abzufangen ist viel zu geschwätzig gegenüber dem Endbenutzer. Besser ein error_log mit den Details absetzen und dann einfach auf eine statische Fehlerseite redirecten. Macht viel mehr von der Optik her und ist sicherer in der Aussage.
Include Files auslagern
Alle .INC Dateien gehören nicht in die Webwurzel, sondern in einen eigenständigen Pfad parallel dazu. Der Pfad sollte dann in der PHP.INI als Suchpfad auch eingetragen werden.
| M | D | M | D | F | S | S |
|---|---|---|---|---|---|---|
| « Apr | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | |||
Recent Entries
Recent Comments
- Keine Kommentare vorhanden.
