[英]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.