既存のファイルの内容の間に書き込む方法は?PHP:既存のファイルの内容の間に書き込む方法は?
fseek()を使用して新しい位置を探して新しいコンテンツを書き込もうとしましたが、シーク位置の後に古いコンテンツを新しい文字列に置き換えました。
私の目標は、既存のファイルの5文字の後に新しい内容を入れることです。
旧コンテンツ:AAAAABBBBB
、所望のコンテンツ:NULLNULLNULLNULLNULLthis is new content
既存のファイルの内容の間に書き込む方法は?PHP:既存のファイルの内容の間に書き込む方法は?
fseek()を使用して新しい位置を探して新しいコンテンツを書き込もうとしましたが、シーク位置の後に古いコンテンツを新しい文字列に置き換えました。
私の目標は、既存のファイルの5文字の後に新しい内容を入れることです。
旧コンテンツ:AAAAABBBBB
、所望のコンテンツ:NULLNULLNULLNULLNULLthis is new content
に置き換えAAAAAnewcontentBBBBB
$file_handler = fopen('putty.log','w');
$new_content = 'this is new content';
fseek($file_handler,5);
echo ftell($file_handler); //5
fwrite($file_handler,$new_content);
古いコンテンツあなたはそのように行うことはできません。
だけです)(ftruncateのでコンテンツを切り捨てるとのfile_get_contentsを使用して変数に
Aそれほどきれいではない例
<?php
$file_handler = fopen('putty.log','rb+');
$new_content = 'this is new content';
fseek($file_handler,5);
$restOfContent = fread($file_handler,filesize('putty.log')-5);
ftruncate($file_handler,5);
fseek($file_handler,5);
echo ftell($file_handler); //5
fwrite($file_handler,$new_content);
fwrite($file_handler,$restOfContent);
fclose($file_handler)
少しコードください。 –
fread($ file_handler、filesize( 'putty.log') - 5);の後にrewind()する必要はありません私たちがもう一度やり直したらEOFを読んだ後、それは最初から始まりますか? –
私はファイルポインタがEOFに到達し、私が再びシークすると思います、それは0から始まります。 –
それはファイルが巨大であればメモリの負担です。 –
はい、しかし最速の開発;-)多分これはあなたがそれに費やしているあなたの時間に関連してより良い解決策になる可能性があるので、コードが生涯でどのように使用されるか考えてください – Svisstack
あなたは "R +" モード、一例では、ファイルを開くために覚えて、ファイルにデータを書き込むためのfseek()を使用している場合:
$ FP =のfopen($ファイル名、」 r + ");ファイルの途中に
ありがとう、私はwモードは常にゼロ長さ。 –
wは実際に既存のファイルを上書きします。 – ALH
書き込みは、それは伸ばし、あなたが書き込みを開始位置のコンテンツを上書きするというが、(テキストエディタでコンテンツを挿入するときのように)前方にコンテンツをプッシュすることはありません。あなたがする必要がどのような は次のとおりです。
例:
$original_file_name = '/tmp/putty.log';
$temp_file_name = '/tmp/putty.tmp';
$temp_file = fopen($temp_file_name, 'w');
$file_handler = fopen($original_file_name, 'r');
$old_data_size = 5;
fwrite($temp_file, fread($file_handler, $old_data_size));
$new_content = 'this is new content';
fwrite($temp_file, $new_content, strlen($new_content));
fwrite($temp_file, fread($file_handler, filesize($original_file_name) - $old_data_size));
fclose($file_handler);
fclose($temp_file);
unlink($original_file_name);
rename($temp_file_name, $original_file_name);
putty.logは(などのapache/lighttpdの)あなたのウェブサーバで使用するユーザプロセスのか、それは誰のためにアクセス可能だという読み取り/書き込み権限をしていることを確認します(推奨されません)。
ありがとうございました.. –
リンクhttp://stackoverflow.com/q/6472408/1338846 –