【问题标题】:PHP Logging - won't add new linePHP Logging - 不会添加新行
【发布时间】:2013-11-03 17:51:28
【问题描述】:

我有一个名为 logToFile 的函数,当我调用它时,它会记录到文件中,但不会添加新行。

这是我的代码:

function logToFile($msg) {
    $filename = "log.txt";
    $fd = fopen($filename, "a");
    $str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg;
    fwrite($fd, $str . "\n");
    fclose($fd);
}

我试过了:

$msg . "\n"
$msg . "\r\n"

他们都输出这个:

[2013/11/03 06:32:06]Test[2013/11/03 06:34:58]Test2[2013/11/03 06:37:10]Test3

【问题讨论】:

  • 你用什么来查看文件?
  • 我觉得应该是$msg .= "\n";
  • 记事本不显示\n,请改用\r\n。或者使用“好的”文本编辑器。
  • 这在我的机器上运行良好。一定是您使用的编辑器有问题,您可以尝试使用简单的命令行 cat 来显示 log.txt 吗?一个建议是使用带有 FILE_APPEND 标志的 file_put_contents,这将非常方便

标签: php function logging newline fwrite


【解决方案1】:

这些\n\r 只能被浏览器看到。因此,如果您想查看它,请停止使用记事本打开它,并在浏览器中打开该 log.txt 文件。 为此,请尝试以下代码:

function logToFile($msg) {
    $filename = "log.txt";
    $fd = fopen($filename, "a");
    $str = "[" . date("Y/m/d h:i:s") . "] " . $msg . "\n";
    fwrite($fd, $str . "\n");
    fclose($fd);
}

但是,另一种方法是使用 html 文件而不是 txt 文件。你可以在那里使用
。所以:

  function logToFile($msg) {
        $filename = "log.html";
        $fd = fopen($filename, "a");
        $str = "[" . date("Y/m/d h:i:s") . "] " . $msg . "<br>";
        fwrite($fd, $str . "\n");
        fclose($fd);
    }

您还可以设置样式:

$str = "<span style='background-color: red;'>[" . date("Y/m/d h:i:s") . "] " . $msg . "</span><br>";

【讨论】:

    【解决方案2】:

    试试:

    fwrite($fd, $str . PHP_EOL);
    

    这将为运行 PHP 的平台编写正确类型的行尾字符串。在 Unix 上它会写成\n,在 Windows 上它应该写成\r\n

    【讨论】:

      【解决方案3】:

      除了缺少的换行符(这很可能归结为记事本的“功能”),您可以在 PHP 中使用 error_log 函数。使用它们,您不必担心打开和关闭文件句柄的开销,因为这一切都为您处理好了:

      /**
       * logMessage
       * @param string $message
       * @param string $filename
       * @param resource $logHandle
       */
      function logMessage($message=null, $filename=null, $logHandle=null)
      {
          if (!is_null($filename))
          {
              $logMsg=date('Y/m/d H:i:s').": {$message}\n";
              error_log($logMsg, 3, $filename);
          }
      
          if (is_object($logHandle))
          {
              try
              {
                  $errorPS=$logHandle->prepare("insert into ".LOG_TABLE." (insertDateTime,logText) values (now(),:message)");
      
                  $errorPS->bindParam(':message', $message, PDO::PARAM_STR);
      
                  $errorPS->execute();
              } catch (PDOException $e)
              {
                  logError($e->getMessage(), ERROR_LOG);
              }
          }
      }
      
      /**
       * logError
       * @param string $message
       * @param string $filename
       * @param resource $logHandle
       */
      function logError($message=null, $filename=null, $logHandle=null)
      {
          if (!is_null($message))
          {
              logMessage("***ERROR*** {$message}", $filename, $logHandle);
          }
      }
      

      上述函数是我为自定义记录到文件(或者数据库表)而编写的函数

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2011-11-03
        • 1970-01-01
        • 2014-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        • 2017-01-23
        • 1970-01-01
        相关资源
        最近更新 更多