use*_*000 13 php regex url-routing front-controller
PHP的内置Web服务器允许使用"路由器脚本",允许在内部重写URL.
这种路由器脚本的问题在于,无论何时它实际处理文件而不是让PHP处理它,都会导致该请求的请求日志输出被抑制.例如,请考虑以下脚本:
<?php
if (preg_match('/^\/(js|css)/', $_SERVER['REQUEST_URI']) === 1) {
return false;
}
else {
echo 'hello world!'
}
Run Code Online (Sandbox Code Playgroud)
这会导致请求/js/*和/css/*登录控制台; 而对任何其他URL的请求只是跳过记录请求.
如何启用对控制台的所有请求的记录?
路由器.php:
if (preg_match('/^\/(js|css)/', $_SERVER['REQUEST_URI']) === 1) {
return false;
}
else {
$stdErr = fopen("php://stderr",'w+');
fwrite($stdErr, 'LogRequest:'.$_SERVER['REQUEST_URI']."\n");
echo 'hello world!1';
}
Run Code Online (Sandbox Code Playgroud)
服务器启动:php -S localhost:8000 router.php 2>&1
记录响应标头:
if (preg_match('/^\/(js|css)/', $_SERVER['REQUEST_URI']) === 1) {
return false;
}
else {
ob_start()
$stdErr = fopen("php://stderr",'w+');
fwrite($stdErr, 'Request:'.json_encode($_SERVER)."\n");
try {
echo 'hello world!1';
} catch (\Exception $e) {
http_response_code(500);
}
$response = ob_get_clean();
fwrite($stdErr, 'Response:'.json_encode([ http_response_code(),headers_list() ])."\n");
echo $response;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |