2

私はこれを理解できないようで、それが単純なことであることを知っています。非常に基本的なコンテンツ管理システムのバックエンドを構築しています。この特定の部分については、ファイル (クライアントの CV) をダウンロードできるようにする PHP リンクを作成しようとしています。

私の問題:

ファイルをダウンロードするためのリンクをクリックすると、ブラウザがファイルを保存するローカル ディレクトリを選択するように求めるプロンプトを表示する代わりに、ドキュメントのコンテンツの前後にファイルと一連の記号を表示するだけです (これはアプリケーションが解読するためのファイルの開始時および終了時のexifデータ)。

ブラウザに「名前を付けて保存...」ボックスをユーザーに表示させるにはどうすればよいですか?

<?php
require("connect.php");
$query = "SELECT * FROM kb_info LIMIT 1";

$result = mysql_query($query, $link);
while ($row = mysql_fetch_array($result)) {
    $file_extension = end(explode(".", $row["extension"]));

    if ($file_extension == doc) {

        header('Content-disposition: attachment; filename='.$row["extension"]);
        header('Content-type: application/doc');
        header ("Content-Length: ".filesize($row["extension"]));
        readfile($row["extension"]);
        exit;

    }
    if ($file_extension == docx) {

        header('Content-disposition: attachment; filename='.$row["extension"]);
        header('Content-type: application/docx');
        header ("Content-Length: ".filesize($row["extension"]));
        readfile($row["extension"]);
        exit;

    }
    if ($file_extension == pdf) {

        header('Content-disposition: attachment; filename='.$row["extension"]);
        header('Content-type: application/pdf');
        header ("Content-Length: ".filesize($row["extension"]));
        readfile($row["extension"]);
        exit;

    }
}    
?>  

どうもありがとう、

ジョシー

4

2 に答える 2

1

問題は、PHP ファイルのどこかに空白があり、ヘッダーが正しく送信されず、出力全体が表示されることが原因である可能性があると思います。

次の手順をお勧めします。

  1. 「connect.php」を確認し、ファイルの先頭/末尾にある空の行/スペースを探して削除します

  2. ファイルの末尾にある終了タグを除外するようにphpファイルを調整?>します-そうすれば、ファイルの末尾に空の行が表示されません

  3. 上記で不十分な場合は、Apache と php のエラー ログを確認するか、エラー ログを設定する必要があります。そのため、警告も表示されます。ヘッダーが正しく送信されていないか、その他のエラーがあるかどうかが通知されます。

于 2014-03-06T15:02:04.040 に答える
0

ダウンロードに使用するヘッダー:

        header("Pragma: public");
        header("Expires: 0");
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: public");
        header("Content-Description: File Transfer");
        header("Content-type: application/force-download");
        header("Content-Disposition: attachment; filename=".$file); 
        header("Content-Type: application/octet-stream");
        header("Content-Transfer-Encoding: binary");
        header("Content-Length: ".$bytes."");
于 2013-02-27T22:41:52.057 に答える