';$handle = fopen("D:/wamp/www/liuyanban.html","a"); fseek($handle, -140,SEEK_END); fwrite($handle, "ok"); fclose($handle);?>
我想問,為什麼我已經用fseek把檔案指標改到倒數140個位元組的地方,可是寫入的時候,還是寫在檔案末尾的,如果這麼做是錯的,為什嗎?合理的思路是什嗎?
回複內容:
';$handle = fopen("D:/wamp/www/liuyanban.html","a"); fseek($handle, -140,SEEK_END); fwrite($handle, "ok"); fclose($handle);?>
我想問,為什麼我已經用fseek把檔案指標改到倒數140個位元組的地方,可是寫入的時候,還是寫在檔案末尾的,如果這麼做是錯的,為什嗎?合理的思路是什嗎?
檔案的開啟檔案使用 r+.
http://php.net/manual/zh/function.fopen.php
'r' 唯讀方式開啟,將檔案指標指向檔案頭。'r+' 讀寫方式開啟,將檔案指標指向檔案頭。'w' 寫入方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。'w+' 讀寫方式開啟,將檔案指標指向檔案頭並將檔案大小截為零。如果檔案不存在則嘗試建立之。'a' 寫入方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。'a+' 讀寫方式開啟,將檔案指標指向檔案末尾。如果檔案不存在則嘗試建立之。
關於 fseek 的一些情況.
http://php.net/manual/zh/function.fseek.php
Note:如果使用附加模試(a 或 a+),任何寫入檔案資料都會被附加上去,而檔案的位置將會被忽略,調用 fseek() 的結果尚未定義。
產生的效果是在指定的位置上寫入指定的字元, 沒有達到插入的效果.
要達到插入的效果,你需要先跳到指定位置,擷取它後面的所有內容, 然後再寫入你要寫入的內容,然後再寫入原來的內容.