首页 > 解决方案 > 创建日志脚本

问题描述

每次发送或接收电子邮件时,我都想在数据库中创建一个日志。每次发送电子邮件或创建联系人时,我都需要从 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);
}

它不工作。我可以知道我在做什么不正确吗?

标签: phpdatabaseemailloggingoutlook

解决方案


你几乎是正确的!

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

此代码适用于我的计算机:

<?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-dataapache特定帐户用户。这取决于托管。我通常在部署网站时会提前创建日志文件夹。文件夹本身应该为 PHP 用户或组读取写入(如果需要,还可以有列表)。

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

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/

推荐阅读