[英]php fopen() and fwrite() under heavy ddos attack
在正常情况下,一切正常,我可以使用fopen()
和fwrite()
编写和创建新文件,但是在“大量” DDOS攻击下,当文件指针位于0时,我无法向file.eg写入任何内容。 使用“ w” mod,结果将是一个空白文件,但是使用“ a”或“ c” mod,如果文件不存在或为空,则不会写入任何内容(也将创建一个空白文件),但是如果file有一些字符,它将在字符之后写入,或者分别清除和重写新字符。 当DDOS停止时,一切都会好的。 这是我用于测试的简单代码,这是什么问题? 我可以解决吗?
我在ubuntu中使用php5与apache和lighttpd ...
<?php
$fp = fopen('data.txt', 'w');
fwrite($fp, '1');
fputs($fp, '23');
fclose($fp);
?>
我理解问题的方式是,当有多个请求同时访问.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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.