PHP スクリプトでの「ストリームを開くのに失敗しました: そのようなファイルまたはディレクトリはありません」エラーのデバッグ
PHP スクリプトを実行すると、次のようなエラーまたは警告が発生することがよくあります。
Failed to open stream : No such file or directory.
根本的な原因を効果的に特定するには、次のような包括的な方法があります。チェックリスト:
1.ファイル パスの精度を確認する
- ファイル パスのタイプミスを手動でチェックします。
- パスの変数を作成し、エコーし、コピーして、端末でのアクセシビリティを手動でチェックします。
2.相対パスと絶対パスの考慮事項を決定する
- 絶対パスは「/」で始まり、サーバーのルート ディレクトリを参照します。
- 相対パスは、現在の作業ディレクトリに基づいて計算されます。
- 移植性と堅牢性を確保するために、常に絶対ファイル パスを使用してください。
- 使用DIR マジック定数を使用するか、SITE_ROOT 定数を作成して絶対パスを動的に生成します。
3.インクルード パスを確認します
- ファイルは、特にライブラリやフレームワークの場合、インクルード パスを介してインクルードできます。
- get_include_path() を使用してインクルード パスを確認します。
- 必要に応じて追加してくださいset_include_path() を使用してフォルダーをパスに追加します。
4.ファイルへのサーバー アクセスの確認
- サーバー プロセスを実行しているユーザーにファイルへのアクセス権限があることを確認します。
- posix_getpwuid を使用してユーザーの詳細を確認し、「ls -l」を使用してファイルの権限を確認します。ターミナル内。
5. PHP 設定の検査
- open_basedir: 特定のディレクトリへのアクセスを制限します。 phpinfo() または ini_get("open_basedir") を使用して確認してください。
- safe_mode: 制限が課される可能性がある古い設定。まだ使用している場合は、サポートされている PHP バージョンにアップグレードします。
- allow_url_fopen およびallow_url_include: ローカルではなくネットワーク経由でのファイルへのアクセスに関連します。 ini_get() を使用して確認します。
コーナーケース
1.インクルード パスの依存関係によるライブラリの組み込み
- パスが既にインクルード パスに含まれていると仮定すると、ライブラリには他のファイルが含まれる場合があります。
- 必要なディレクトリをインクルード パスに追加します。
2. SELinux の影響
- SELinux が有効になっており、ファイル アクセス拒否の原因になっているかどうかを確認します。
- 原因を特定するために SELinux を一時的に無効にします。
- ファイルへの適切なアクセスを許可するように SELinux を設定します。 .
3. Symfony キャッシュの問題
- Symfony では、キャッシュの問題によりサーバーへのアップロードが失敗することがあります。
- 「cache:clear」コンソール コマンドを使用してキャッシュをクリアします。
4. ZIP ファイル内の非 ASCII 文字
- ZIP ファイルのファイル名に非 ASCII 文字があると、エラーが発生する可能性があります。
- ターゲット ファイルを作成する前に、utf8_decode() を使用してファイル名をエンコードしてください。
以上が「ストリームを開けませんでした: そのようなファイルまたはディレクトリはありません」という PHP エラーをトラブルシューティングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。