問題を発見したので、今日はそれを共有したいと思います。プロセス全体を説明しましょう。
質問
会社には、smarty に基づいて書かれたフレームワークがあり、私は PHP のアップグレードを担当しています。保守スタッフが新しい環境をデプロイした後、テスターが頻繁にエラー (エラー: ファイルが見つかりません) を報告してくれました。コードを追跡したところ、smarty によって報告されたエラーであることが判明しました。
エラー: ここで報告されたファイルは存在しません。
思考プロセス:
1. 当初はプログラムにファイルが存在しないと思っていましたが、実際には存在していました。何が起こったのでしょうか?
2. その後、PHP カーネルに問題があるのではないかと考え、関連する PHP カーネル ファイルを調べましたが、問題は見つかりませんでした。その結果、私はプロジェクトマネージャーにすべてのプロセスを話しました。 ——問題は解決していないので、このままにしておきます。現時点ではアップグレードが遅れています。今日、この問題を再び発見しました。最初に感じたのは、PHP のバージョンがアップグレードされたかどうかでしたが、アップグレードされていないことがわかりました。 ——その後、ディレクトリ全体を 777 に設定しましたが、すべて問題ありませんでした (chmod 777 -R ディレクトリ)。 file_exists()メソッドの問題なのでしょうか。
そこで、関連するデバッグと実験を実行しました。
デバッグプロセス
デバッグコード:
に影響します。
1. テストに最大の権限を与える - 755
それでは、どのような種類のディレクトリ権限が file_exists() に影響を与えるのでしょうか?
いくつかの実験を行いました:
1. ファイルの上位ディレクトリに書き込み権限しかない場合、ファイルは存在しません。
2. ファイルの親ディレクトリは、読み取り権限しかない場合でもファイルが存在しないと報告します。
3. すべての上位ディレクトリに実行権限がある場合、報告されたファイルは存在し、すべてが正常です。結果は、file_exists() がファイルの存在を判定する際に、各ディレクトリに実行権限があるかどうかを再帰的に判定していることがわかります。
ファイル パスを相対パスに変更しても、同じ結果が得られます。
PHP マニュアルには、file_exists がディレクトリの実行権限の影響を受けるという記述はありません。今日は、この記事を通じて、同様にこの問題を抱えている開発者に情報を伝えたいと思います。これは警告として受け取ってください。
追加情報
皆さんのコメントはとても役に立ちます、ありがとうございます。皆さんのご意見を参考に改めてマニュアルを確認してみたところ、確かにディレクトリに実行権限がないとphp-fpmアプリケーションプロセスはこのディレクトリにアクセスしてファイルを検索することはできません、当然ファイルが存在しないものとみなされます。 (実際には実行可能ディレクトリは存在しないと考えられます)。
実行権限を中心にマニュアルの内容をみんなで一緒に検討できます。ここでは、読み取りおよび書き込み権限について詳しくは説明しません (一般に、これらは簡単に理解できます)。
明らかに、マニュアルにはディレクトリの実行権限について明確な指示があります。ディレクトリに対する実行権限とは、検索される権限を持っていることを意味します。
元のリンク: http://www.cnblogs.com/baochuan/archive/2012/05/06/2445822.html