10章ファイル処理
UnixとLinuxにまつわる最も一般的な設計哲学の1つに、「すべてはファイルである」というものがあります。これは、やり取りするリソースに関係なく、オペレーティングシステムがそれをディスク上のローカルファイルであるかのように扱うということです。これには、他のシステムへのリモートリクエストや、マシン上で実行されているプロセスの出力に対するハンドルも含まれます。
PHPはリクエスト、プロセス、リソースを同様に扱いますが、すべてをファイルとみなすのではなく、すべてをストリームリソースとみなします。「11章 ストリーム」ではストリームについて詳しく説明しますが、この章でストリームについて知っておくべき重要なポイントは、PHPがストリームをメモリ上でどのように扱うかということです。
ファイルにアクセスする際、PHPは必ずしもファイルのデータ全体をメモリに読み込むわけではありません。その代わりに、ディスク上のファイルの場所を参照するresourceをメモリ上に作成し、そのファイルからのバイトを選択的にバッファリングします。そして、PHPはそれらのバッファリングされたバイトをストリームとして直接アクセスしたり操作したりします。しかし、ストリームの基本的な知識は、この章のレシピでは必要ありません。
PHPのファイルメソッドであるfopen()やfile_get_contents()などは、すべてfile://ストリームラッパーを使用しています。しかし、PHPではすべてがストリームであるため、php://やhttp://を含む他のストリームプロトコルも同様に使用できることを覚えておいてください。
WindowsとUnix
PHPは、WindowsとUnix系OS(LinuxやmacOSなど)の両方で利用できます。ただし、WindowsとUnix系OSではファイルシステムが大きく異なることを理解することが重要です。Unixの「すべてはファイルである」はWindowsでは通用せず、一般的にファイル名とディレクトリ名の大文字と小文字は区別しませんが、一部のファイルシステムやツールでは区別します。 ...