PHPでfwirte($f, $str, strlen($str));
しても$str
が全部書き込まれず、fwrite($f, $str);
にすると全部書き込まれる、という現象に会ったことがある。strlen($str)
が実際の文字列の(バイト列としての)サイズとは異なる値を返しているからではないかと思っていた。
fwrite()
はもともとバイト列(バイナリ可能)で、strlen()
はもともと文字列(何らかの符号で書かれたテキスト)なので意味は違うけど、なんか釈然としない。PHPごときのstrlen()
なんて文字コードをちゃんと見てるわけでもないし、バグるほどの処理があるとは思えない。
もしかしたら、fwrite()
の戻り値をちゃんとチェックしなきゃ最後まで書かれたかどうかは判断できないから、その処理を書いてないせいかもしれないな。長さのパラメータがない場合は途中でやめずに勝手に全部書いてくれるのかも。