現在の位置: ホーム> 最新記事一覧> PHP PathINFO関数がパス文字列が最後にスラッシュされたときに結果を返すための特別な状況と処理の提案は何ですか?

PHP PathINFO関数がパス文字列が最後にスラッシュされたときに結果を返すための特別な状況と処理の提案は何ですか?

gitbox 2025-09-19
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// このドキュメントは約です pathinfo テールスラッシュを使用した機能処理パスの研究と分析</span></span><span>

</span><span><span class="hljs-comment">//--------------------------------------------------</span></span><span>

<span class="hljs-comment">/**
 * パス文字列に最後にスラッシュがあるとき,PHP pathinfo 関数が結果を返すための特別な状況と取り扱いの提案は何ですか?
 *
 * 使用中 PHP ファイルパスに関連する機能を開発する場合,`pathinfo()` これは非常に1つ般的に使用される組み込み機能です。パス文字列を解析し、パス内のディレクトリ名を返すことができます、基本ファイル名、ファイル拡張機能およびその他の情報。しかし,パス文字列が削られたとき(/ または \)最後に,この関数の動作には、あまり直感的ではない特別な状況があります。。
 *
 * この記事では、例に基づいてこれらの状況を詳細に分析します,対応する処理の提案を提供します,開発者がパス情報をより着実に処理するのを支援します。
 *
 * ### 1つ、pathinfo() 関数の基本的な使用
 *
 * `pathinfo()` 用于戻る1つ个数组,パスの次のコンポーネントが含まれています:
 *
 * - dirname:目次
 * - basename:ファイル名パーツ(拡張機能付き)
 * - extension:拡大
 * - filename:不拡張機能付き的ファイル名
 *
 * 例:
 * ```php
 * pathinfo('/var/www/html/index.php');
 * // 戻る:
 * // [
 * //   'dirname' =&gt; '/var/www/html',
 * //   'basename' =&gt; 'index.php',
 * //   'extension' =&gt; 'php',
 * //   'filename' =&gt; 'index'
 * // ]
 * ```
 *
 * ### 二、テールスラッシュがあるときの特別な状況
 *
 * 当パス以斜杠最後に,例えば:
 *
 * ```php
 * pathinfo('/var/www/html/');
 * ```
 *
 * 戻る结果のように下(PHP 8.x):
 *
 * ```php
 * [
 *   'dirname' =&gt; '/var/www',
 *   'basename' =&gt; 'html',
 *   'extension' =&gt; '',
 *   'filename' =&gt; 'html'
 * ]
 * ```
 *
 * 現時点では,`pathinfo()` 2番目の最後のディレクトリが設定されます(`html`)として `basename` 戻る,予想される空のファイル名の代わりに。言い換えると,それは尾のスラッシュを無視します,最後から2番目のディレクトリを取得します“ファイル名”対処する。
 *
 * 更极端1つ点:
 *
 * ```php
 * pathinfo('/');
 * ```
 *
 * 戻る:
 *
 * ```php
 * [
 *   'dirname' =&gt; '/',
 *   'basename' =&gt; '',
 * ]
 * ```
 *
 * これはつまり `pathinfo()` 実際には区別できません“パス”まだ“書類”,文字列形式に基づいて解析するだけです。
 *
 * ### 三つ、行動の説明
 *
 * `pathinfo()` 并不检查パス是否实际存在または是書類,それは文字列の純粋な解析です。終わりがスラッシュの場合,它会将倒数第二级目录视为ファイル名対処する,因为它假设最后1つ个非空段是“basename”。
 *
 * 所以对于以斜杠结尾的パス,それは実際にスラッシュを無視します,把前1つ部分当成有效パス。
 *
 * ### 4、対処する建议
 *
 * **1. 使用中 pathinfo() 前统1つ清理パス尾部的斜杠:**
 *
 * のように果你明确只対処する書類パス,而不是目录パス,建议统1つ使用中 `pathinfo()` 之前清除パス末尾的斜杠:
 *
 * ```php
 * $cleanPath = rtrim($path, '/\\');
 * $info = pathinfo($cleanPath);
 * ```
 *
 * これにより保証されます `basename` そして `filename` 的含义始终指向真正的書類部分。
 *
 * **2. 对目录パス的特殊判断:**
 *
 * のように果パス本身是目录,そして、スラッシュで終わります,しかし、あなたはまだディレクトリを知りたいです“名前”,利用可能 `basename(rtrim($path, '/\\'))`,頼らない `pathinfo()` 結果。
 *
 * ```php
 * $dirname = basename(rtrim($path, '/\\'));
 * ```
 *
 * **3. 小心根パス(/)的対処する:**
 *
 * 对于根パス `/`,`pathinfo()` 戻る的 `basename` 空の文字列です。これはそうかもしれません UI 展示または逻辑判断时引发问题,需要单独做判断対処する:
 *
 * ```php
 * if ($path === '/') {
 *     $basename = '/';
 * } else {
 *     $basename = basename(rtrim($path, '/\\'));
 * }
 * ```
 *
 * ### 五、要約します
 *
 * `pathinfo()` 是1つ个方便的函数,但在対処する带尾部斜杠的パス时,它的行为可能与你的预期不1つ致。理解它的工作原理并配合パス清理函数(のように `rtrim()`)使用,可以避免很多パス解析中的陷阱。
 *
 * 最安全的方式是先确定パス的语义(是目录まだ書類),然后有针对性地対処するパス格式,避免错误地解读目录名为ファイル名または出现空 `basename` 問題。
 */</span>
</span></span>