ホームページ >バックエンド開発 >PHPチュートリアル >PHPのfile_exists関数が漢字を含むファイル名を検出できない問題の解決策

PHPのfile_exists関数が漢字を含むファイル名を検出できない問題の解決策

WBOY
WBOYオリジナル
2016-07-29 08:55:471732ブラウズ

File_exists() は通常、ファイルまたはフォルダーが存在するかどうかを判断するために PHP で使用されます。ファイルまたはフォルダーが存在する場合は true を返し、存在しない場合は false を返します。今日、ファイルのダウンロード機能を実装したところ、Web ページが UTF8 エンコードを使用している場合、この機能は中国語を含むファイルが存在するかどうかを検出できず、常に false を返すことがわかりました。長い時間をかけて修正した結果、ファイル名をトランスコードするだけでは十分ではなく、フルパスがエンコードされていないことが原因であることがわかりました。

次のコードは中国語を含むファイルが存在するかどうかを検出できず、ファイルが存在するかどうかに関係なく false を返します:

 <?php;
   $file=&#39;../uploads/file/中文.pdf&#39;;    //  在../uploads/file/文件夹中  中文.pdf   实际存在

   echo file_exists($file);    //输出为false
 ?>

これは私が遭遇した状況です。 [パス + ファイル名] を一緒にトランスコードできます

<?php
   $file= &#39;中文.pdf&#39;;    //  在../uploads/file/文件夹中  中文.pdf   实际存在
   $file=iconv(&#39;UTF-8&#39;,&#39;GB2312&#39;,$file);
   echo file_exists(&#39;../uploads/file/&#39; . $file);    //输出为false
?>

実際、ファイル パスとファイル名が UTF8 エンコードから GB2312 エンコードに変換されている限り、改善後は正確に判断できます:

<?php
    $file=&#39;../uploads/file/中文.pdf&#39;;    //  在../uploads/file/文件夹中  中文.pdf   实际存在
    $file=iconv(&#39;UTF-8&#39;,&#39;GB2312&#39;,$file);
    echo file_exists($file); //输出为true
?>  


上記は、PHP の file_exists 関数が漢字を含むファイル名を検出できない問題の解決策を、関連する側面も含めて紹介しました。PHP チュートリアルに興味のある友人の役に立てば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。