【问题标题】:How to log Request and Errors on a PHP webservice without using any framework如何在不使用任何框架的情况下在 PHP Web 服务上记录请求和错误
【发布时间】:2017-06-30 06:35:56
【问题描述】:
  1. 我正在为 Web 应用程序开发 PHP 后端 API 服务器, 其中包含 50 多个 PHP API。
  2. 现在我需要的是我 需要记录所有请求的出现和这些 API 发生的错误。
  3. 我没有使用任何框架。
  4. 我创建了自己的日志记录代码 下面给出的请求。

// **************PHP API请求日志代码**********************

函数日志数据 {

$req_dump = json_encode($_REQUEST);

$actual_link = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$filename = str_replace(" ", "_", $_FILES['userfile']['name']);


$log  = "------------------------------------------------------------".PHP_EOL.
"UserIP: ".$_SERVER['REMOTE_ADDR'].' - '.date("F j, Y, g:i a").PHP_EOL.
       "Request Data: ".$req_dump.PHP_EOL.
       "Request Method: ".$_SERVER['REQUEST_METHOD'].PHP_EOL.
       "API URL: ".$actual_link.PHP_EOL.
       "File Name: ".$filename.PHP_EOL.
       "------------------------------------------------------------".PHP_EOL;
}


       // $fp = fopen('../api_logs/request.txt', 'a');
       // $fw = fwrite($fp, $log);
       // fclose($fp);
       $fp = file_put_contents( '../api_logs/request.log', $log, FILE_APPEND);

// **************PHP API Request Log Code*****************
  1. 现在将所有 API 的请求信息和错误日志一起记录到服务器本身的文件中的最佳方法是什么?

【问题讨论】:

  • 如果它有一个入口点(例如 index.php ),您可以在那里记录请求,还可以查看这些函数register_shutdown_functionset_error_handlerset_exception_handler
  • 您可以在我的 github github.com/ArtisticPhoenix/Evo/blob/master/EVO/Error/… 上看到一些如何使用这些的示例,尽管这是我正在编写的更大框架的一部分。

标签: php error-logging


【解决方案1】:

没有任何框架,你可以为error handling使用默认的php函数:

  • set_error_handler() 用于通知、警告、弃用等,具体取决于您的错误报告级别。
  • register_shutdown_function() 用于致命错误
  • set_exception_handler() 用于异常

然后您可以将这些信息存储在文本文件或数据库中。

set_error_handler 示例:

set_error_handler(function ($errno, $errstr, $errfile, $errline) {
    // do your custom error handling        
});

register_shutdown_handler 示例:

register_shutdown_function(function () {
    $error = error_get_last();
    // $error should be array containing 'message', 'file', 'line' etc...
});

【讨论】:

  • 感谢您的帮助。
【解决方案2】:

您可以设置PHP error handlers 来捕获错误和警告,如 BenRoob 的响应中所述。但请注意,您的代码很容易受到攻击:

  • 记录毒药:攻击者可以在您的日志中注入代码,以利用其他类型的漏洞(如LFI)。
  • And Log injection

要解决第一个问题,您可以使运行 PHP 的用户无法访问日志文件(例如,仅授予其写入权限) 其次,只需从用户输入中转义所有 PHP_EOL。

【讨论】:

    猜你喜欢
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2012-08-09
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多