亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在大文件中的最后一個字符之前插入字符串

如何在大文件中的最后一個字符之前插入字符串

PHP
慕碼人8056858 2022-10-28 15:46:44
我有一個由單個字符串組成的非常大的文件。由于文件的大小,我不想將整個字符串讀入內存。最后一個字符將始終是右括號],因為此字符串是 json 數組。我想在右括號之前插入一個小的 json 對象(表示為字符串)。我已經看到了一些想法,但無法得到任何工作。如您所見,我正在嘗試打開文件并使用fseek將文件指針移動到]. 然后我嘗試將新字符串寫入該位置的現有字符串。但是,這樣做的效果只是將新字符串附加到現有字符串的末尾,這不是我想要的。作為一個簡化的示例,假設文件開始時包含以下字符串:[{"name":"alice","city":"london"}]然后我想使用以下代碼將第二個人添加到此列表中:$new_person = ",{\"name\":\"bob\",\"city\":\"paris\"}";$filename = "people.json";$fh = fopen($filename, "a+");$filesize = filesize($filename);$stat = fstat($fh);fseek($fh, $stat[$filesize]-1);fwrite($fh, $new_person);fclose($fh); 但我最終得到的是一個包含此字符串的文件:[{"name":"alice","city":"london"}],{"name":"bob","city":"paris"}我的 PHP 技能很糟糕。我不知道我fseek是指向錯誤的位置還是問題出在其他地方。謝謝你的幫助。
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

文檔(強調我的):

a+:開放讀寫;將文件指針放在文件末尾。如果該文件不存在,請嘗試創建它。在這種模式下, fseek() 只影響讀取位置,寫入總是附加的。

改為使用r+模式,而不是fstat你可以這樣做:

fseek($fh, -1, SEEK_END);


查看完整回答
反對 回復 2022-10-28
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

請嘗試以下代碼以獲得您的解決方案,我已經測試并且它工作正常......


try{

    $new_person = ",{\"name\":\"bob\",\"city\":\"paris\"}]";

    $filename = "people.json";

    $fh = fopen($filename, "a+");

    $stat = fstat($fh);

    ftruncate($fh, $stat['size'] - 2);

    fwrite($fh, $new_person);

    fclose($fh); 

}catch(Exception $exc){

    echo($exc->getMessage());

}


查看完整回答
反對 回復 2022-10-28
  • 2 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號