2016-07-20 36 views
1

我想添加一個值(!未覆蓋)到一個txt文件,增加值file_put_contents如何txt文件用PHP

這是我到目前爲止有:

$fileUserId = fopen("fileUserId.txt", "w") or die("Unable to open file!"); 
$UserIdtxt = $UserID."||"; 
file_put_contents("fileUserId.txt", $UserIdtxt, FILE_APPEND); 
fclose($fileUserId); 

$UserID是的整數,如1,2,3等

因此,當用戶ID爲1,則fileUserId.txt看起來像這樣:

1||

當有ID爲2, 的fileUserId.txt其他用戶應該是這樣的:

1||2||

但他覆蓋該文件,因此它變成這樣:

2||

我做錯了什麼?

回答

5

刪除fopenfclose行,你很好。 file_put_contents在內部執行此操作。並且fopen("fileUserId.txt", "w")清除該文件。

注:

'W' 寫入方式打開;將文件指針放在文件的起始位置 ,並將文件截斷爲零。如果文件不存在 ,請嘗試創建它。

+0

那麼這工作正常。現在發生的唯一事情是:他在它們之間放置一個'0';所以這是** fileUserId.txt的內容**'1 || 0 || 63 || 0 || 24 ||' –

+0

@JackMaessen Plus;最後一個'||'沒有必要,因爲'24'後面沒有任何值....檢查下面的替代方法...但是,您應該接受這個解決方案...也許它提供了一個替代方案... – Poiz

+0

'1 || 0 || 63 || 0 || 24 ||'這就是你正在使用的代碼的另一個問題。 – JustOnUnderMillions

1

你可以做得不同。下面的評論代碼說明如何:

<?php 

    $txtFile = __DIR__ . "/fileUserId.txt"; 
    $UserID  = 9; //<== THIS VALUE IS FOR TESTING PURPOSES, 
        //<== YOU SHOULD HAVE ACCESS TO THE ORIGINAL $UserID; 

    //CHECK THAT THE FILE EXISTS AT ALL 
    if(file_exists($txtFile)){ 
     // GET THE CONTENTS OF THE FILE... & STORE IT AS A STRING IN A VARIABLE 
     $fileData  = file_get_contents($txtFile); 

     // SPLIT THE ENTRIES BY THE DELIMITER (||) 
     $arrEntries  = preg_split("#\|\|#", $fileData); 

     // ADD THE CURRENT $UserID TO THE $arrEntries ARRAY 
     $arrEntries[] = $UserID; 

     // RE-CONVERT THE ARRAY TO A STRING... 
     $strData  = implode("||", $arrEntries); 

     // SAVE THE TEXT FILE BACK AGAIN... 
     file_put_contents($txtFile, $strData); 
    }else{ 
     // IF FILE DOES NOT EXIST ALREADY, SIMPLY CREATE IT 
     // AND ADD THE CURRENT $UserID AS THE FIRST ENTRY... 
     file_put_contents($txtFile, $UserID); 
    } 
+0

那樣:到羅馬的觀光方法! ;) – JustOnUnderMillions

+0

@JustOnUnderMillions ;-)不! **通往你的家庭!!! ** ;-) – Poiz