Relay, ein Verzeichnis-Manager
Online im Verzeichnis rumbrowsen wollte ich schon immer. Nun bin ich beim Lesen über Dependency Injection irgendwie auf relay gestossen. Nunja, leider scheitert das an einer Eigenart von MySQL:
CREATE TABLE IF NOT EXISTS `relay_clients` (
`id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`name` text NOT NULL ,
`display` text,
`path` text NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE KEY `pn` ( `path` ( 250 ) , `name` ( 250 ) )
);
scheitert mit der Fehlermeldung:
Specified key was too long; max key length is 1000 bytes. Could not create the table relay_clients
Nun, warum? 250+250 sollten doch weniger als 1000 sein? Jein
empty vs. isset vs. array_key_exists
Ich zitier hier einfach mal. Hab ich nämlich nicht gewusst.
The problem is that there are situations where isset() and empty() are
not appropriate checks. For instance, try this:$test = array('foo' => null); echo ((isset($test['foo'])) ? 'true' : 'false'); // echoes 'false'!What about empty()?
$test = array('foo' => null); echo ((empty($test['foo'])) ? 'true' : 'false'); // echoes 'true' echo ((empty($test['bar'])) ? 'true' : 'false'); // also echoes 'true'!What does that mean? It means that if you want to test for the presence
of a key, you can't rely on isset() *or* empty()! array_key_exists() is
the only way to reliably verify that the key is present in the array.$test = array('foo' => null); echo (array_key_exists('foo', $test) ? 'true' : 'false'); // echoes 'true' echo (array_key_exists('bar', $test) ? 'true' : 'false'); // echoes 'false'
Quote von Matthew Weier O'Phinney, Zend Framework Developer
__FUNCTION__ in Java
Unter PHP gibt es sogenannte Magische Konstanten. Die sind prima, wenn man z.B. eine Debugfunktion schreiben will, die an bestimmten Stellen sagt wo sie aufgerufen wurde. In Java sieht das dann so aus:
class Debug
{
public static void print(String msg)
{
java.lang.Exception e = new java.lang.Exception();
StackTraceElement ste[] = e.getStackTrace();
System.out.println(
new Date().getTime() + " " +
ste[1].getClassName() + " " +
ste[1].getMethodName() + " " +
msg);
}
}
Wird aufgerufen mit:
import mein.tolles.package.Debug;
Debug.print("lalala");
Was hiermit nicht geht ist: getFileName() und getLineNumber(), da diese Information nicht zur Verfuegung steht.
SPL – die Standard PHP Library
Kevin Waterson hat einen laengeren Artikel ueber die SPL geschrieben, inkl. so schoener Sachen wie Iterator und ArrayObjects und (endlich) ein OOP-Zugriff aus Dateisystem via SplFileObject.
Link: http://www.phpro.org/tutorials/Introduction-to-SPL.html
GnuPG mit PHP
Also, ich mag RoundCube Webmail. Allerdings fehlt mir (wie eigentlich in jedem Webmailer) eine Moeglichkeit E-Mails zu verschluesseln. Kurz zur Erklaerung: GnuPG ist ein Programm zur Verschluesselung und/oder Signierung von Daten. Dies koennen prinzipiell E-Mails, Dateien oder sonst irgendwas sein, wir befassen uns aber mal nur mit den E-Mails. GnuPG nutzt ein sogenanntes 'Asymmetrisches Kryptosystem', d.h. jeder Benutzer dieser Systeme hat eine privaten und einen oeffentlichen Schluessel. Asymmetrisch bedeutet hier also, das wir nicht denselben Schluessel verwenden um etwas zu verschluesseln und es danach wieder zu entschluesseln.