neunzehn83.de

Ein Mann, ein Blog, kein Plan.

Webtechnik

Neuerungen in PHP 5.4

PHP 5.4 ist schon bei RC7, steht also sozusagen vor der Türe und schafft es wohl auch in das nächste Debian stable alias Wheezy. Wie auch schon bei 5.2->5.3 kommen einige nette und über Jahre in den PHP-RFC diskutierten… read more

Froxlor Bug: maximale Länge von ServerAlias (Apache)

SysCP bzw. dessen Nachfolger Froxlor kümmert sich hier auf diesem Server um das Erstellen diverser Konfigurationsdateien sowie um die Verwaltung der virtuellen User für E-Mail- und FTP-Zugänge. Schon vor einiger Zeit habe… read more

PHP und Y2K38: Werden wir alle sterben?

Der 19. Januar 2038 3:14:07 Uhr ist ein besonderer Zeitpunkt. Dann sind nämlich genau 2147483647 Sekunden seit dem 1. Januar 1970 vergangen. PHPs date()-Funktion arbeitet genau auf dieser Grundlage - auch bekannt als der… read more

PHP CLI Fortschrittsbalken

Hin und wieder führt man PHP-Skripte direkt auf der Kommandozeile (CLI) aus. Das hat den Vorteil, dass man nicht den Umweg über den Webserver gehen muss, wenn man ihn garnicht braucht. Außerdem lässt sich das Skript leicht… read more

PHP-Security! Heute: path traversal

Path traversal bzw. directory traversal ist eine Methode, um aus vorgesehenen Verzeichnissen auszubrechen. In Bezug auf PHP findet diese Sicherheitslücke Anwendung, da Dateien oftmals anhand des Querystrings eingebunden… read more

Variablen tauschen ohne Hilfsvariable?

Pah! #!php list($a, $b) = array($b, $a); read more

Über Primary-Keys in URLs .. und sonstwo

Ein Primary-Key identifiziert eindeutig ein Tupel (Zeile/Reihe/Row) in einer relationalen Datenbank. Im trivialen Fall ist das eine Integer-Spalte mit auto_increment - wenn wir von MySQL reden, wie so oft hier. Eine fortlaufende… read more

Data URIs vs. CSS-Sprites

CSS-Sprites sind eine elegante Möglichkeit um GET-Requests zu minimieren und daruch den Seitenaufbau zu beschleunigen. Dabei werden viele kleine Symbole in einer großen Grafik zusammengefasst und via CSS  immer nur der passende… read more

PHP-Skript im Hintergrund ausführen #2

Die bereits erwähnte Methode über Content-Length funktioniert zwar etwas hakelig, ist aber in Webspace-Umgebungen oft die einzige Methode ein PHP-Skript im Hintergrund auszuführen. Eine andere Methode (neben dem Cronjob)… read more

jQuerys $-Funktion

Wie wir alle wissen, werden Variablen in JavaScript nicht mit einem vorangestellten Dollarzeichen kenntlich gemacht. Insofern ist das Dollarzeichen für Javascript einfach nur das 36. Zeichen der ASCII-Tabelle. Und zudem ein… read more

Protocol Relative URLs

Ist eine Webseite per https-Protokoll SSL-verschlüsselt aufrufbar, so müssen alle externen Objekte auf dieser Webseite ebenfalls über HTTPS geladen werden. Ist das nicht der Fall, gibt es im Internet-Explorer eine hässliche… read more

Hash-Bangs (#!) in URLs

Hash-Bangs in URLs sind stark in Mode gekommen. Facebook, Twitter, DeviantART und viele weitere ganz oder teilweise auf Javascript/Ajax basierende Seiten benutzen es. Alles was nach einer Raute in der URL kommt, ist der… read more

xtc: Land-Dropdown im Warenkorb

Die Versandkosten im Warenkorb anzuzeigen ist ein toller Service. So sieht man direkt im Warenkorb den exakten Gesamtbetrag und die Gäste müssen sich nicht extra registrieren um die richtigen Versandkosten angezeigt zu… read more

PHP-Skript im Hintergrund ausführen

Wenn gleichzeitig mit einem Seitenaufruf eine rechen- oder zeitintensive Aufgabe ausgeführt werden soll, hat das den Nachteil, dass der Benutzer im Browser so lange einen Ladebalken sieht, bis die gesamte Rechenoperation… read more

MySQLs BIGINT .. und PHP

Übrigens: Ein MySQL BIGINT ist 8 Byte lang. Unsigned lassen sich also Ganzzahlen von 0 bis 18446744073709551615 speichern. Eine MySQL-BIGINT-Spalte mit auto_increment läuft bei 1000 Inserts pro Sekunde erst nach über 500… read more

Regworld Domainrobot

Wer eigene (v)Server betreibt kann Domains unabhängig vom Provider direkt bei einem Domainrobot registrieren. Das hat zum einen den Vorteil, dass man Handles (Kontaktdaten) und IP-Adressen selbstständig verwalten kann, zum… read more

Webserver-Umgebung erkennen mit PHP

Development oder Production - das ist hier die Frage. Bei der Webseiten-Entwicklung bietet es sich selbst bei kleinsten Projekten an, zunächst in einer lokalen Entwicklungsumgebung die Anwendung zu testen. Ist der Test erfolgreich… read more

GET-Requests minimieren. Heute: Externe CSS-Dateien

Selbst bei kleineren Webprojekten hat man oft mehrere CSS-Dateien. Zumindest das CSS-Reset ist bei mir, zwecks Wiederverwendbarkeit, immer in einer separaten Datei. Eine weitere Unterteilung in typo.css, lists.css usw. macht… read more

Blättern mit MySQL und SQL_CALC_FOUND_ROWS

Verwendet man in einem MySQL-Query die Option SQL_CALC_FOUND_ROWS im Zusammenspiel mit LIMIT, berechnet MySQL die Gesamtzahl der Datensätze unabhängig vom verwendeten Limit. Beispiel: Will man Daten seitenweise darstellen… read more

Runde Ecken mit CSS und ohne Stress

Es könnte alles so einfach sein. Runde Ecken sind mit der CSS3-Eigenschaft "border-radius" leicht zu realisieren. Das funktioniert in allen modernen Browsers (Opera, Firefox, Chrome und Safari). Nicht aber im Internet-Explorer. Um… read more

MySQL's GROUP_CONCAT()

Die GROUP_CONCAT-Funktion von MySQL ist eine tolle Erweiterung zu GROUP BY.  Insbesondere wenn man es mit one-to-many oder many-to-many Beziehungen zu tun hat. GROUP_CONCAT() ist seit der Version 4.1 Bestandteil von MySQL. Beispiel:… read more

PHP's PDO-Klasse erweitern

PDO ist eine PHP-Erweiterung, die einen konsistenten Zugriff auf Datenbanken ermöglicht. Seit PHP 5.1.0 ist PDO fester Bestandteil von PHP - also eine native (in C geschriebene) PHP-Extension. Dennoch lässt sich PDO mit PHP… read more

Policy based routing auf Debian Lenny/Etch mit Squid Proxyserver

Folgendes Szenario: Ein Debian Lenny Server und zwei Router mit je einer Internetverbindung befinden sich im selben (lokalen) Netzwerk. Wir wollen beide Router (sprich Internetverbindungen) für verschiedene Anwendungen nutzen. 192.168.123.0… read more

Rdiff-backup unter Debian auf SMB/CIFS-Mount

Für inkrementelle Backups unter Debian Lenny kommt man an rdiff-backup wohl nicht vorbei. Es erstellt Rückwärts-Inkremente -- der aktuelle (neuste) Backup-Stand liegt also jederzeit als einfache Datei vor. Vorherige Backup-Stände… read more

Kurz notiert: einfache CSS Browser-Hacks für IE6/7

Mit nur einem Zeichen lassen sich CSS-Eigenschaften gezielt für den Internet Explorer 6 und 7 schreiben: So sieht das dann aus. Doch sind solche Anpassungen für bestimmte Browser in sparaten CSS-Dateien und per Conditional-Comment… read more

PHP: gleich oder nicht gleich?

PHP ist schwach typisiert. Und das ist im Prinzip auch gut so! Dennoch passieren dadurch teilweise wirklich sonderbare Dinge: Das ist einfach: Strings unterschiedlicher Länge können niemals gleich sein. Aber:"2e3"… read more

PHP: seltener "goes to" Operator ( - - > )

PHP hat einen "goes to"-Operator. Oder doch nicht? read more

AWStats: die eigenen Besuche ausschließen

AWStats analysiert Logfiles und erstellt nette Statistiken. So auch hier für diesen Blog. Um die schier unfassbare Menge an Visits auch nur im Ansatz zu begreifen, rödelt also jede Nacht AWStats durch die Apache-Logfiles.… read more

Domains mit einem Domainrobot direkt registrieren

Domains gibt es überall. Meist direkt vom Server-Anbieter. Diese sind aber oft teurer als nötig und zudem ziemlich unflexibel zu verwalten. Wenn man mit dem Server zu einem anderen Anbieter umzieht, muss man alle Domains… read more

Sieve Mailfilter unter Debian Lenny mit Syscp und Dovecot

Mit Sieve können Serverseitig Filterregeln für E-Mails angelegt werden. So lassen sich z.B. Spam-eMails automatisch in einen SPAM-Ordner verschieben oder automatisch löschen. Um eine Sieve-Regel zu erstellen, braucht man… read more

glTail mit Chipmunk 2D Physics unter Windows

glTail ist eine in Ruby geschriebene OpenGL-Anwendung zur Visualisierung von Logfiles in Echtzeit. So sieht das aus: Nett! Das funktioniert praktisch mit jeder Logdatei (Webserver, Mailserver usw.) dank SSH auch auf entfernten… read more