1 <?php
2 include_once 'error.php';//文件代码在下方
3 $http=new \swoole\http\server('0.0.0.0',9502);
4 $http->set([
5 'package_max_length'=>1024*1024*10,
6 'upload_tmp_dir'=>__DIR__.'/upload'
7 ]);
8 //监听http协议
9 $http->on('request',function ($request,$response){
10 $response->header('Content-Type','text/html');
11 $response->header('Charset','utf-8');
12 $server=$request->server;
13 $path_info=$server['path_info'];
14 if($path_info=='/'){
15 $path_info='/';
16 }else{
17 $path_info=explode('/',$path_info);
18 }
19 if(!is_array($path_info)) {
20 $response->status(404);
21 $response->end('<meta charset="UTF-8">请求路径无效');
22 }
23 //模块
24 $model=(isset($path_info[1]) && !empty($path_info[1]))?$path_info[1]:'Swooleman';
25 //控制器
26 $controller=(isset($path_info[2]) && !empty($path_info[2]))?$path_info[2]:'error';
27 //方法
28 $method=(isset($path_info[3]) && !empty($path_info[3]))?$path_info[3]:'index';
29 //结合错误处理
30 $class_name="\\{$model}\\$controller";
31 if($class_name == '\favicon.ico\Index'||$class_name == '\favicon.ico\error' ){
32 return ;
33 }
34 //判断控制器类是否存在
35 if(file_exists(__DIR__.'/../'.str_replace('\\', '/', $class_name).'.php')){
36 require_once __DIR__.'/../'.str_replace('\\', '/', $class_name).'.php';
37 $obj= new $class_name;
38 //判断控制器方法是否存在
39 if(!method_exists($obj,$method)){
40 $response->status(404);
41 $response->end("<meta charset='UTF-8'>兄Dei,方法不存在,别瞎几把访问好吗");
42 }else{
43 //如果存在此方法,返回结果,return 无效
44 $response->end($obj->$method());
45 }
46 }else{
47 $response->status(404);
48 $response->end("<meta charset='UTF-8'>兄Dei,类不存在,别瞎几把访问好吗");
49 }
50 });
51 //启动http服务器
52 $http->start();
1 <?php
2
3 register_shutdown_function('handleFatal');
4 //进程关闭时触发
5
6 //发送错误信息到某个设备\发送邮件
7
8
9 function handleFatal()
10 {
11 $error = error_get_last(); //获取最后的错误
12 if (isset($error['type']))
13 {
14 switch ($error['type'])
15 {
16 case E_ERROR :
17 case E_PARSE :
18 case E_CORE_ERROR :
19 case E_COMPILE_ERROR :
20 $message = $error['message'];
21 $file = $error['file'];
22 $line = $error['line'];
23 $log = "$message ($file:$line)\nStack trace:\n";
24 $trace = debug_backtrace();
25 foreach ($trace as $i => $t)
26 {
27 if (!isset($t['file']))
28 {
29 $t['file'] = 'unknown';
30 }
31 if (!isset($t['line']))
32 {
33 $t['line'] = 0;
34 }
35 if (!isset($t['function']))
36 {
37 $t['function'] = 'unknown';
38 }
39 $log .= "#$i {$t['file']}({$t['line']}): ";
40 if (isset($t['object']) and is_object($t['object']))
41 {
42 $log .= get_class($t['object']) . '->';
43 }
44 $log .= "{$t['function']}()\n";
45 }
46 if (isset($_SERVER['REQUEST_URI']))
47 {
48 $log .= '[QUERY] ' . $_SERVER['REQUEST_URI'];
49 }
50 file_put_contents(__DIR__.'/log.log',$log);//错误日志的输出
51 return $log;
52 //echo $log;
53 default:
54 break;
55 }
56 }
57 }