我想在每次发送或接收电子邮件时在数据库中创建一个日志。每次发送电子邮件或创建联系人时,我都需要从 Outlook 接收事件。该服务器是 Amazon https://aws.amazon.com/amazon-linux-ami/2017.09-release-notes/上的 LINUX 服务器
到目前为止,我尝试的代码如下。
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);
}
它不起作用。 我可以知道我做错了什么吗?
你几乎是对的!
我会为日志文件夹名称做一个常量。 然后,我还会用年、月和日写日志文件名,以便按字母顺序排序。
此代码适用于我的计算机:
<?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用户或组读取、写入(如果需要,也可以有列表(。
通常我会在终端中执行此操作:
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/