2017-06-25 2 views
1

PHPでクラス発見が必要なシステムがあるとします。 クラス検出の結果は、パフォーマンスのためにキャッシュされます。PHPのクラスハッシュ、コードの変更を検出するには?

コードが変更された場合、キャッシュをクリアまたは無効にしようとしました。開発者が何かをしたか、サードパーティのライブラリの新しいバージョンがダウンロードされたからです。

考えられるのは、クラスファイルのファイルハッシュを比較することです。しかし、これを例えばmd5(file_get_contents($file))はかなり費用がかかりますが、すべてのリクエスト/プロセスで実行したいことはありません。

コードが変更された場合に別の結果が得られる、PHPクラスのハッシュを取得する別の方法がありますか?

私は答えはノーだと思いますが、誰かがいつでも尋ねることができます。

+1

異なるハッシュの速度をチェックし、['hash_file'](http://php.net/manual/en/function.hash-file.php)を使うことができます。おそらく、変更の日付とサイズを比較することもできます。それはほとんどのFTPプログラムがそれをする方法です。 – h2ooooooo

+0

私はあなたの質問の文脈を見ていませんが、ReflectionClassを使って方法を見つけられないのではないかと思います。http://php.net/manual/en/class.reflectionclass.php PHPクラスの情報を取得するためのもの – kjones

+0

デプロイ時にキャッシュを無効にするのはどうですか? – localheinz

答えて

1

filemtime機能を使用すると、ファイルの内容を確認する代わりに、ファイルの最終変更を取得できます。 申し訳ありませんが、あなたがしたいものではない場合。

+0

'md5(file_get_contents()) 'よりもはるかに改善されているか、改善されている可能性があります。大部分の場合、おそらく十分です。 – donquixote

+0

もちろん、クラスが定義されているファイルを知る必要があることを意味します。 'ReflectionClass :: getFileName()'はこれを行うことができます。 – donquixote

+1

https://stackoverflow.com/questions/14697805/how-to-check-if-a-file-has-changedも参照してください。 – donquixote

関連する問題