在正常情况下,一切正常,我可以使用fopen()
和fwrite()
编写和创建新文件,但在“重”DDOS攻击下,当文件指针位于0时,我无法写任何文件.eg。使用“w”mod,结果将是一个空白文件,但是通过使用“a”或“c”mod,如果文件不存在或为空,则不会写入任何内容(并且只创建一个空白文件),但是如果是文件有一些字符,它会在字符后写入或分别清除和重写新字符。
当DDOS停止时,一切都会好的。
这是我用于测试的简单代码,问题是什么?我能解决吗?
我在ubuntu中使用php5,使用apache和lighttpd ...
<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fputs($fp, '23');
fclose($fp);
?>
答案 0 :(得分:1)
我理解这个问题的方法是,当有多个请求同时访问.php文件(以及您正在写入的文件)时,运行此代码时遇到问题。
现在,虽然它远非万无一失,flock()可以帮助解决这个问题。基本概念是在写入之前要求锁定文件,如果能够锁定该文件,则只写入文件,如
$fp = fopen( $filename,"w"); // open it for WRITING ("w")
if (flock($fp, LOCK_EX | LOCK_NB)) {
// do your file writes here
// when you're done,
// flush your file writes to a file before unlocking
fflush($fp);
// unlock the file
flock($fp, LOCK_UN);
} else {
// flock() returned false, no lock obtained
print "Could not lock $filename!\n";
}
fclose($fp);
您可以从manual entry或this article了解更多详情。