fread
fread — バイナリ・モードでファイルを読み込む
説明
string fread ( resource handle, int length )fread()はhandleが指す ファイルポインタから最高lengthバイト 読み込みます。読み込みは、最高 length バイト分 読み込まれたか、EOF(ファイルの終端)に達した場合、 パケットが利用可能になった場合(ネットワークストリームの場合)、 あるいは(ユーザ定義ストリームをオープンした後で) 8192 バイトが読み込まれた場合のうち、最初に発生した事象により中止されます。
読み込んだ文字列、またはエラー時には FALSE を返します。
<?php
// ファイルの中身を読んで文字列に格納する
$filename = "/usr/local/something.txt";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
| 警告 |
|
バイナリとテキストファイルの形式が異なるシステム(すなわち
Windows)では、fopen()の mode パラメータに 'b'
を指定してファイルをオープンする必要があります。
|
<?php
$filename = "c:\\files\\somepic.gif";
$handle = fopen($filename, "rb");
$contents = fread($handle, filesize($filename));
fclose($handle);
?>
| 警告 |
|
通常のローカルファイル以外のもの、例えば
リモートファイル や
popen()、fsockopen() が返す
ストリームを読み込んでいる場合には、
パケットが有効になった後に読み込みはストップします。
つまり以下の例のように分割されたデータを結合すべきであるということです。
|
<?php
// PHP 5 以降での例
$handle = fopen("http://www.example.com/", "rb");
$contents = stream_get_contents($handle);
fclose($handle);
?>
<?php
$handle = fopen("http://www.example.com/", "rb");
$contents = '';
while (!feof($handle)) {
$contents .= fread($handle, 8192);
}
fclose($handle);
?>
注意: 上の例では繰り返し毎に関数をコールしないのでオーバーヘッドが抑制できるため、 伝統的な while(!feof()) を使うアプローチよりも パフォーマンス的にベターです。
注意: 文字列にファイルを読み込みたいだけならば、file_get_contents() を使うほうが上記の例よりも効率的です。
fwrite()、fopen()、 fsockopen()、popen()、 fgets()、fgetss()、 fscanf()、file()、 fpassthru() も参照してください。
fread
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/12/05 16:43 UTC 版)
ナビゲーションに移動 検索に移動freadは、C言語の標準入出力ヘッダーファイル <stdio.h> で宣言されている関数である。 主に、バイナリ形式のファイル入力に使われる。
形式
ISO/IEC 9899:1999 では、以下のように定義されている[1]。
- 概要
-
#include <stdio.h> size_t fread(void * restrict ptr, size_t size, size_t nmemb, FILE * restrict stream);
- 説明
-
fread関数は、ptrが指す配列に、sizeで指定された大きさを持つ要素を最大nmemb個まで、streamが指すストリームから読み取る。各オブジェクトに対して、fgetc関数がsize回だけ呼び出され、読み取った順に、オブジェクトの上に正確に重なっているunsigned charの配列に結果が格納される。ストリームのファイル位置指示子[注釈 1](定義されている場合)は、正常に読み取られた文字数だけ進む。エラーが発生した場合、ストリームのファイル位置指示子の結果は不定である。要素の一部だけが読み取られた場合も、その値は不定である。 - 返却値
-
fread関数は、読み取りに成功した要素の数を返すが、読み取りエラーが発生した場合またはEOFに到達した場合に、nmembよりも小さくなる。sizeまたはnmembがゼロの場合、freadはゼロを返し、配列の内容とストリームの状態は変更されない。
テキストモード
streamがテキストモードで開かれていた場合、改行コードCR+LFは読み取りの際にLFで置換される処理系もある[2]。詳細は各処理系のリファレンスを参照のこと。
コード例
脚注
注釈
- ^ ISO/IEC 9899:1999 の position indicator は、JIS X 3010:2003 では「位置表示子」と訳されている。
出典
関連項目
外部リンク
fread(3)– JM Project Linux Library Functions マニュアル
固有名詞の分類
- fReadのページへのリンク