从PHP触发awstats更新
我试图从PHP脚本内部触发AWStats的更新 我目前使用cron作业触发更新,并简单地将命令行复制到脚本中的从PHP触发awstats更新,php,awstats,Php,Awstats,我试图从PHP脚本内部触发AWStats的更新 我目前使用cron作业触发更新,并简单地将命令行复制到脚本中的exec函数中 if(exec("/path/to/awstats.pl -config=domain.com -update")) { echo 'Logs processed'; } 但是,这返回一个假阳性。尽管显示了“Logs processed”(已处理日志)行,但AWStats尚未处理统计信息 当直接访问AWStats时,它确实工作得非常好,当通过cron作业运行更新
exec
函数中
if(exec("/path/to/awstats.pl -config=domain.com -update")) {
echo 'Logs processed';
}
但是,这返回一个假阳性。尽管显示了“Logs processed”(已处理日志)行,但AWStats尚未处理统计信息
当直接访问AWStats时,它确实工作得非常好,当通过cron作业运行更新时,它不是来自这个PHP脚本。我已经检查了错误日志,我的脚本或AWStats超时没有问题
我错过什么了吗
对于记录,此脚本旨在清除旧数据,更新引用者黑名单以阻止垃圾邮件,然后从日志文件重新编译统计数据。是的,我知道使用SkipPreferreBlacklist指令的性能问题。从您的代码中可以看出,
exec
返回一个布尔值,指示成功或失败。不需要,它只返回一个字符串(命令输出的最后一行)。字符串(除了“0”
和空字符串)的计算结果始终为true
要调试此问题,应打印命令的输出:
exec("/path/to/awstats.pl -config=domain.com -update", $output);
echo join(PHP_EOL, $output);
cronjob是否与PHP脚本以相同的用户身份运行?@aross啊,这是在共享托管服务器上。我相信是这样,但我不确定。尝试手动将某些内容附加到脚本写入的文件中。当然是从PHP脚本。这可能只是一种许可issue@aross我将PHP脚本作为cron作业执行,结果是一样的。该脚本也会将数据附加到文件中(这是它的目的),而且效果很好。谢谢,@aross。是的,我没有正确思考,我确实假设了一个布尔型的反应。我还认为PHP脚本没有被授权运行
.pl
文件,并且输出是一个数组。通过创建脚本可以运行的.cgi
文件,我找到了一个解决方案。