0

データベースから画像を返す関数があります。画像はデータベースで 100% 正常ですが、ブラウザに送信されると改行 (リターン) 文字が最初に挿入され、ファイルが破損します。

ファイルを返すコードは次のとおりです。

//if(ob_get_length() > 0)
            //{
                //ob_clean();
            //}

コメントを解除すると、ブラウザがファイルをダウンロードすることさえできないため、上記をコメントアウトしました。

function header_file($data, $file_data)
            {
                $last_modified = gmdate('D, d M Y H:i:s', $file_data['unix_last_modified_time'])." GMT";

                // update the accessed record
                $GLOBALS['db']->query("update file_uploads set file_upload_accessed_count = file_upload_accessed_count + 1 where file_upload_id = '".$GLOBALS['id']."'");

                // if browser question if it's up to date
                if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']))
                {
                    // parse header
                    $if_modified_since = preg_replace('/;.*$/', '', $_SERVER['HTTP_IF_MODIFIED_SINCE']);

                    if ($if_modified_since == $last_modified)
                    {
                        // the browser's cache is still up to date
                        header("HTTP/1.0 304 Not Modified");
                        header("Cache-Control: max-age=86400, must-revalidate");
                        exit;
                    }
                }

                header("Cache-Control: max-age=86400, must-revalidate");
                header("Last-Modified: ".$last_modified);
                header("Content-Type: ".$file_data['file_upload_type']);

                if($file_data['file_upload_type'] == 'application/x-shockwave-flash')
                    header("Content-Disposition: inline; filename=\"".str_replace(' ','_',$file_data['file_upload_name'])."\"");
                else
                    header("Content-Disposition: attachment; filename=\"".str_replace(' ','_',$file_data['file_upload_name'])."\"");

                // send data to output
                echo $data;
                exit;
            }

関連する質問: データベースから返された PHP ヘッダー ファイルからの破損したファイル? https://stackoverflow.com/questions/19768650/zend-caching-of-images-gives-problems-once-the-site-goes-down-for-a-while

4

1 に答える 1

0

私は次のことをします。PHP ファイルのどこかに余分なスペースがあります。
見つけるのが少し難しいかもしれないので、いくつか入れてみましょう

echo "here" 

コードで、この改行がエコーの前後にあるかどうかを確認します。どこにあるかがわかるまで、he echo ステートメントを上下に移動し続けます (インクルード ファイルに含まれている可能性があるため、追跡する必要があります)。

---------------ファイルの開始

于 2013-11-06T07:20:36.267 に答える