我已经设置了一个crontab作业以每小时运行一次。
m | h | d | M | w | command
--|---|---|---|---|----------
0 | * | * | * | * | php path/job.php
在job.php内部,我有以下代码:
<?php
$today = date('Y-m-d');
echo "echo: Today is $today <br>";
printf("printf: Today is $today \n");
file_put_contents("/path/$today.log","log file created");
exit();
当我在浏览器上访问job.php
时,看到的是预期的输出:
回声:今天是20-08-2018
printf:今天是20-08-2018
并创建一个新文件20-08-2018.log
。
但是,当crontab运行此job.php
时,我收到该作业生成的输出的电子邮件通知,并且仅包含:
printf:今天是20-08-2018
此外,我检查文件是否已生成/添加,但是找不到任何文件生成的证据(即使我在等待crontab运行作业之前删除了所有日志文件)。
这怎么解释?
自动触发crontab作业时,如何使file_put_contents
工作?
编辑:我忘了提到我已经检查过php_errorlog
,怀疑当crontab触发作业时出现了问题,但是找不到任何错误。
答案 0 :(得分:2)
@Ahmad:尝试此解决方案
尝试在file_put_contents()函数中添加完整路径并给予适当的文件夹权限。
例如:
file_put_contents(__DIR__ . DIRECTORY_SEPARATOR . "{$today}.log", "log file created")
答案 1 :(得分:0)
尝试一下
$today = date('Y-m-d');
$myfile = fopen("/path/$today.log", "a") or die("Unable to open file!");
$txt = "Today is $today <br> \n";
echo "echo: Today is $today <br> \n";
fwrite($myfile, $txt);
fclose($myfile);
exit();