0

ファイルのダウンロードの問題でトラブルシューティングを行います。Chromeでは、ダウンロードは正常に機能します。Firefoxでは、ファイルの最後に次のようなHTML見出しが生成されます。

<!DOCTYPE .....>
...
...

他の一部のブラウザでは、ダウンロードされたファイルにも一部の行がありません。多くのブラウザで実際に正しく機能するようにスクリプトを作成するにはどうすればよいですか?これが私の現在のコードです:

private  function downloadRawFileHelper($file) {
    if (ini_get('zlib.output_compression')) {
        ini_set('zlib.output_compression', 'Off');
    }
    if (!file_exists($file)) {
        die('File Not Found');
    }

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private", false);
    header("Content-Type: text/php");
    header("Content-Disposition: attachment; filename=\"". basename($file). "\"");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    $this->view = 'fileedit';
}
4

5 に答える 5

1

exitアフターを入れてみてくださいreadfile、それはあなたの問題を解決すると思います

于 2012-06-29T16:58:21.107 に答える
0

コードに問題は見つかりません。exit()関数の追加またはdie()最後に試してみてください。次のように変更します。

private  function downloadRawFileHelper($file) {
    if (ini_get('zlib.output_compression')) {
        ini_set('zlib.output_compression', 'Off');
    }
    if (!file_exists($file)) {
        die('File Not Found');
    }

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private", false);
    header("Content-Type: text/php");
    header("Content-Disposition: attachment; filename=\"". basename($file). "\"");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    $this->view = 'fileedit';
    exit();
}

ファイルをブラウザに出力しています。したがって、その後、スクリプトの実行を停止する必要があります。

お役に立てれば :)

于 2012-06-29T16:57:23.007 に答える
0

flush()追加する前ob_end_clean();exit()readfile()。また、ファイルをクライアントに送信するために、純粋なPHPの代わりにX-SendFileを使用することを検討することもできます。これは、大きなファイルの場合に貴重なリソースを占有するためです。

于 2012-06-29T16:58:42.973 に答える
0

ここにあなたの問題があります:

header("Content-Disposition: attachment; filename=\"". basename($file). "\"");

たとえば、archivoに名前を付けてみてください。

header("Content-Disposition: attachment; filename=\"". basename($file). "filename.extension\"");
于 2012-06-29T17:10:42.727 に答える
0

HTTPの問題をデバッグする最良の方法は、送信されるHTTPメッセージを実際に検査することです。今日のブラウザはこれを本当に簡単にします。

サイトが公開されている場合は、redbot.orgを試して応答を確認できます。

最後に、「Content-Transfer-Encoding」やCache-Controlの「check」ディレクティブなど、未定義または役に立たない応答ヘッダーフィールドを大量に送信しています。

于 2012-06-30T06:43:30.590 に答える