fseek()でファイルポインタを移動したはずなのに、任意の行に書き込むことができません。
fseek()は実はファイルポインタを移動してるだけで、行とは無関係なのでしょうか。
function writefile( $filename, $body, $lineNum=null ){
$fp = fopen($filename, ’w’);
if(gettype($lineNum)==’integer’)
{
echo (int)fseek( $fp, $lineNum);//★
}
fwrite( $fp, $body );
fclose($fp);
}
★:成功はしているようです。
他の行にデータがあった場合でも任意の行にデータを書き込むにはどうしたらよいでしょう?
みんなの回答 3 件
fseekは行ではなく指定バイトの場所にポインタを移動する関数です。行とは関係ありません。また見たところwによるfopenをしているようですので、必ず内容が空つまり0バイトとなりfseekしてもポインタは移動しない気がしますが、やった事が無いのでそこは不明です。
データが既にあるファイルの任意の行にデータを書き込む際には、内容全体をfileで配列化し、好きな要素と要素の間に値を入れ込み、implodeなどで文字列化してfwriteで全て書き換えを行うなどの方法があります。あくまで一例です。
SplFileObjectなら行単位でポインタ動かせると思う
PHP5.1以上ならデフォルトで、5.3以上なら確実に入っているはずなので、こっちで操作するといいかも
PHP: SplFileObject::seek - Manual
http://www.php.net/manual/ja/splfileobject.seek.phpだめでした・・・
終端以降に行がない場合は移動できないのでしょうか・・・
$File = new SplFileObject($filename, ’a’);
if(gettype($line_pos)==’integer’)
{
$File->seek($line_pos);
}
$File->fwrite($body);
関連するトピックス