覆蓋文件中特定行的最佳方法是什麼?我基本上想搜索一個文件中的字符串'@parsethis',並用其他東西覆蓋該行的其餘部分。用PHP覆蓋文件中的行
17
A
回答
18
-1
我很可能會做傑里米建議的事情,但只是另一種方法來做到這一點是另一種解決方案。這尚未經過測試或使用,適用於* nix系統。
$cmd = "grep '@parsethis' " . $filename;
$output = system($cmd, $result);
$lines = explode("\n", $result);
// Read the entire file as a string
// Do a str_repalce for each item in $lines with ""
5
您的主要問題是,新行可能與舊行的長度不一樣。如果您需要更改該行的長度,那麼在更改後的行之後至少不能重寫所有文件。最簡單的方法是創建一個新的,修改後的文件,然後將其移動到原始文件上。這樣一來,讀者就可以隨時獲得完整的文件。使用鎖定來確保只有一個腳本一次修改文件,並且由於您要替換該文件,請對另一個文件執行鎖定。退房flock()
。
如果您確信,新的生產線將是相同長度的舊線,你可以打開讀取/寫入模式(使用r+
作爲第二個參數fopen()
)文件,並調用ftell()
保存位置在你撥打fgets()
來讀取一行之前,每一行都會開始。一旦找到想要覆蓋的行,可以使用fseek()
返回行的開頭,並使用fwrite()
新數據。一種強制線條始終長度相同的方法是將空間填充到最大可能長度。
20
如果文件真的很大(日誌文件或類似的東西),並且你願意犧牲內存消耗的速度,你可以打開兩個文件,並且基本上用Jeremy Ruten來代替系統內存。
$source='in.txt';
$target='out.txt';
// copy operation
$sh=fopen($source, 'r');
$th=fopen($target, 'w');
while (!feof($sh)) {
$line=fgets($sh);
if (strpos($line, '@parsethis')!==false) {
$line='new line to be inserted' . PHP_EOL;
}
fwrite($th, $line);
}
fclose($sh);
fclose($th);
// delete old source file
unlink($source);
// rename target file to source file
rename($target, $source);
0
,或者如果你的文件不是太大:
$sample = file_get_contents('sample');
$parsed =preg_replace('#@parsethis.*#', 'REPLACE TO END OF LINE', $sample);
你必須選擇分隔符「#」是不存在的文件中雖然。
相關問題
- 1. 使PHP覆蓋XML文件?
- 2. 使用PHP覆蓋文件問題
- 3. 覆蓋txt文件中的單行
- 4. 運行cronjob覆蓋文件
- 5. Python中的文件覆蓋
- 6. 覆蓋文件中的Java
- 7. 覆蓋文件
- 8. 不能覆蓋文本文件 - PHP
- 9. 由PHP覆蓋的Python ENV文件ENV
- 10. 如何用零覆蓋文件行
- 11. 覆蓋jar文件中的.tld文件
- 12. 覆蓋ANT中的文件集引用
- 13. 用File.CreateText覆蓋文件(C#)
- 14. 用DropboxSDK覆蓋文件
- 15. 用HTML5 FileWriter覆蓋文件
- 16. 用git覆蓋文件夾
- 17. 覆蓋文件時寫入的行業?
- 18. 在jenkins的文件級執行覆蓋
- 19. 覆蓋文件中ziparchive
- 20. 覆蓋文件中間
- 21. 防止覆蓋文件中
- 22. 在Python中覆蓋文件
- 23. PHP fgetcsv()搜索並覆蓋文件
- 24. PHP上傳和覆蓋照片文件
- 25. PHP - CSV文件覆蓋基於UID
- 26. PHP - 錯誤而覆蓋文件
- 27. 如何用PHP中的新內容覆蓋文件內容?
- 28. 調用從覆蓋方法中覆蓋的方法在OO PHP
- 29. 力覆蓋文件
- 30. Serilog覆蓋文件
這是我一直這樣做的。我會很好奇,看看是否有辦法在原地修改文件。 – 2008-10-24 23:42:00