by:

Eines von meinen aktivsten Projekten ist CMS-Bandits an dem ich die letzten Monate die meisten Änderungen gemacht habe. Zu den größeren Änderungen gehört der Datenbank Abstractionslayer und das neue Sessionhandling. Sowie viele kleine Änderungen wie das Revisionslog, die Übersetzungsfunktion und den komplett überarbeiteten RSS Feed.

Ausserdem habe ich eine 100 Mbit Anbindung spendiert bekommen (danke Istvan). Dennoch ist es nicht leicht ein OpenSource Projekt ohne Sponsoren oder sonstige Einnahmen am Leben zu erhalten. Derzeit konzentriere ich mich auf neue Projekte die auch etwas Geld einbringen, werde aber das CMS noch weiterentwickeln.

BTW bassiert diese Webseite auch auf einer Entwicklerversion von meinem CMS, welches ihr hier gratis downloaden könnt.

Jetzt etwas technisches zu den neuen Funktionen:

Der Datenbank Abstraktionslayer MDB2 ermöglicht den Betrieb auf nahezu jeder Datenbank. Das neue Sessionhandling ist besonders dann interessant, wenn man das CMS auf einer Clusterfarm betreiben will, ausserdem hat man auch einen kleinen Performancegewinn auf normalen Maschinen da die Sessiondaten von MySQL nach Möglichkeit im Arbeitsspeicher gehalten wird, was 100-1000 fach schneller ist als das Dateisystem.

Der neue Revisionslog ermöglicht es bei Änderungen Schritte wieder zurück zu gehen, es macht also nichts wenn man mal einen Artikel versehentlich gelöscht hat. Der neu geschriebene RSS Feed kann jetzt auch von allen RSS-Readern gelesen werden.

Ich würde mich natürlich freuen, wenn jemand mein CMS unterstützen möchte, sei es finanziell oder einfach nur durch Verbesserungsvorschläge (in Form von Code am liebsten).

Ich wünsche euch noch eine schöne Woche

Andreas


Kommentare

by:

This are my first example for codejungle, it s a database session handler for php.

I got this example from php.net, but there was some small bugs i.e. on the read method.

more comming soon

Code

<?php
class Session {
    
// session-lifetime
    
public $lifeTime;
    function 
__construct ($db) {
        
// get session-lifetime
        
$this->lifeTime get_cfg_var("session.gc_maxlifetime");
           
// open database-connection
        
$this->mdb2 =& MDB2::factory($db);
        if (
PEAR::isError($this->mdb2)) {
            
$php_errormsg .= $this->mdb2->getMessage();
            
$php_errormsg .= $this->mdb2->getDebugInfo();
        }
        
session_set_save_handler(array(&$this'open'),
                                array(&
$this'close'),
                                array(&
$this'read'),
                                array(&
$this'write'),
                                array(&
$this'destroy'),
                                array(&
$this'gc'));
        
register_shutdown_function('session_write_close');
        
session_start();
           return 
true;
    }
    function 
open($savePath$sessName) {
        
// get session-lifetime
        
$this->lifeTime get_cfg_var("session.gc_maxlifetime");
        return 
true;
    }
    function 
close() {
        
$this->gc(ini_get('session.gc_maxlifetime'));
        
// close database-connection
        
return $this->mdb2->disconnect();
    }
    function 
read($sessID) {
        global 
$php_errormsg;
        
// fetch session-data
        
$query "
            SELECT session_data FROM sessions
            WHERE session = '
$sessID'
            AND session_expires >
        "
.time();
        
$result $this->mdb2->query($query);
        
// return data or an empty string at failure
        
if (MDB2::isError($result)) {
            
$php_errormsg .= $result->getMessage();
            
$php_errormsg .= $result->getDebugInfo ();
            return 
false;
        }
        list(
$value)=@$result->fetchrow();
        return 
$value;
    }
    function 
write($sessID,$sessData) {
        global 
$php_errormsg;
        
// new session-expire-time
        
$newExp time() + $this->lifeTime;
        
// is a session with this id in the database?
        
$query "
            SELECT * FROM sessions
            WHERE session = '
$sessID'
        "
;
        
$result $this->mdb2->query($query);
        
// if yes,
          
if($result->numRows()) {
        
// ...update session-data
            
$query "
                UPDATE sessions
                SET session_expires = '
$newExp',
                 session_data = '
$sessData'
                WHERE session = '
$sessID'
            "
;
          }
        
// if no session-data was found,
          
else {
            
// create a new row
            
$query "
                INSERT INTO sessions (
                     session,
                      session_expires,
                      session_data)
                VALUES(
                     '
$sessID',
                      '
$newExp',
                      '
$sessData')
            "
;
          }
        
$result $this->mdb2->exec($query);
        
// if something happened, return true
        
if (MDB2::isError($result)) {
            
$php_errormsg .= $result->getMessage();
            
$php_errormsg .= $result->getDebugInfo ();
            return 
false;
        } else {
            
// ...else return true
            
return true;
        }
    }
    function 
destroy($sessID) {
        global 
$php_errormsg;
        
// delete session-data
        
$query "
            DELETE FROM sessions
            WHERE session = '
$sessID'
        "
;
        
$opt_db="OPTIMIZE TABLE sessions";  
        
$result $this->mdb2->exec($query);
        
$resultopt $this->mdb2->exec($opt_db);
        
// if session was not deleted, return false,
         
if (MDB2::isError($result)) {
            
$php_errormsg .= $result->getMessage();
            
$php_errormsg .= $result->getDebugInfo ();
            return 
false;
         } else {
            
// ...else return true
            
return true;
        }
    }
    function 
gc($sessMaxLifeTime) {
        global 
$php_errormsg;
        
// delete old sessions
        
$query "
            DELETE FROM sessions
            WHERE session_expires <
        "
.time();
        
$result $this->mdb2->exec($query);
        
// return affected rows
        
if (MDB2::isError($result)) {
            
$php_errormsg .= $result->getMessage();
            
$php_errormsg .= $result->getDebugInfo ();
        }
        return 
$result;
    }
}
?>

If you have question pls just ask


Kommentare

by:

Hallo,

das hier ist mein neues Blog, ich möchte hier in Zukunft über mich, meine Arbeit und Projekte berichten.

Als einen wesentlichen Punkt sehe ich hier Howtos und Codebeispiele die ich gerne veröffentlichen möchte.

Im Gegensatz zu meinem Projekt hackers.ath.cx soll der Content zu 100 % user generated sein.

Ich würde mich sehr über Kommentare freuen :)


MFG


Andreas


Kommentare


Seiten: