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

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。
