0

ファイルをダウンロードしましたが、代わりに無効なファイルが返されます。

これが私のdownload_content.php

<?php    
  $filename = $_GET["filename"]; 


    $buffer = file_get_contents($filename);

    /* Force download dialog... */
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    /* Don't allow caching... */
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    /* Set data type, size and filename */
    header("Content-Type: application/octet-stream");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . strlen($buffer));
    header("Content-Disposition: attachment; filename=$filename");

    /* Send our file... */
   echo $buffer; 
?> 

ファイルリンクのダウンロード:

<a href="download_content.php?filename=/gallery/downloads/poster/large/'.$r['file'].'"> Download</a>

$r['file']ダウンロードするファイル名が含まれています。

ファイルを含むフォルダの完全なパスは次のとおりです。

localhost/ja/gallery/downloads/poster/large/'.$r['file'].'

jaのルートフォルダですhtdocs

実際の問題が何であるかわかりませんが、誰かが私を助けてくれますか?

4

3 に答える 3

1

他の質問で述べたように、この方法はより良く見えます:

$filename = $_GET["filename"];
// Validate the filename (You so don't want people to be able to download
// EVERYTHING from your site...)

// For example let's say that you hold all your files in a "download" directory
// in your website root, with an .htaccess to deny direct download of files.
// Then:

$filename = './download' . ($basename = basename($filename));

if (!file_exists($filename))
{
    header('HTTP/1.0 404 Not Found');
    die();
}
// A check of filemtime and IMS/304 management would be good here
// Google 'If-Modified-Since', 'If-None-Match', 'ETag' with 'PHP'

// Be sure to disable buffer management if needed
while (ob_get_level()) {
   ob_end_clean();
}

Header('Content-Type: application/download');
Header("Content-Disposition: attachment; filename=\"{$basename}\"");
header('Content-Transfer-Encoding: binary'); // Not really needed
Header('Content-Length: ' . filesize($filename));
Header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

readfile($filename);

とはいえ、「無効なファイル」とはどういう意味ですか? 長さが悪い?長さゼロ?ファイル名が悪い?MIME タイプが間違っていませんか? ファイルの内容が間違っていませんか? 目の下にあるすべてのものを見て、その意味は明らかかもしれませんが、私たちの側からは、それは明らかではありません.

UPDATE : ファイルが見つからないようです。つまりfilename=、PHP スクリプトへのパラメーターが間違っています (存在しないファイルを参照しています)。上記のコードを変更して、ディレクトリにすべてのファイルを含め、そこからダウンロードできるようにしました。

于 2012-09-25T12:05:16.110 に答える
0

$filename 変数には、以下のようにパス全体が含まれます

 header("Content-Disposition: attachment; filename=$filename");

このようにしてください

$newfilename = explode("/",$filename);
$newfilename = $newfilename[count($newfilename)-1];

$fsize = filesize($filename);

Then pass new variable into header

header("Content-Disposition: attachment; filename=".$newfilename);
header("Content-length: $fsize");

//newline added as below
ob_clean();
flush();
readfile($filename);
于 2012-09-22T08:48:06.877 に答える