renephoenix.de

mit Webdesign

Längere Nachrichten an den apple-Support?

Wer sich bei apple an den Support wenden möchte, muss sein Problem in kompakte 140 Zeichen beschreiben. Aber nicht jedes Problem lässt sich in 140 Zeichen verpacken. Schon gar nicht Computerprobleme ;-) Hier ein kleins Tutorial, wie es doch geht!

Da der Hersteller die Textlänge nicht auf dem Server prüft, können mir wenigen Handgriffen auch längere Texte abesendet werden.

Kein www mehr in Internetadressen

Zugegebenermaßen: das www am Anfang der Internetadressen ist mittlerweile aus der Mode. Auch um unnötig doppelten Inhalt zu vermeiden, sollten die Seiten mit www beginnend auf die jeweiligen Hauptadressen verweisen. Das habe ich nun auf dieser Seite umgesetzt.

Die Lösung ist recht einfach, wenn der Zugriff auf die .htaccess-Datei erlaubt ist und mod_rewrite als Modul zur Verfügung steht. Wichtig ist in dem Zusammenhang, dass eine Bedingung gesetzt wird, andernfalls besteht das Risiko vor Endlosschleifen.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.de$ [NC]
RewriteRule ^(.*) http://domain.de/$1 [L,R=301]

Anmerkung: Vielleicht kann man diese Weiterleitung bei anderen Providern konfigurieren. Bei Hosteurope sind zwingend beide Domains auf den selben Pfad eingestellt.

Kleines Knobelrätsel für PHP

Im PHP-Code meiner Seite suchte ich eben nach der Ursache für ein eigenartiges Verhalten. Kurz zusammengefaßt und als Rätsel verpackt:

$var1 = 1;
$var2 = 0;

$var3 = $var1 && $var2;
$var4 = $var1 and $var2;

echo "$var3,$var4";

In der Ausgabe lieferte allerdings nicht »,«, sondern »,1«. Warum?

Titel von (X)HTML-Dokumenten

Gemäß der (X)HTML-Spezifikation muß jedes Dokument einen Seitentitel haben, so bisher mein Glaube. Aber es ist ja auch sinnvoll. Trotzdem akzeptiert der offizielle w3c-Validator folgenden Code:

<title />

Auch wenn es nach XML-Schema korrekt und vermutlich syntaktisch korrekt ist, semantisch ist es jedenfalls falsch. Aufgefallen war dieses Phänomen durch Opera. Er erkennt den schließenden Tag für den Seitentitel nicht und zeigt das komplette danach folgend Dokument in der Titelzeile des Browsers an (bzw. schneidet irgendwann ab), die Seite blieb weiß.

Die neuen Selektoren bei CSS 3.0

Eben habe ich mir mal das Kapitel der neuen attributbedingten Selektoren unter CSS 3.0 angeschaut und bin durchaus begeistert. In der Version 2.0 hatte man damit zwar begonnen, aber das Ergebnis war nicht wirklich praxistauglich gewesen. Und so war es vor Jahren noch eine friemelige Angelegenheit, die Adressen von Links im PHP nach möglichen Endungen zu untersuchen (z.B. erscheint bei einem Link auf eine mp3-Datei ein Notensymbol) bzw. interne Links von externen Links zu unterscheiden (bei externen Links erscheint ein kleiner Pfeil). Am Ende wurde diese »Erkenntnis« in Form einer Klasse an den Link drangehangen und im CSS formatiert.

Zu Unterscheidung interner (= keine absoluten Adressen) und externer Links würde nun das reichen:

a[href^="http"]
{ background-image:url(extern.png);
 padding-left:9px;
 background-position:left bottom;
 background-repeat:no-repeat;
}

Die mp3-Datei läßt sich nun so kennzeichnen:

a[href$="mp3"]
{ background-image:url(musiknote.png);
 padding-left:9px;
 background-position:left bottom;
 background-repeat:no-repeat;
}

Funktioniert unter Opera 9 und Firefox 3.

AJAX - alles nur ein Workaround?

Die Bedeutung von AJAX im (Be-)Reich der Webentwicklung ist in den letzten Jahr spürbar gestiegen. Insbesondere löst AJAX das Problem, daß innerhalb einer HTML-Seite weitere Anfragen an den Server möglich sind, ohne die komplette Seite erneut laden zu müssen. AJAX baut auf dem DocumentObjectModel auf und benutzt JavaScript-Routinen zur dynamischen Darstellung und Manipulation des Inhalts sowie zum Nachladen von Seitenteilen den XMLHttpRequest.

Auch wenn die Vorteile von AJAX durch viele Beispielanwendungen wie Google Earth schnell sichtbar werden, gibt es auch viele Nachteile, vor allen durch die Tatsache, daß kein Weg an JavaScript vorbeiführt:

  • AJAX-basierte Seiten erfüllen nicht die Anforderungen an die Barrierefreiheit (will man diese, ist eine alternative Seite erforderlich).
  • AJAX-basierte Seiten sind nicht zum anonymen Betrachten (z.B. mit Tor) geeignet.
  • Sicherheitsrisiken (vgl. Ajax wird zum Einfallstor für Hacker)
  • Der Browser verwaltet nicht die Aufrufe und Ergebnisse der JavaScript-Routinen, wodurch bestimmte Grundfunktionalitäten wie Vor/Zurück, Lesezeichen oder Quelltextanzeige nicht mehr so funktionieren, wie man es bei normalen Seitenaufrufen erwartet.

Das Problem an der Popularität von AJAX ist jedoch, daß es im Moment keine wirkliche Alternative gibt — zumindest eine, die diese Probleme nicht hat. Aber einen Lichtblick gibt es schon am Ende des Horizonts: XForms in Kombination mit XHTML 2.0. Nur das wird noch ein paar Jahre dauern. Zwar wurde XForms schon vor vier Jahren zum w3c-Standard, die Einbettung in HTML 2.0 läßt noch auf sich warten. Und dann müssen es erst einmal auch alle Browser können... Ich warte!

PHP-Erweiterungen unter Windows

So schön einfach man PHP unter Windows zum Laufen bringt, um so schwieriger wird es, wenn man es erweitern will.

Konrekte Zielstellung: ich will die Erweiterungen gd2 und curl aktivieren.

Rein intuitiv geht der Griff zunächste in die php.ini-Datei, in der die entsprechenden Zeilen scharf geschaltet werden (d.h. Semikolon am Zeilenanfang entfernen):

extension_dir = "c:/..."
extension=php_gd2.dll
extension=php_curl.dll

Danach stellt man erst einmal fest, daß die php.ini-Datei nicht aktiviert ist (sie soll im PHP-Installationsordner liegen, gut: in der httpd.cong kann man mit der Anweisung PHPIniDir machen.). Die richtige php.ini-Datei wird nun interpretiert, auch wenn bei der Ausgabe von phpinfo() noch das Windows-Verzeichnis angeben ist ...

In verschiedenen Anleitungen steht, daß man noch zwei Dateien ins Systemverzeichnis kopieren muß (was ich nicht unbedingt will, aber ok).

Alles erledigt, doch es läuft noch nicht. Auszug aus der Fehlerprotokollierungsdatei vom Apache:

PHP Warning:  PHP Startup: SVx8bt$x10WVhxc8px95: Unable to initialize module
Module compiled with module API=20020429, debug=0, thread-safety=1
PHP    compiled with module API=20060613, debug=0, thread-safety=1
These options need to match
 in Unknown on line 0

OK, es ist nur eine Warnung. Aber es läuft trotzdem noch nichts. Ein Aufruf folgender Testfunktion bringt eine Fehlermeldung (Funktion nicht gefunden)

curl_version(); gd_info();

Weitere Ideen?

(Ich will nicht noch mal alles mit Xampp aufziehen, ich will dafür auch nicht auf Linux/Mac wechseln)