我的/ public_html / logs文件夹中有一个404.log文件。
当显示404页面时,PHP会将信息附加到404.log文件,该文件向我提供有关我的网站以及谁正在尝试访问的内容的信息。
出于某种原因,有时我会收到错误Permission Denied
。该文件是可写的,可执行的,并且每天都会被写入 - 如果我转到一个不存在的页面,文件被写入并且我可以在那里看到该条目,它可以正常工作。
然而,由于权限被拒绝,我收到了错误,我认为这种情况正在发生,因为机器人或某人试图强行进入我的网站 - 例如 - 我获得的URI是;
/static/../../../../../../../../../etc/passwd.
/cms/www/loader.php/system/"><iMg
/webtrees/modules_v3/googlemap/wt_v3_street_view.php?map=">
/sites/all/modules/fckeditor/fckeditor/editor/filemanager/connectors/cfm/connector.cfm?Command=GetFolders&Type=File&CurrentFolder=%2F
所以我的猜测是该文件已经被同一个脚本打开,但由于网站访问速度太快,导致权限被拒绝。有办法防止这种情况,或以某种方式异步写入吗?
答案 0 :(得分:1)
首先,您应该查看网络服务器为您提供的访问日志,以了解发生了多少次404。如果你必须通过PHP完成它,你可以做几件事。
可能有一个并行写入的选项,但我想这会给你一个非常奇怪的文件,其中有很多错误相互混合。
您可能会更改记录到数据库而不是文件的方式。显然,数据库同时更适合于许多请求,并且只会为发生的每个错误创建新记录。
或者,您可以实现自己的日志记录层,它基本上只是一个内存队列,只要它不为空,就会不断尝试写入文件。这样您就可以缓冲日志。您将不得不考虑保存发生事件时的时间戳,以及跟踪队列使用的内存量。
我很确定有很多图书馆可以为您解决这个问题。编写这些库的人也遇到了这些问题,并为他们创建了一个通用的解决方案,所以你现在不必担心它。