Während der Bastelei am DI-Container bin ich über die beiden Methoden ReflectionParameter::isOptional() und ReflectionParameter::isDefaultValueAvailable() gestoßen. Der kleine, undokumentierte und feine Unterschied ist folgender:
Persistente Objekte in PHP und redirects
Achtung Falle!
Benutzt man persistente Objekte in PHP, die ungefähr so aufgebaut sind, wie hier beschrieben.
class User
{
public function __construct(){}
// save object to session variable
public function __destruct()
{
$_SESSION['user'] = serialize($this);
}
// factory method
public static function factory()
{
session_start();
if(isset($_SESSION['user']) === TRUE)
{
return unserialize($_SESSION['user']);
}
return new User();
}
}
Grouping & Sorting in MongoDB
Will man mit PHP und MongoDB soetwas wie “SQL Aggregate Functions” umsetzen muss man sich etwas verbiegen.
MongoDb hat zwar eine group() function, die in etwa SQLs GROUP BY entspricht, allerdings kann man dies nicht kombinieren mit SORT oder LIMIT bzw den sort() und limit() Funktionen, da diese keinen Cursor zurückgibt sondern direkt ein Array.
Will man also sortieren und limitieren muss man sich des Map / Reduce features von MongoDB bedienen.
Datei-Endungen im Vork Framework
Von Haus aus kommen im Vork Framework alle MVC Dateien ohne Endung daher.
Wer das ändern möchte kann folgende Dinge tun:
in der Klasse config in der Datei .config folgendes einfügen:
public $fileExtension = '.php';
dann erwartet vork im MVC Ordner Dateien mit der Endung .php.
Um alle Dateien umzubenennen braucht man eigentlich nur Windows Vista, eine präzise Maus und etwas Geduld.
oder folgende Zeile:
find /myVorkFolder/mvc -type f -exec mv '{}' '{}'.php ;
PHP Simple HTML DOM Parser
Bin neulich über eine nette Klasse gestolpert, die sich lohnt mal anzuschauen:
Diese parst HTML und hält es als DOM Baum vor, auf welchem man ‘JQuery like’ Operationen dürchführen kann.
Siehe deren online Beispiel:
// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
Kann man schön mit ScreenScrapen oder mal ein CMS neu erfinden! ;)
Feine Sache!
Fail! Zend Db: Ausgabe eines Update Query
Heute gibt es mal einen Fail!
Vorneweg: das Zend Framework (Version 1.10) wird hier “lose” benutzt, d.h. ohne Bootstrap. (Evtl. kann man da den Query loggen, aber kA)
Die simple Ausgabe eines Update Query zu Debug Zwecken ist mit dem Zend Db Packet anscheinend nicht möglich.
Man konstruiert den Query:
$this->db->update($this->table, $data, 'id = '.(int)$this->data['id']);
Continue reading “Fail! Zend Db: Ausgabe eines Update Query”
X-Sendfile + Apache 2 (Ubuntu)
Ein recht verstecktes Feature, das neuere Server, bspw. Lighthttpd + FCGI-Modul bereits “out of the box” unterstützen, ist das anwendungsgesteuerte “Durchschleifen” von großen Dateien via X-Sendfile Header.
Wozu es gut ist und wie man es benutzt,will ich im Folgenden kurz erläutern:
PHP und Sqlite Transaktionen
Ich bin ja Fan von sqlite, besonders für kleinere Projekte, wo kein hohes paralelles Schreiben zu erwarten ist, also für fast alle kleineren Seiten.
Keine Datenbank Administration, einfach loslegen und schnell ist es auch noch.
Ein paar Krücken gibts aber schon, zB bei Transaktionen (die MySql im Regelfall gar nicht kann ;)).
Ich benutze die in diesem Fall für multiple Inserts, um da Performance rauszuschlagen.
Über diese bin ich letztens noch gestolpert:
1. Es ist keine gute Idee Transaktionen zu stückeln und sequentiell abzuarbeiten.(warum auch immer man auf diese Idee kommt ;))
besser ist: alle Queries zu buffern und dann in einer Transaktion auszuführen.
Denn Transaktionen locken die DB und nach meiner Erfahrung kann das PHP SQLiteDatabase Object den Datenbank Cursor nicht richtig schließen.
Das führt dann zu sowas: “cannot start a transaction within a transaction”
Continue reading “PHP und Sqlite Transaktionen”
The only valid measurement of code quality: WTFs/minute
oder: Doctrine 2 wird wohl ziemlich gut.
Hier gibt es ein paar Notizen von Jonathan Wage’s Präsentation dazu!
Continue reading “The only valid measurement of code quality: WTFs/minute”
Run Symfony Tasks from Controller
Symfony Tasks (zB “symfony cc”) aus dem Controller oder Model aufrufen kann man folgendermaßen: Continue reading “Run Symfony Tasks from Controller”