启用请求日志,即使使用路由器脚本进行PHP内置的Web服务器

PHP内置的Web服务器允许使用“路由器脚本”,允许内部重写URL.

这样的路由器脚本的问题是,每当它实际处理文件而不是让PHP处理它时,这将导致要求的请求日志输出被抑制.例如,考虑以下脚本:

<?php
if (preg_match('/^\/(js|css)/', $_SERVER['REQUEST_URI']) === 1) {
  return false;
}
else {
  echo 'hello world!'
}

这导致/ js / *和/ css / *的请求被记录在控制台上;而对任何其他URL的请求只是跳过记录请求.

如何启用对控制台的所有请求记录?

router.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';
}

服务器启动: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;
}
相关文章
相关标签/搜索