PHP shutdown sequence
I needed to figure out in what order PHP shuts down, after the end of a script has been reached, so I created a small testing script. Maybe this is of use for someone else trying to google this like I tried.
<?php
// Testing shutdown sequence
function shutdown() {
echo "register_shutdown_function\n";
}
register_shutdown_function('shutdown');
class MyClass {
function __destruct() {
echo "Object destructor\n";
}
}
function obcallback($buffer) {
$buffer .= "Output buffer callback\n";
return $buffer;
}
ob_start('obcallback');
$myObject = new MyClass;
function dummy() { }
function sessionclose() {
echo "Session close\n";
}
function sessionwrite() {
echo "Session write\n";
}
session_set_save_handler('dummy','sessionclose','dummy','sessionwrite','dummy','dummy');
session_start();
?>
The output, on PHP 5.2.0 on the cli is:
register_shutdown_function
Object destructor
Output buffer callback
Session write
Session close
I was mostly interested in this because I wanted to work with a custom session handler. This means I can basically not use objects in combination with session handlers, unless I don't rely on $this.
Comments
Richard Thomas •
Yes you can, you need to register session_close in your register_shutdown_functionOr
register_shutdown_function("session_write_close");
This closes the session up prior to the objects being destroyed
Evert •
Thats smart!Johannes •
That part of the PHP code is een good commented, so you can et the real order without much internals&C knowledge: http://lxr.php.net/source/php-src/main/main.c#1546Evert •
That is pretty cool.. looks like I haven't really missed anything =)Adam •
I always love investigative PHPing. Good work and very useful!open source •
I think it is a tip of the day :)zib3r •
Well , man .... it was awesome.. of course. You can be better than that.But what can i say.You can say just that you're the best and fuck the rest.Keep it up the good work.Bye . From Oradea/Romania/Alexandru.