<span><span><span class="hljs-meta"><?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' => '/var/www/html',
* // 'basename' => 'index.php',
* // 'extension' => 'php',
* // 'filename' => 'index'
* // ]
* ```
*
* ### 二、テールスラッシュがあるときの特別な状況
*
* 当パス以斜杠最後に,例えば:
*
* ```php
* pathinfo('/var/www/html/');
* ```
*
* 戻る结果のように下(PHP 8.x):
*
* ```php
* [
* 'dirname' => '/var/www',
* 'basename' => 'html',
* 'extension' => '',
* 'filename' => 'html'
* ]
* ```
*
* 現時点では,`pathinfo()` 2番目の最後のディレクトリが設定されます(`html`)として `basename` 戻る,予想される空のファイル名の代わりに。言い換えると,それは尾のスラッシュを無視します,最後から2番目のディレクトリを取得します“ファイル名”対処する。
*
* 更极端1つ点:
*
* ```php
* pathinfo('/');
* ```
*
* 戻る:
*
* ```php
* [
* 'dirname' => '/',
* 'basename' => '',
* ]
* ```
*
* これはつまり `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>