Schau auf die Error_Log

Man sollte sich tatsächlich angewöhnen beim Entwickeln immer eine Console offen zu haben und die error_log zu beobachten.

tail -f /var/log/apache2/error_log

Bekommt man nämlich so einen Fehler in der error_log:

ALERT - configured POST variable limit exceeded - dropped variable ...

… bleibt die Seite meistens ohne Fehlerausgabe trotz E_ALL und es passieren komische Dinge.
Dann kann man schonmal eine ganze Weile damit verbringen ganz woanders zu suchen.
Mit offenem error_log wäre das nicht passiert ;).

Continue reading “Schau auf die Error_Log”

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();
} 
}

Continue reading “Persistente Objekte in PHP und redirects”

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.

Continue reading “Grouping & Sorting in MongoDB”

sqlite VACUUM

Mal ein kleines Zauberwort für Zwischendurch:
VACUUM;

Dieses Kommando räumt eine Sqlite Datenbank auf, killt unnötige Leerzeichen und defragmentiert den Datenbank File.

In meinem Fall war die DB nach dem löschen einer relativ großen Table immer noch auf ca 20MB, das hat mich doch stutzig gemacht und zu diesem Kommando geführt.
Nachdem ich es ausgeführt hatte, war der File dann tatsächlich auf 2MB geschrumpft!

Sollte man vielleicht nicht im laufendem Betrieb machen und als nächstes schau ich mir dann AUTO_VACUUM an.

Zend_Log pseudo logrotate

Manchmal wachsen einem die Logfiles ja über den Kopf und drohen den Server zu sprengen.
Dann muss man aufräumen, weithin als logrotation bekannt. Unter Linux gibt es ja das praktische logrotate Programm, welches man für seine zwecke vielfältig konfigurieren kann.

Es gibt dann aber auch Fälle wo man dies nicht benutzen will/kann, zB weil man auf shared hosting ist oder man eine Tool ausliefern will, welches selbst aufräumen soll.

Zend_Log bietet zZt leider keine Log Rotation mit an, also muss man es selber machen:

In meinem Fall will ich die Logfiles ca eine Woche vorhalten, das sollte reichen um Problemen auf die Spur zu kommen.
Zudem werde ich die tagesweise stückeln, da diese in einem Backend angezeigt werden sollen.
Dafür nenne ich die Logfiles so:

define('SYNC_LOG','sync.'.date('N').'.log.txt');

Also mit numerischem Wochentag im Namen.

Continue reading “Zend_Log pseudo logrotate”

PHP Simple HTML DOM Parser

Bin neulich über eine nette Klasse gestolpert, die sich lohnt mal anzuschauen:

PHP Simple HTML DOM Parser

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!

Continue reading “PHP Simple HTML DOM Parser”

Ein symfony Projekt in git

Neulich habe ich mal ein Projekt von SVN auf git umgezogen.
Ähnlich wie bei SVN muss auch hierbei das Projekt ein bißchen vorbereitet werden damit die Versionierung
das macht was sie soll.
Das Projekt wird in Eclipse bearbeitet, also wird auch hier drauf Rücksicht genommen.

Alles was man beachten muss ist eigentlich nur die ignores für git richtig zu setzen.
Hier mal meine Ignore List:

Continue reading “Ein symfony Projekt in git”

Silverstripe lokalisierte Dates

… und wieder Silverstripe.

Lokalisierte Dates macht Silverstripe nicht out-of-the-box, man muss da ein bißchen was umbauen:

In der _config.php

i18n::set_locale('de_DE');
setlocale (LC_ALL, 'de_DE@euro', 'de_DE.UTF-8', 'de_DE', 'de', 'ge');

Die Silverstripe (2.3.6) Lokalisierung alleine reicht da nicht.
Ich nehme an das wird in 2.4 sich ändern.

Um im Frontend dann sowas zu bekommen : 12 März 2010
Continue reading “Silverstripe lokalisierte Dates”

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”