入口文件


一、最简单的入口文件

  1. <?php
  2. define('APP_NAME', 'web'); //应用名称
  3. define('APP_DEBUG', true); //开启调试模式
  4. require '../bootstrap.php';
  5. $engine = new \Timo\Core\Engine();
  6. $engine->start(); // 运行应用

二、增加异常处理的入口文件

  1. \Timo\Core\Exception::handle($e);

这是框架自带异常处理,如果发生异常或错误,请查看/logs/Exception目录下面对应日期的日志

  1. <?php
  2. define('APP_NAME', 'web');
  3. define('APP_DEBUG', true);
  4. require '../bootstrap.php';
  5. $engine = new \Timo\Core\Engine();
  6. // 异常处理
  7. try {
  8. $engine->start();
  9. } catch(Exception $e) {
  10. \Timo\Core\Exception::handle($e);
  11. } catch(Error $e) {
  12. \Timo\Core\Exception::handle($e);
  13. }

三、自定义异常处理

  1. <?php
  2. define('APP_NAME', 'web');
  3. define('APP_DEBUG', true);
  4. require '../bootstrap.php';
  5. $engine = new \Timo\Core\Engine();
  6. // 异常处理
  7. try {
  8. $engine->start();
  9. } catch(Exception $e) {
  10. //跳转到404页面,异常处理和日志记录
  11. $engine->run('error', '_404', ['e' => $e]);
  12. } catch(Error $e) {
  13. $engine->run('error', '_404', ['e' => $e]);
  14. }

自定义异常处理,我们需要增加处理异常的控制器和方法

异常处理控制器

  1. <?php
  2. namespace app\web\controller;
  3. use Timo\Core\Exception;
  4. use Timo\Core\Log;
  5. use Timo\Core\Response;
  6. use Timo\Core\View;
  7. class Error
  8. {
  9. /**
  10. * @param $e Exception
  11. * @return string
  12. * @throws \Timo\Core\Exception
  13. */
  14. public function _404($e = null)
  15. {
  16. if (!$e instanceof \Exception && !$e instanceof \Error) {
  17. goto eco;
  18. }
  19. $log = [];
  20. $log['Message'] = $e->getMessage();
  21. $log['Code'] = $e->getCode();
  22. $log['File'] = $e->getFile();
  23. $log['Line'] = $e->getLine();
  24. $log['trace'] = explode("\n", $e->getTraceAsString());
  25. if (APP_DEBUG) {
  26. $log['trace'] = print_r($log['trace'], true);
  27. $log['traceArray'] = print_r($e->getTrace(), true);
  28. $html = '<pre>';
  29. foreach ($log as $key => $val) {
  30. $html .= $key . ':' . $val . '<br>';
  31. }
  32. return $html . '</pre>';
  33. }
  34. //记录日志
  35. Log::write(print_r($log, true), 'Error', 'Exception.' . date('Y-m.d'));
  36. eco:
  37. //"HTTP/1.1 404 Not Found"
  38. if (!isset($_GET['sendResponseCode'])) {
  39. Response::sendResponseCode(404);
  40. }
  41. $view = View::instance;
  42. $view->assign('title', '404页面 - TimoPHP');
  43. return $view->render();
  44. }
  45. }

404模版文件

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <script src="<?= $this->res('lib/jQuery/jquery-2.2.3.min.js'); ?>"></script>
  6. <title><?= $this->data['title']; ?></title>
  7. <style>
  8. .box{width: 600px; margin: 100px auto 0;}
  9. .box p{font-family: "Century Gothic","Microsoft yahei"; font-size: 24px;}
  10. </style>
  11. </head>
  12. <body>
  13. <div class="wrapper">
  14. <div class="box">
  15. <p>主银,服务器君找了半天,没找到您要访问的页面!</p>
  16. </div>
  17. </div>
  18. </body>

当我们访问不存在的页面时返回自定义404页面

例如:

  1. http://www.timophp.com/8$#dfj33.php
  2. http://www.timophp.com/YY/999/&93834##%.html