date = $date; $this->error = "" . $error; $this->state = $state; } private function toCSV() { return array($this->date, $this->error, serialize($this->state)); } public function fromCSV(array $entry) { return new PlErrorReport($entry[0], $entry[1], unserialize($entry[2])); } public static function report($error) { $error = new PlErrorReport(date('Y-m-d G:i:s'), $error, array('Session' => $_SESSION, 'Env' => $_REQUEST, 'Post' => $_POST, 'Get' => $_GET, 'Cookie' => $_COOKIE, 'Server' => $_SERVER)); $file = fopen(Platal::globals()->spoolroot . '/spool/tmp/site_errors', 'a'); fputcsv($file, $error->toCSV()); fclose($file); } public static function iterate() { return new PlErrorReportIterator(); } public static function clear() { @unlink(Platal::globals()->spoolroot . '/spool/tmp/site_errors'); } } class PlErrorReportIterator implements PlIterator { private $file; public function __construct() { $file = Platal::globals()->spoolroot . '/spool/tmp/site_errors'; if (file_exists($file)) { $this->file = fopen($file, 'r'); } else { $this->file = null; } } public function next() { if (!$this->file) { return null; } $entry = fgetcsv($this->file); if ($entry === false) { fclose($this->file); $this->file = null; return null; } $value = PlErrorReport::fromCSV($entry); return $value; } public function total() { return 0; } public function first() { return false; } public function last() { return false; } } // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: ?>