php - 关于fwrite和fread操作同一个文件
怪我咯
怪我咯 2017-05-16 12:02:35
0
3
1760
$fp = fopen("./log", "a+"); fwrite($fp,"helloworld"); rewind($fp); var_dump( fread($fp, 10) ); fclose($fp);

执行这段代码,文件里被写入了两个helloworld,这是为什么?
还有就是这段话怎么理解:

Update mode permits reading and writing the same file; fflush or a
file-positioning function must be called between a read and a write or
vice versa. If the mode includes b after the initial letter, as in
"rb" or "w+b", that indicates a binary file. Filenames are limited to
FILENAME_MAX characters. At most FOPEN_MAX files may be open at once.

怪我咯
怪我咯

走同样的路,发现不同的人生

全員に返信 (3)
巴扎黑

fopen的第二个参数为模式, 有r,w,b,a等模式, 其中a表示append, 也就是附加的意思, 打开时不会清空文件(把EOF指向0), 而是把文件指针指向文件末尾. 所以这个时候如果直接写的话不会覆盖原有的内容. 通过rewind関数は、ファイル ポインターを開始点にポイントします。例:

を書き込むと、元のコンテンツが上書きされます。 リーリー
いいねを押す+0
    大家讲道理

    理由は 2 つあります。追加モードにあり、最後の helloworld をクリアしていないため、前回と現在の時刻の両方が存在します

    いいねを押す+0
      滿天的星座

      fopen("./log", "a+"); この文は、読み取りおよび書き込み可能なファイルを追加形式で開くことを意味し、ファイルが存在する場合、元の内容は保持され、データは末尾に追加されます。ファイルの。

      このとき、$fpファイルポインタは操作対象ファイルの末尾を指します
      fwrite($fp, '12345');

      このとき、fread($fp, 10)を直接出力すると空文字列になってしまいます。これは、長さを指定すると、$fpファイルポインタがファイルの末尾を指しているためです。間違いなく空になります。
      そして、ファイル ポインターの位置を巻き戻すために rewind($fp); を追加すると、$fp ポインターがファイルの先頭を指していることがわかり、fread($fp, 10) を出力すると結果が生成されます。

      しかし、ログを開くと、毎回ファイルの末尾に追加されます。

      いいねを押す+0
        最新のダウンロード
        詳細>
        ウェブエフェクト
        公式サイト
        サイト素材
        フロントエンドテンプレート
        私たちについて 免責事項 Sitemap
        PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!