在重ddos攻击下,php fopen()和fwrite()

时间:2012-11-13 09:17:46

标签: php fopen fwrite ddos file-pointer

在正常情况下,一切正常,我可以使用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);
?>

1 个答案:

答案 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 entrythis article了解更多详情。