0

Helo PHP でダウンロード スクリプトを作成しようとしています... アップロード フォームは問題なく、ファイルはフォルダーに保存されます'upload/'が、ファイル名は DB に保存されますが、ダウンロードすると、見たいときに画像などのファイルがダウンロードされますimage ここでは赤い X だけです: image ....何かアイデアはありますか?

<?php
include 'connect.php';


    $query = "SELECT * FROM topics WHERE topic_id = '". $_GET['topic_id'] ."' ";

    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    $name = $row['topic_subject'];
    $file = $row['topic_file'];


    header('Pragma: public');
    header('Content-Description: File Transfer');
    header("Content-Disposition: attachment; filename='".$file . "'");
    header("Content-Type: ".mime_content_type($file)."");
    header("Content-Length: " . filesize($file) ." ");
    header('Content-Transfer-Encoding: binary');
    readfile('uploads/',$file);
    ob_clean();
    flush();

?>
4

3 に答える 3

0

ファイルのダウンロードに独自のスクリプトを使用しています。私が今まで見つけた最高のもの。ユーザー要件として変更することもできます。

function download_file($Source_File, $Download_Name, $file_extension = '') {
    /*
      $Source_File = path to a file to output
      $Download_Name = filename that the browser will see
      $file_extension = MIME type of the file (Optional)
     */
    if (!is_readable($Source_File))
        die('File not found or inaccessible!');

    $size = filesize($Source_File);
    $Download_Name = rawurldecode($Download_Name);

    /* Figure out the MIME type (if not specified) */
    $known_mime_types = array(
        "pdf" => "application/pdf",
        "csv" => "application/csv",
        "txt" => "text/plain",
        "html" => "text/html",
        "htm" => "text/html",
        "exe" => "application/octet-stream",
        "zip" => "application/zip",
        "doc" => "application/msword",
        "xls" => "application/vnd.ms-excel",
        "ppt" => "application/vnd.ms-powerpoint",
        "gif" => "image/gif",
        "png" => "image/png",
        "jpeg" => "image/jpg",
        "jpg" => "image/jpg",
        "php" => "text/plain"
    );

    if ($file_extension == '') {
        //  $file_extension = strtolower(substr(strrchr($Source_File,"."),1));
        if (array_key_exists($file_extension, $known_mime_types)) {
            $mime_type = $known_mime_types[$file_extension];
        } else {
            $mime_type = "application/force-download";
        };
    };

    @ob_end_clean(); //off output buffering to decrease Server usage
    // if IE, otherwise Content-Disposition ignored
    if (ini_get('zlib.output_compression'))
        ini_set('zlib.output_compression', 'Off');

    header('Content-Type: ' . $mime_type);
    header('Content-Disposition: attachment; filename="' . $Download_Name . '"');
    header("Content-Transfer-Encoding: binary");
    header('Accept-Ranges: bytes');

    header("Cache-control: private");
    header('Pragma: private');
    header('Expires: ' . gmdate('D, d M Y H:i:s \G\M\T', time() + 3600));

    // multipart-download and download resuming support
    if (isset($_SERVER['HTTP_RANGE'])) {
        list($a, $range) = explode("=", $_SERVER['HTTP_RANGE'], 2);
        list($range) = explode(",", $range, 2);
        list($range, $range_end) = explode("-", $range);
        $range = intval($range);
        if (!$range_end) {
            $range_end = $size - 1;
        } else {
            $range_end = intval($range_end);
        }

        $new_length = $range_end - $range + 1;
        header("HTTP/1.1 206 Partial Content");
        header("Content-Length: $new_length");
        header("Content-Range: bytes $range-$range_end/$size");
    } else {
        $new_length = $size;
        header("Content-Length: " . $size);
    }

    /* output the file itself */
    $chunksize = 1 * (1024 * 1024); //you may want to change this
    $bytes_send = 0;
    if ($Source_File = fopen($Source_File, 'r')) {
        if (isset($_SERVER['HTTP_RANGE']))
            fseek($Source_File, $range);

        while (!feof($Source_File) &&
        (!connection_aborted()) &&
        ($bytes_send < $new_length)
        ) {
            $buffer = fread($Source_File, $chunksize);
            print($buffer); //echo($buffer); // is also possible
            flush();
            $bytes_send += strlen($buffer);
        }
        fclose($Source_File);
    } else
        die('Error - can not open file.');
    die(1); // A response code other than 0 is a failure
}

これがお役に立てば幸いです。

乾杯!

ムダサル・アリ

于 2014-05-07T10:01:52.650 に答える