Stránka 1 z 1

[PHP] Prace se soubory pri terminaci skriptu

Napsal: sob 2. úno 2008, 15:27
od OndraSter
Nazdar..

Zacal jsem vyvoj na mem novem webovem 'jadre' a udelal jsem tam i mj. logovaci mechanizmus. Ten se na konci parsovani zapise do souboru.

Inu, register_shutdown_function mi nesezere nestaticky metody v tride. Tak jsem udelal jednu zvlastni obycejnou funkci:

Kód: Vybrat vše

function shutdown() {

	global $page, $mysql;
	
	$mysql->terminate();
	$page->terminate();
	
}
a tu jsem dal do register_shutdown_function. Nasledne sem se divil, proc se nezapise log! (Ten se automaticky zapisuje tesne pred skoncenim terminate() v $page)

Samo ze nejaky 'debugging' nepomohl - vzdy se vypsalo to, co bylo jako obsah logu, spravne, jak melo. (

Kód: Vybrat vše

	function terminate() {
	
		$this->add('Ending log at ' . time() . ' (' . date('d.m.Y H:i:s') . ')');
		
		$out = '';
		
		foreach($this->lines as $line) {
		
			$out .= $line . "\n";
			
		}
		
		file_put_contents('./logs/' . time() . '_' . rand(0, 300) . '.log', $out);
		

		echo './logs/' . time() . '_' . rand(0, 300) . '.log', $out;
	
	}
)

Po 45ti minutach jsem prisel na to, ze kdyz je nejaka funkce volana automaticky pres ten register_shutdown_function a zapisuje se z ni do souboru (file_put_contents, fopen & fwrite & fclose) tak se proste nic nestane, ani zadna chybova hlaska, proste nic.

Napadlo me pouzit ve tridach __destruct().. Ale co se nestalo! Ten samy vysledek jako pri register_shutdown_function()!

neco jsem o tom nasel na php.net ale to je 3 roky stare.. Podival jsem se do Server Rootu (ne document rootu) a opravdu tam byly vsechny logovaci soubory!

resenim je tedy:

Kód: Vybrat vše

		file_put_contents(dirname(__FILE__) . '/logs/' . time() . '_' . rand(0, 300) . '.log', $out);
pokud nekdo bude resit tento problem tak doufam ze mu toto pomuze.. :wink: