PHP 8.3.4 Released!

実行時設定

php.ini の設定により動作が変化します。

ファイルシステムおよびストリームの設定オプション
名前 デフォルト 変更可能 変更履歴
phar.readonly "1" INI_ALL  
phar.require_hash "1" INI_ALL  
phar.cache_list "" INI_SYSTEM  

以下に設定ディレクティブに関する 簡単な説明を示します。

phar.readonly bool

このオプションを使用すると、phar ストリームや Phar オブジェクトによる Phar アーカイブの作成や変更ができなくなります。 この設定は、実運用環境では常に有効にしておくべきです。 phar 拡張モジュールのこの機能は、 サーバー上に他のセキュリティ上の脆弱性があった場合に php ベースのウィルスを直接作成されてしまうことにつながります。

注意:

この設定は、php.ini でしか解除できません。 phar.readonly を php.ini で無効にした場合は、 ユーザーがスクリプト内で phar.readonly の有効/無効を切りかえることができます。 phar.readonly を php.ini で有効にした場合は、 スクリプト内でこれを "再度有効にする" ことはできますが、無効にすることはできません。

phar.require_hash bool

このオプションを使用すると、署名つき (現在サポートしているのは MD5、SHA1、SHA256、SHA512、および OpenSSL) の Phar アーカイブのみをオープンするようになります。 署名を含まない Phar アーカイブの処理はできません。

注意:

この設定は、セキュリティ上の理由により php.ini でしか解除できません。 phar.require_hash を php.ini で無効にした場合は、 ユーザーがスクリプト内で phar.require_hash の有効/無効を切りかえることができます。 phar.require_hash を php.ini で有効にした場合は、 スクリプト内でこれを "再度有効にする" ことはできますが、無効にすることはできません。

この設定は、 PharData クラスで通常の tar ファイルを読み込む際には影響を及ぼしません。

警告

phar.require_hash は、それ自体はセキュリティ上の機能を提供しません。 壊れた Pharアーカイブを誤って実行することへの備えでしかありません。 Phar を改ざんできる人は、シグネチャを後で簡単に修正できてしまうからです。

phar.cache_list string

phar アーカイブをウェブサーバーの起動時に事前にパースさせるようにします。 これによりパフォーマンスが向上し、 ディスク上に配置した伝統的なファイルに近い速度で実行することができます。

例1 phar.cache_list の使用例

php.ini (windows):
phar.cache_list =C:\path\to\phar1.phar;C:\path\to\phar2.phar
php.ini (unix):
phar.cache_list =/path/to/phar1.phar:/path/to/phar2.phar

add a note

User Contributed Notes 1 note

up
-13
milagre at gmail dot com
12 years ago
During experimentation with phar.cache_list using php 5.2.13 and pecl/phar 2.0.0, I found some interesting details.

It seems that if any phar in the list of phars to cache fails to be read properly during module initialization, none of the phars in the list will be cached, including ones that had already been successfully read before the failure.

Additionally, phars without metadata will always fail to be pre-cached properly due to what seems to be a bug in the phar module that re-reads the length of the metadata from the next byte if the metadata length is 0. Adding any metadata resolved the problem for me.

So make sure you are pre-caching phars with metadata, and make sure you don't put a bad path/file in the list.
To Top