0

セキュリティ上の理由から、MYSQL にいくつかの画像を保存しています。画像をダウンロードすると、正しいファイル サイズと名前でファイルがダウンロードされますが、画像が表示されません。また、プロパティを見ると、画像には寸法がありません。私はケーキphpを使用しています。

header("Content-type: ".$file['UploadFile']['file_extension']);
header("Content-Disposition: attachment; filename=\"".$file['UploadFile']['file_name']."\"");
header("Content-length: ".$file['UploadFile']['file_size']);



echo $file['UploadFile']['file_content'];

次のコードで画像を保存します...

public function image_upload($fileName, $source, $extension, $file_size) {
     $this->loadModel('UploadFile');

     $content = addslashes(file_get_contents($source));

     $file_data = array('UploadFile' => array('title' => $fileName, 'file_content' => $content, 'file_name' => $fileName, 'file_extension' => $extension, 'file_size' => $file_size, 'file_type' => 'image-art'));

     $this->UploadFile->create();
     $this->UploadFile->save($file_data);

     $file_id = $this->UploadFile->id;
     return $file_id;
    }
4

1 に答える 1

4

それらはあなたがそのようなことをしているかもしれないいくつかの考えられる理由です

A. 間違ったコンテンツ タイプ ..Content-type: ".$file['UploadFile']['file_extension']コードに .. がありません

例えば。ファイル拡張子の構成は、コンテンツ タイプが「.jpg」のようなものです。image/jpeg

B.ファイルが適切に保存されていない可能性があり、そのような画像が破損する可能性があります

C. アップロード中にファイルが切り捨てられている必要がある

D. $content = addslashes(file_get_contents($source));..addslashesイメージstripslashesをロードしない

ダウンロードする前に画像が有効かどうかを確認するには、このコードを実行します

$image = ImageCreateFromString($file['UploadFile']['file_content']);
if(!$image)
     Something is Wrong 

getimagesize追加の検証を追加するために使用することもできます

編集 1

概念実証

$image = ImageCreateFromString ( $file ['UploadFile'] ['file_content'] );
if ($image) {

    /**
     * Check If Height and Width is grater than 1
     */
    if (ImageSX ( $image ) > 1 && ImageSY ( $image ) > 1) {
        $extention = strtolower ( $file ['UploadFile'] ['file_extension'] );
        switch ($extention) {
            case "png" :
                header ( 'Content-Type: image/png' ); // This is just example
                imagepng ( $image );
                break;

            case "gif" :
                header ( 'Content-Type: image/gif' ); // This is just example
                imagegif ( $image );
                break;

            case "jpg" :
            case "jpeg" :
                header ( 'Content-Type: image/jpg' ); // This is just example
                imagejpeg ( $image );
                break;

            default :
                die ( "Unsupported Image" );
                break;

        }

    } else {
        die ( "Fake Image" );
    }
} else {
    die ( "Invalid Image -- Contains Errors" );
}}
于 2012-04-10T21:19:33.883 に答える