簡體   English   中英

遭受嚴重ddos攻擊的php fopen()和fwrite()

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM