System_Folders は ホームディレクトリやデスクトップ、そして "マイ ドキュメント" などのさまざまなシステムフォルダの位置を取得するメソッドを提供します。 ほぼすべてのオペレーティングシステム上で使用することができます (Linux、Windows および Mac OS で動作します)。また、 OS 固有のプログラムを書くことも可能です。
このクラスのメソッドは、ディレクトリの位置を表す文字列を (最後のスラッシュも含めて) 返します。ディレクトリが定義されていなかったり 存在しない場合は NULL を返します。例えば、 "共有ドキュメント" フォルダは Windows にしか存在しません。 getSharedDocuments() を Mac や Linux で実行すると、NULL を返します。
このクラスは、環境変数を多用します。つまり、PHP を (Apache などの) サーバモジュールとして実行した場合は、 ユーザ情報が取得できずにメソッドがうまく動作しない可能性もあります。 コマンドライン (cli) のスクリプトとして実行すると、うまくいきます。 このクラスは、そのような使用法を想定しています。
表 63-1取得できるフォルダと、そのメソッド
フォルダ | 使用するメソッド | 備考 |
---|---|---|
All users ディレクトリ | getAllUsers() | Windows 限定 |
Application data | getAppData() | |
デスクトップ | getDesktop() | |
Documents / マイ ドキュメント | getDocuments() | |
ホームディレクトリ | getHome() | |
Programs フォルダ (プログラムがインストールされているところ) | getPrograms() | |
テンポラリフォルダ | getTemp() | |
共有ドキュメント | getSharedDocuments() | Windows 限定 |
Windows ディレクトリ | getWindows() | Windows 限定 |
環境変数を一通り調べてフォルダが存在するかどうか調べたり 一般的なフォルダの位置を調べたりといった一連の処理が、 getXXX() をコールするたびに行われます。 つまり、同じメソッドを何度もコールしたとすると そのたびに CPU に同程度の負荷がかかり、 アプリケーションの動作も遅くなってしまうでしょう。
また、別の問題としては、 (例えばユーザがあまり一般的でない設定を行っている場合などに) 何かのメソッドが失敗したり正しい値を返さなかったりすることが考えられます。
これらの問題を解決するのが System_Folders_Cached です。これは、キャッシュに対応した getXXX() メソッドを提供します。 つまり、そのメソッドを最初にコールしたときの結果がローカルに保存され、 その後に同じメソッドがコールされるたびに保存された結果を返します。 これにより、同じメソッドを続けて大量にコールする際の速度が上がります。
さらに、このクラスを使用すると、フォルダの場所を設定して その内容を ini ファイルに保存することができます。保存するには saveToFile() を、そしてそれを読み込むには loadFromFile() を使用します。 これを使用すると、フォルダの場所をカスタマイズし、 それを複数セッションで共用することができます。