1 テスト環境
CentOS 6 + PHP 5.3.3、2015 年 2 月 26 日、yum を通じて最新の状態に更新されました。
2 エラーの説明これを確認するのは非常に簡単です。次の内容で UTF-8 でエンコードされた php ソース ファイル test.php を作成します。
<?php$utf8Dir = '/var/www/html/小猫b.txt';echo basename($utf8Dir); echo '<br/>';$utf8Dir = '/var/www/html/a小猫b.txt';echo basename($utf8Dir); echo '<br/>';$utf8Dir = '/var/www/html/ab.txt';echo basename($utf8Dir); echo '<br/>';
b.txt
a小猫b .txt
ab.txt
名前がASCIIコードで始まらない場合、ASCII文字が見つかるまで中国語の文字は破棄されることがわかります。さらに、dirname() にはこの問題はありません。
.zip パッケージ内のファイルが純粋な ASCII でない場合、ファイル内の中国語の文字も破棄されます。ただし、ファイルは解凍されましたが、解凍されたファイル名が間違っていました。ファイル名がすべて漢字の場合、解凍後にすべてのファイル名が破棄され、. と拡張子の部分だけが残り、隠しファイルになります。
例: Kitten.txt は解凍後 .txt になります。
個人的には、問題のある関数basename()がこのメソッド内で呼び出されており、それがこの問題を引き起こしていると感じています。
2.3 奇妙なこと
特定の環境変数に依存しており、Web ページを通じてアクセスすると、これらの変数が正しく設定されず、問題が発生するのではないかと考えています。理由は何ですか?専門家の方、お答えください。 。 。 (私は一日落ち込んでいます。誰かがそれを説明してくれることを願っています)
3 対処方法問題が見つかっただけで問題の本当の原因が分からないため、直接解決することはできません。私の対策は、これら 2 つの関数を使用しないようにし、それらの関数が必要な場合は、同様の関数を自分で作成することです。