function _fatal($code = 404, $errfile = '', $errline = '', $errmsg = '', $errno = 0) { global $core, $file, $warning; sql_close(); // TODO: Check if is ghost request. $warning = '<b>%s</b>: in file <b>%s</b> on line <b>%s</b>: <b>%s</b><br>'; switch ($code) { case 504: case 505: echo sprintf($warning, 'PHP Notice', $errfile, $errline, $errmsg); break; case 506: exit('USER_ERROR: ' . $errmsg); break; default: $error_path = XFS . XHTM . _tbrowser() . '/warnings/%s.htm'; $sql_message = 'SQL ERROR @ %s # %s<br /><br />' . "\n" . ' %s<br /><br />' . "\n"; if ($errno) { $code .= '-' . $errno; } $filepath = sprintf($error_path, $code . (is_ghost() ? '-ghost' : '')); if (!@file_exists($filepath)) { $filepath = sprintf($error_path, 'default'); } $v_host = get_protocol() . get_host(); // SQL error if ($code == 507) { $sql_time = date('r'); $sql_format = str_replace(array("\n", "\t"), array('<br />', ' '), $errmsg['sql']); $sql_message = sprintf($sql_message, get_host(), $sql_time, _page()); if (!empty($errmsg['message'])) { $sql_message .= $errmsg['message'] . '<br /><br />' . "\n"; } $sql_message .= $sql_format; $errmsg = ''; if (!is_remote()) { $errmsg = '<br /><br />' . $sql_message; } $sql_message = _utf8($sql_message); if (!($report_to = $file->read(XFS . XCOR . 'store/server_admin'))) { $report_to = array(v_server('SERVER_ADMIN')); } // Send report to server admins @ XFS.XCOR . store/server_admin if (count($report_to)) { /* $core->email->init($report_to[0]); $core->email->subject('PHP/SQL error @ ' . get_host()); $core->email->message($sql_message); $core->email->send($report_to); */ echo $sql_message; exit; } } $v_self = v_server('PHP_SELF'); $replace = array('{ERROR_LINE}' => $errline, '{ERROR_FILE}' => $errfile, '{ERROR_MSG}' => $errmsg, '{HTTP_HOST}' => $v_host . str_replace(basename($v_self), '', $v_self), '{REQUEST_URL}' => v_server('REQUEST_URI'), '{REQUEST_METHOD}' => v_server('REQUEST_METHOD')); $header_code = array('0' => '404 Not Found', '507' => '501 Internal Error', '405' => '405 Method Not Allowed'); if (!isset($header_code[$code])) { $code = 0; } header('HTTP/1.1 ' . $header_code[$code]); echo str_replace(array_keys($replace), array_values($replace), implode('', @file($filepath))); exit; break; } return false; }
public function setup($tpl = '') { global $style, $core; $this->base->bio_lang = $core->v('site_lang'); $this->date_format = $this->v('bio_dateformat'); $this->timezone = $this->v('bio_timezone') * 3600; $this->dst = $this->v('bio_dst') * 3600; // Load global language $this->load_lang('main'); $tpl = _tbrowser($tpl); // Load UI template $style->set_template(XFS . XHTM . (!empty($tpl) ? $tpl : '')); return; }
public function home() { global $warning, $bio, $core, $warning; $v = $this->__(w('path ext')); if (array_empty($v)) { $warning->now(); } $location = XFS . XHTM . _tbrowser() . '/' . $v->ext . '/'; if (!@is_dir($location)) { $warning->now(); } $filename = _filename($v->path, $v->ext); if ($v->ext == 'css' && $v->path != 'default') { $v->field = !is_numb($v->path) ? 'alias' : 'id'; $sql = 'SELECT * FROM _tree WHERE tree_?? = ? LIMIT 1'; if (!($tree = sql_fieldrow(sql_filter($sql, $v->field, $v->path)))) { $warning->now(); } $filetree = _rewrite($tree); $filename = _filename('_tree_' . $filetree, $v->ext); } // // 304 Not modified response header if (@file_exists($location . $filename)) { $f_last_modified = gmdate('D, d M Y H:i:s', filemtime($location . $filename)) . ' GMT'; $http_if_none_match = v_server('HTTP_IF_NONE_MATCH'); $http_if_modified_since = v_server('HTTP_IF_MODIFIED_SINCE'); header('Last-Modified: ' . $f_last_modified); if ($f_last_modified == $http_if_modified_since) { header('HTTP/1.0 304 Not Modified'); header('Content-Length: 0'); exit; } } switch ($v->ext) { case 'css': if ($v->path != 'default') { $filetree = _rewrite($tree); $filename = _filename('_tree_' . $filetree, $v->ext); if (!@file_exists($location . $filename)) { $warning->now(); } } $browser = _browser(); if (!empty($browser['browser'])) { $custom = array($browser['browser'] . '-' . $browser['version'], $browser['browser']); foreach ($custom as $row) { $handler = _filename('_tree_' . $row, 'css'); if (@file_exists($location . $handler)) { _style('includes', array('CSS' => _style_handler('css/' . $handler))); } } } _style_vreplace(false); break; case 'js': if (!@file_exists($location . $filename)) { $warning->now(); } _style_vreplace(false); break; } v_style(array('DOMAIN' => 'media')); sql_close(); // // Headers $ext = _style_handler($v->ext . '/' . $filename); switch ($v->ext) { case 'css': $content_type = 'text/css; charset=utf-8'; //$ext = preg_replace('#(border-radius\-?.*?)\: ?(([0-9]+)px;)#is', ((_browser('firefox')) ? '-moz-\1: \2' : ''), $ext); $ext = preg_replace('/(#([0-9A-Fa-f]{3})\\b)/i', '#\\2\\2', $ext); $ext = preg_replace('#\\/\\*(.*?)\\*\\/#is', '', $ext); $ext = str_replace(array("\r\n", "\n", "\t"), '', $ext); break; case 'js': $content_type = 'application/x-javascript'; require_once XFS . XCOR . 'jsmin.php'; $ext = JSMin::minify($ext); break; } ob_start('ob_gzhandler'); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 2592000) . ' GMT'); // 30 days = 60 * 60 * 24 * 30 header('Content-type: ' . $content_type); echo $ext; exit; }