アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるファイルの文頭18バイトを削除し、その後の部分を保存するスクリプトを考えています。
========
例)
$fp = fopen("aaa.send","r+");
fread($fp, 18); //18バイト読み飛ばす
$data=stream_get_contents ($fp);//PHP5
ftruncate ($fp, 0);//中味の削除
rewind($fp); //ポインタのリセット(巻き戻し)
fwrite($fp, $data);
========
しかしながらサーバー環境のPHPが4.3.8のためstream_get_contents関数が使えません。
同じような意味を持つ関数をご存知の方がいらっしゃいましたらご教授願います。

A 回答 (2件)

3行目>$handle = fread($fp, 18);


4行目>ftruncate($handle, 0);
3行目の$handle は、fread で読み込んだ文字列ですね。
もともとのプログラム通り、ここは読み飛ばしなので、
freadで読み込んだものを代入する必要はありません。
4行目、fread で読み込んだ文字列をなぜかファイルハンドルとして使っています。
なので、"$handle がストリームじゃないよ!"と怒られます。
これも、元々のプログラム通り、$fp を使います。
    • good
    • 0
この回答へのお礼

超ありがとうございます。
これを機に見放さずに(笑)、またよろしくお願いいたします。

お礼日時:2006/08/06 21:23

http://jp2.php.net/manual/ja/function.fread.php
fread を使って繰り返し読み込めばイイと思います。
上記URLのサンプルを参照してみて下さい。

この回答への補足

アドバイスありがとうございます。
下記のように実行してみましたが、
上から4行目で「supplied argument is not a valid stream resource」のエラーが出ます。

=======
$filename = "./bbb/aaa.send";
$fp = fopen($filename, "rb+");
$handle = fread($fp, 18);
ftruncate($handle, 0);
$warn = '';
while (!feof($fp)) {
$warn .= fread($fp, 8192);
}
rewind($fp);
fwrite($fp, $warn);
fclose($fp);
=======

繰り返し方が間違ってますか?

補足日時:2006/08/06 14:16
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!