2016-12-07 88 views
-4

我有file.conf,我想打開這個文件,然後在我的字符串裏面寫上file.conf最後一行3行以上的內容。用PHP寫入文件

Example Image

+2

歡迎來到SO。 請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題](http://stackoverflow.com/help/how-to - 問) 和[完美的問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 以及如何創建[最小,完整和可驗證的例子] (http://stackoverflow.com/help/mcve) – RiggsFolly

+0

也請不要發佈代碼的圖片。發佈文本 – RiggsFolly

+0

使用'file()'將文件讀入一行數組。然後你可以用'splice()'插入到數組中,使用'implode()'將它們連接成一個字符串,然後用'file_put_contents()'將該字符串寫入文件。 – Barmar

回答

0

你應該在你希望字符串是配置輸入註釋,這樣你就可以逐行讀取配置文件中的行,然後選擇了指定的註釋時,則刪除註釋和把字符串,然後一個新的註釋文件就像這樣的:

$handle = fopen("config.cfg", "r+"); 
$i = 0; 
if ($handle) { 
    while (($line = fgets($handle)) !== false) { 
     if ($line == "//[insert comment here]") { 
      $lines = file("config.cfg" , FILE_IGNORE_NEW_LINES); 
      $lines[$i] = 'replace this string with your string' + "\n \n //[insert comment here]"; 
      file_put_contents($filename , implode("\n", $lines)); 
     } 
     i++; 
    } 
    fclose($handle); 
} else { 
    // error opening the file. 
} 
+0

看起來它會工作完美,但即時通訊接收HTTP錯誤500 –

+0

在您的第一行php請插入此: – martinkors

+0

ini_set('display_errors',1); – martinkors

0

當你是新來的PHP,最簡單的就是將整個文件讀入一個數組,並拼接在您需要的線

// Read the file into an array line by line 
$aLinesFromFile = file("config.cfg"); 

// Count the number of lines 
$numLinesInFile = count($aLinesFromFile) 

// Inject your text 
array_splice($aLinesFromFile , $numLinesInFile-3, 0, "New Line"); 

// To inject multiple lines 
// array_splice($aLinesFromFile , $numLinesInFile-3, 0, ["New Line 1", "New Line 2", "New Line 3"]); 

// Save to the file 
file_put_contents("config.cfg", implode("\n", $aLinesFromFile); 

然而,這會對大文件造成問題,所以更好的選擇是打開文件以讀取並附加(+ a),fseek()從最後(例如, 4000個字符)並讀取結束,找到是否包含3個換行符,fseek()轉發到正確的位置,然後fwrite()您要添加的內容。這樣你在內存中只有4000個字符,而不是整個文件。但它顯然有點複雜。

+0

中刪除print_r命令如果我把你的代碼,我收到錯誤500,PHP的東西是錯誤的。 http://pastebin.com/yGxpVun9 –

+0

有一個缺失的大括號,以及它的外觀缺少分號。你應該可以自己調試。 StackOverflow上的人員將爲您提供概念,可以工作的想法以及需要進行調試的想法。上面的例子是在一個小編輯中現場寫的。我花了5分鐘或更長時間來了解你的問題並作出迴應。如果你不能花費30秒鐘的時間來調試錯誤,那我爲什麼要這麼做?請閱讀http://stackoverflow.com/questions/2687730/how-can-i-make-php-display-the-error-instead-of-giving-me-500-internal-server-er – Robbie