D’oh Moment
Man merkt immer wieder, dass man nie auslernt. Selbst, wenn man seit Jahren mit einer Programmiersprache arbeitet. So wie bei PHP. Vor Kurzem habe ich folgendes erfahren:
Ein Skript wird mit den PHP-Tags eingeleitet:
<?php
Aber das abschließende
?>
ist nicht nötig.
In welchen Fällen kann das nützlich sein? Es gibt oft Probleme, dass sich in PHP-Dateien ein Whitespace hinter dem abschließenden Tag einschleicht. Dies führt dazu, dass es einen “Headers already sent”-Fehler gibt. Lasst ihr das weg, so vermeidet ihr diesen - schwer zu findenden - Fehler.
Gibt es bei euch auch ein paar nette “D’oh”-Momente?
Creating a blog app in platform PT pt 1 ;)
Now I am going to show you how to create a simple blog app in platform PT.
platform PT on assembla.com
I signed up with assembla.com a while ago. It was particularly, because I liked the trac environment. I discovered trac some time ago, when I played with MaNGOS.
Anyhow: Here is the platform PT trac environment and the assembla.com project page.
Installation
Now I am going to show you how to install platform PT. Since the framework was intended to be used in our own environments in the first place, it does not have a fancy installation routine (yet).
What you will need to run platform PT:
- Apache Web Server
- mod_rewrite
- PHP >= 5.1 (PHP module)
- A MySQL database
respice platform PT
Tonight I am going to start introducing platform PT. This PHP framework is the result of some years of work, trying to get a strong base for all our future applications. It turned out to be more a learning process, than a straight path…
With the same spirit I will start collecting bits and pieces of information. Anything, which crosses my mind, when I think about platform PT. I hope I will find the time soon to write a manual for platform PT.
DOM und Namespaces
Notiz an mich selbst…
Derzeit arbeite ich hauptsächlich mit der DOM-Implementierung von PHP. Nun habe ich erstmals auch externe XML-Dateien eingelesen und verarbeitet (das gibt einen kleinen RSS-Reader).
Dabei entstand ein Problem, das ich zunächst einmal lange nicht nachvollziehen konnte:
<?php
$doc = DOMDocument::loadXML($str);
$x = new DOMXPath($doc);
$channel = $x->query('channel', $doc->documentElement);
echo $channel->length;
?>
Ergab immer 0. Dabei existierte der Node. Nach einigen Versuchen entdeckte ich, dass der Rootnode ein Namespace definiert hatte.
Ahhhh… ok.
<?php
$x->registerNamespace('default', $doc->documentElement->namespaceURI);
$channel = $x->query('default:channel', $doc->documentElement);
?>
1. Ahhh, gut.
IE zum Absturz bringen
Ist auf jeden Fall bei mir so. Ich hatte einen kleinen Fehler in meinem HTTP-Header:
<?php
header('Content-type:text/html;encoding=utf-8');
?>
anstatt “charset=utf-8″.
Rufe ich diese Seite mit AJAX auf, so bleibt der IE hängen.
Update: Ich habe mal eine kleine Datei geschrieben. Bei mir funktioniert es jedes Mal. 99% CPU, Tschüß… poc.tar.gz
Update2: Auch IE7 ist davon betroffen…
Regexp für E-Mail Adressen
Was für eine RegExpression verwendet ihr zum checken einer E-Mail Adresse?
Meine letzte, ziemlich einfache:
<?php
return preg_match ('%^(.+)@(.{2,})\.(.{2,4})$%i', $email);
?>
Schnipsel
Eine Sammlung von schönen Codeschnipseln und weiteren, interessanten Arbeitshilfen (php::bar sollte man eigentlich kennen
): http://phpbar.de/hilfen/faq/index.php?ch=snippets
Wie nutze ich die crypt()-Funktion
Nach dem Beitrag beim M-E-X Blog, und nachdem ich gemerkt habe, dass pastebin.com die Codes auch wieder löscht, poste ich hier nochmals den Beispielcode.
<?php
function random ($len)
{
$times = ($len % 40) + 1;
$random = '';
for ($i = 0; $i < $times; $i++)
{
mt_srand((double)microtime()*1000000);
$r = mt_rand();
$random .= sha1(uniqid($r,TRUE));
}
return substr ($random, 0, $len);
}
// salt holen
if (CRYPT_BLOWFISH) {
$salt = '$2$' . random (13);
} else if (CRYPT_MD5) {
$salt = '$1$' . random (9);
} else if (CRYPT_EXT_DES) {
$salt = random(9);
} else {
$salt = random (2);
}
$pass = 'geheim';
$pass_zum_speichern_in_datenbank = crypt ($pass, $salt);
// die Überprüfung
$pass_eingegeben_von_benutzer = 'geheim';
$pass_geholt_aus_datenbank = $pass_zum_speichern_in_datenbank;
if ($pass_geholt_aus_datenbank == crypt ($pass_eingegeben_von_benutzer, $pass_geholt_aus_datenbank)) {
echo 'Passwort korrekt';
} else {
echo 'Passwort inkorrekt';
}
?>