第5章 組み込み関数 / 第1回 模擬試験
PHPのファイルシステム関数に関する次の記述のうち、正しいものはどれか。
`fopen()`関数は、ファイルを開く際にモードを指定できない。
`fwrite()`関数は、ファイルにデータを書き込む。
正解
`fclose()`関数は、開いているファイルを自動的に閉じるため、明示的に呼び出す必要はない。
`file_get_contents()`関数は、ファイルの書き込みにのみ使用できる。
解説
`fwrite()`(`fputs()`のエイリアス)は、`fopen()`で開いたリソースに対して文字列を書き込み、書き込んだバイト数を返します。
他の選択肢が誤りである理由は次の通りです。
・`fopen()`の第2引数(モード)は必須で、`'r'`(読み込み)、`'w'`(書き込み・既存内容を破棄)、`'a'`(追記)などを指定します。省略はできません。
・`fclose()`を呼ばなくてもスクリプト終了時などにPHPが内部的に閉じますが、そのタイミングは保証されません。大量のファイルを開閉する処理で明示的に`fclose()`しないと、ファイルディスクリプタの枯渇やロック解放漏れにつながるため、「呼び出す必要がない」は実務上誤りとされます。
・`file_get_contents()`はファイルやURLの内容を文字列として読み込む関数です。書き込みには`file_put_contents()`を使います。
例:
```
$fp = fopen('log.txt', 'a');
fwrite($fp, "処理完了
");
fclose($fp);
```
(参照: 独習PHP 第4版 第5章 組み込み関数 5.5節 ファイルシステム関数 p.237〜251)