3

これは私が理解できないものです。MySQLデータベースにファイルをアップロードするためのアップロード機能をWebページに正常に構築しました。サーバーにアクセスしてphpMyAdminで開くと、すべて正常に表示されます... txt、jpg、pdfなど。

しかし、これをまとめてダウンロードした後、奇妙な問題が発生します。すべてのテキストドキュメント(および拡張子を「txt」に変更した後の他のすべてのタイプのファイル)には、ページ自体のHTMLコードが含まれています、続いてオリジナルコンテンツ!

また、POST後は、ブラウザが異なれば表示も異なります。txtファイルをダウンロードしようとすると、IEはページ自体(ダウンロードなし)のECHOに正しいデータを表示し、その直前にエラーメッセージを表示します。

警告:ヘッダーには複数のヘッダーを含めることはできません。改行が検出されました。82行目のC:\ wamp \ www \ ace\dmain.phpにあります。

82行目は'header("Content-length...'です。

FirefoxもChromeも何も表示しません。彼らは私がそれをダウンロードすることを許可します。

コードは次のとおりです。

<?php
if (isset($_POST['downloadid'])) {
    $fileid = $_POST['downloadid'];
    try {
      $sql = "SELECT * FROM `datastore` WHERE `id` = '".$fileid."'";
        $results = $pdo->query($sql);echo $sql;
        while ($row = $results->fetch()) {
            $filename = $row['filename'];
            $mimetype = $row['mimetype'];
            $filedata = $row['filedata'];
            header("Content-length: strlen($filedata)");
            header("Content-type: $mimetype");
            header("Content-disposition: download; filename=$filename"); //disposition of download forces a download
            echo $filedata; 
            // die();
        } //of While
    } //try
    catch (PDOException $e) {
        $error = '<br>Database ERROR fetching requested file.';
        echo $error;
        die();    
    } //catch
} //isset
?>
4

3 に答える 3

6

これ:

header("Content-length: strlen($filedata)");

あなたが期待するものを生み出すつもりはありません。Wiresharkのヘッダー、またはリクエストを表示する別のメソッドを見ると、整数が含まれていないことがわかります。

代わりにこれを使用してください:

header("Content-length: ".strlen($filedata));
于 2013-02-21T18:33:28.090 に答える
0

その場で (つまり、残りの html とコードと同じページに) 修正することに苦労した後、専用の PHP ページに移動することにしました。その後、うまくいきました。

コメントありがとうございます!

于 2013-02-21T19:15:13.090 に答える
-1

ここに良い例と完全なソースがあります

于 2013-07-31T08:55:14.860 に答える