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”

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”

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”

Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions

Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln “related” Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten.
“Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter.”
Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf.
Hier braucht man eigentlich schon was mit Ajax/Pagination.

Hier ein Entwurf für ein FormWidget, Plugin das seine eigenen Ajax Actions haben soll. Continue reading “Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions”