2014-01-11 36 views
0

我在我的網站上有一個名爲「usernames.txt」的.txt文件。在該文件中,我的網站會員有用戶名,每次有新會員在我的網站上提交他的用戶名時,它都會保存在「usernames.txt」文件中。如何在新用戶名提交到.txt文件時刪除舊用戶名?

由於該文件每小時變大,我必須自己刪除舊用戶名(頂部=最舊)。這很糟糕,因爲當我在學校時,我無法訪問我的筆記本電腦,因此我無法刪除用戶名並導致服務器出現問題。 (我很難解釋爲什麼,但它確實使我的網站變慢)。

我想要的是一個腳本或PHP代碼,或者自動刪除舊用戶名(讓我們說頂部的前40個用戶名)並將新的用戶保留在文件中(讓我們說30個用戶名在底部)在「usernames.txt」文件中。

或者,我可以使用一個腳本,每30分鐘刪除第一個用戶名(頂部)。所以只有新的用戶名將被保存在「usernames.txt」中。我知道這個問題聽起來很奇怪,但重點是讓我的服務器更快。

我的網站上的文件實際上並沒有被稱爲「usernames.txt」,但是這對文件是關於什麼的。我的網站上的文件保存用戶訪問令牌(Facebook Graph thingy),但在我給它的例子中是用戶名不是訪問令牌。 (因爲大多數人甚至不知道訪問令牌是什麼,但希望每個人都知道用戶名是什麼)。

+5

是否有您不使用數據庫的原因是什麼? – some

+1

我很好奇什麼樣的網站以這樣的速度吸引用戶名,以致文件每小時變得太大?如果您使用數據庫,「減速」仍然是一個因素嗎? – GreenAsJade

+0

在這種情況下有多大? –

回答

0

我假設每個用戶都在自己的路線上。

您可以使用array_slice用於此目的。然後,您可以基於切片值重寫文件。

$filepath = "usernames.txt"; 
// convert file to array 
$file = file($filepath); 

// get first 40 elements 
$file = array_slice($file, 0, 40); 

// rewrite usernames file 
file_put_contents($filepath, implode("", $file)); 

您可以添加cron job自動處理這個腳本,只要你想,如果你有你的服務器上的cron。

編輯:

試試這個腳本來代替。

$filepath = "usernames.txt"; 
// reverse array to get first elements at the top; convert file to array 
$file = array_reverse(file($filepath)); 

// get first 40 elements 
$file = array_slice($file, 0, 40); 

// reverse array back; rewrite usernames file 
file_put_contents($filepath, implode("", array_reverse($file))); 

EDIT2:

$file = file($filepath); 

if(in_array($submittedUsername, $file)) { 
    $i = array_search($submittedUsername, $file); 
    unset($file[$i]); 
} 

// then save username to the file 
+0

哦,天啊!實際上工作!我從來沒有想過會有解決我的問題,但我試了一下,發佈在Stackoverflow! 非常非常感謝你!我真的很感激它的男人:) – user3184573

+0

你好aksu,有一個問題:) 新的用戶名不會被保存或替換在usernames.txt文件中,40最老的(不是最新的)用戶名只有那裏,我想要的是在提交時用舊用戶名替換新用戶名:) – user3184573

+0

嗨。我在代碼上犯了一個錯誤。問題在於它只選擇文件中最老的元素。請嘗試更新的代碼。 – aksu

0

儲存於一個會話變量,並要求它,而他們已登錄。

那麼你不必將其存儲在與所有其他用戶的信息混合的文本文件,可能導致衝突和I/O塊(服務器請求在等待讀取/寫入該文件時被延遲)。

  1. 登錄
  2. PHP店訪問令牌在會話方便地訪問服務器端。
  3. 令牌在用戶關閉會話時消失。

如果您在任何給定的點(如在幾十萬 - 百萬)有一個非常大的用戶可以不用擔心內存的使用情況。

是的,因爲其他人都提到過數據庫也是一個有用的選項。我會爲這種特殊情況推薦MongoDB

+0

謝謝你的評論,aksu已經解決了我的問題:) – user3184573

相關問題