fgetc()関数はテキストファイルから1文字ずつデータを読み込みます。この関数の引数には、fopen()関数の返り値であるファイルハンドルの変数を指定します。そして、読み込まれた1文字分のデータを返します。
この関数を実行するたびに、ファイルポインタ(現在の読み込み位置)が1文字分進みます。すべてのデータを読み切って終端(EOF)に達したかどうかは、feof()関数によって調べることができます。feof()関数の返り値がTrueかFalseかを検出して、全データを読み込んだかを判断できます。
fgetc()関数は1バイトずつデータを取り出すので、全角文字が含まれていると途中で分断して読み込まれます。このため、「print fgetc($fp)」のようにした場合には文字化けします。この例はすべての文字を$htmlに再結合してから出力しているので、この問題は回避されます。
<?php header("Content-type: text/html; charset=utf-8"); if(!$fp = @fopen("data/FIFARank.txt", "r")){ echo "ファイルを開けませんでした"; exit(); } while(!feof($fp)){ $html .= fgetc($fp); } fclose($fp); $html mb_convert_encoding($html, "utf-8", "shift_jis"); echo $html; ?>