ホームページ >バックエンド開発 >PHPチュートリアル >PHP は画像をローカル コンピューターにダウンロードしますが、画像を開くことができません。

PHP は画像をローカル コンピューターにダウンロードしますが、画像を開くことができません。

WBOY
WBOYオリジナル
2016-06-13 13:45:511410ブラウズ

PHP は画像をローカルにダウンロードしますが、画像を開くことができません
環境: wampserver
データベース エンコーディング: unified utf8_general_ci
php ファイル エンコーディング: utf-8
この関数がデータベースに接続されていない場合、ダウンロードは正常に行われます
PHP を使用して統合画像をアップロードしてダウンロードしましたが、開くことができません
mysql にアップロードした後のファイルのエンコードの問題ではないかと思いますが、この点については触れたことがありません。解決方法についてアドバイスを求めたいです

PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->function dl_file($file){
     //这是下载文件的函数,$file是文件路径.
    //First, see if the file exists
    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

    //Gather relevent info about file
    $len = filesize($file);
    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));

    //This will set the Content-Type to the appropriate setting for the file
    switch( $file_extension ) {
          case "pdf": $ctype="application/pdf"; break;
      case "exe": $ctype="application/octet-stream"; break;
      case "zip": $ctype="application/zip"; break;
      case "doc": $ctype="application/msword"; break;
      case "xls": $ctype="application/vnd.ms-excel"; break;
      case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
      case "gif": $ctype="image/gif"; break;
      case "png": $ctype="image/png"; break;
      case "jpeg":
      case "jpg": $ctype="image/jpg"; break;
      case "mp3": $ctype="audio/mpeg"; break;
      case "wav": $ctype="audio/x-wav"; break;
      case "mpeg":
      case "mpg":
      case "mpe": $ctype="video/mpeg"; break;
      case "mov": $ctype="video/quicktime"; break;
      case "avi": $ctype="video/x-msvideo"; break;

      //The following are for extensions that shouldn't be downloaded (sensitive stuff, like php files)
      case "php":
      case "htm":
      case "html":
      case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

      default: $ctype="application/force-download";
    }

    //Begin writing headers
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-rev alidate, post-check=0, pre-check=0");
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer");
    
    //Use the switch-generated Content-Type
    header("Content-Type: $ctype");

    //Force the download
    $header="Content-Disposition: attachment; filename=".$filename.";";
    header($header);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".$len);
    @readfile($file);
    exit;
}



------解決策---- ----------------
1. 受信パラメータ $file の内容が正常であるかどうかを確認します
2. 参加しているすべてのファイルに BOM ヘッダーがあるかどうかを確認します。
------解決策----------------------
拡張機能を取得するには、pathinfo を使用することをお勧めします

------解決策---------
話し合う
画像パスを保存しました。BOMヘッダーを確認するにはどうすればよいですか?

------解決策----------------------
これはデータベースのエンコードの問題に違いありません。データベースが使用されていない場合は正常であると言われています。
データベースに再度アクセスするときは、SET Names utf-8;
すべての形式が統一されているため、画像ファイル名を確認することをお勧めします。サイズを確認して、画像が正常なファイルかどうかを確認し、画像が正常でないことを確認します。 バイナリはデータベースに保存されます
画像がサーバー上で正常であるかどうか、および送信プロセスが暗号化されているかどうか

------解決策---------まず、異常な画像と正常な画像を比較してください。違いを確認し、例外の原因を探すのが正しい解決策です...

異常な画像が最初または最後だけ破損している場合は、PHP コード自体に問題があります。異常なデータは切り詰められるか追加されます ;
画像のコンテンツ全体が破損している場合、それは基本的にエンコードの問題です

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