ホームページ >バックエンド開発 >PHPチュートリアル >PHPのfile_exists関数が漢字を含むファイル名を検出できない問題の解決策
File_exists() は通常、ファイルまたはフォルダーが存在するかどうかを判断するために PHP で使用されます。ファイルまたはフォルダーが存在する場合は true を返し、存在しない場合は false を返します。今日、ファイルのダウンロード機能を実装したところ、Web ページが UTF8 エンコードを使用している場合、この機能は中国語を含むファイルが存在するかどうかを検出できず、常に false を返すことがわかりました。長い時間をかけて修正した結果、ファイル名をトランスコードするだけでは十分ではなく、フルパスがエンコードされていないことが原因であることがわかりました。
次のコードは中国語を含むファイルが存在するかどうかを検出できず、ファイルが存在するかどうかに関係なく false を返します:
<?php; $file='../uploads/file/中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 echo file_exists($file); //输出为false ?>
これは私が遭遇した状況です。 [パス + ファイル名] を一緒にトランスコードできます
<?php $file= '中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 $file=iconv('UTF-8','GB2312',$file); echo file_exists('../uploads/file/' . $file); //输出为false ?>
実際、ファイル パスとファイル名が UTF8 エンコードから GB2312 エンコードに変換されている限り、改善後は正確に判断できます:
<?php $file='../uploads/file/中文.pdf'; // 在../uploads/file/文件夹中 中文.pdf 实际存在 $file=iconv('UTF-8','GB2312',$file); echo file_exists($file); //输出为true ?>
上記は、PHP の file_exists 関数が漢字を含むファイル名を検出できない問題の解決策を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人の役に立てば幸いです。