【问题标题】:Creating a log script创建日志脚本
【发布时间】:2020-05-20 06:51:30
【问题描述】:

我想在每次发送或接收电子邮件时在数据库中创建一个日志。每次发送电子邮件或创建联系人时,我都需要从 Outlook 接收事件。服务器是亚马逊上的LINUX服务器https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/

目前我尝试过的代码如下。

function wh_log($log_msg)
{
    $log_filename = "log";
    if (!file_exists($log_filename)) 
    {
        mkdir($log_filename, 0777, true);
    }
    $log_file_data = $log_filename.'/log_' . date('d-M-Y') . '.log';
    file_put_contents($log_file_data, $log_msg . "\n", FILE_APPEND);
}

它不工作。 我可以知道我做错了什么吗?

【问题讨论】:

  • 那么你是说你没有收到来自 OutLook 的事件或者这段代码没有写入文件?
  • @RiggsFolly - 每次发送电子邮件或创建联系人时,当我从 Outlook 收到事件时,不会创建日志
  • 那么这个函数怎么调用呢?
  • @RiggsFolly - 刚刚添加到 AWS 后端。

标签: php database email logging outlook


【解决方案1】:

你几乎是对的!

我会为日志文件夹名称做一个常量。 然后,我还会用年、月和日写日志文件名,以便按字母顺序排序。

这段代码可以在我的电脑上运行:

<?php

define('LOG_FOLDER', '/var/log/my_php_app');

function wh_log($log_msg)
{
    if (!file_exists(LOG_FOLDER)) {
        if (!@mkdir(LOG_FOLDER, 0775, true)) {
            die('Cannot create the log folder!');
        }
    }
    $log_filename = LOG_FOLDER .'/log_' . date('Y-m-d') . '.log';
    file_put_contents($log_filename, $log_msg . "\n", FILE_APPEND);
}


wh_log('Starting the script');

sleep(1);

wh_log('Finished!');

您是否检查了将创建log 文件夹的文件夹是否具有写入权限?

在继续之前最好检查mkdir() 的结果值。在这里我粗暴地停止了 PHP 脚本(这不是最好的做法,但这只是为了示例)。

检查您的 PHP 错误日志,看看您是否可以获得有关问题所在的更多信息。

我希望您的 PHP 代码使用特定的用户帐户和组运行。它可以是www-data、apache 或特定帐户用户。这取决于托管。我通常在部署网站时会提前创建日志文件夹。文件夹本身应该有 PHP 用户或组的 read、write(如果需要,还可以有 list)。

通常我会在终端中执行此操作:

sudo mkdir /var/log/my_php_app
sudo chown root:www-data /var/log/my_php_app
sudo chmod ug=rwx,o=rx /var/log/my_php_app/

【讨论】:

  • 感谢帕特里克的回答。我必须检查您的代码,看看它是否适合我。 +1 的努力。
  • @Nitesh 不客气!我还把0777换成了0775,这样其他用户就不能写到你的日志文件夹里了。
  • 我没有看到任何从原始代码中实际更改的注释
  • @RiggsFolly 是的,你是对的!我在必须创建 log 文件夹的父文件夹中添加了关于写入权限的评论。
  • 那么这将如何解决 OP 的未写入文件的问题?
猜你喜欢
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 2021-12-06
  • 2019-06-15
相关资源
最近更新 更多