【问题标题】:PHP header attach AVI-filePHP 标头附加 AVI 文件
【发布时间】:2011-10-07 03:28:39
【问题描述】:

我正在尝试制作一个 PHP 脚本来下载 AVI 文件。该文件在我的服务器上,我想将其发送给用户。我已经制作了以下脚本,但是当我运行它时,我只会得到一个 0 KB 的大 AVI 文件。

谁能告诉我我做错了什么?

$file_path = "downloads/test.avi";

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

if(file_exists($file_path)) {
    $file_extension = strtolower(substr(strrchr($file_path, "."), 1));

    // This will set the Content-Type to the appropriate setting for the file
    switch($file_extension) {
        case "pdf":
            $ctype = "application/pdf";
            break;
        case "exe":
            $ctype = "application/octet-stream";
            break;
        case "zip":
            $ctype = "application/zip";
            break;
        case "doc":
            $ctype = "application/msword";
            break;
        case "xls":
            $ctype = "application/vnd.ms-excel";
            break;
        case "ppt":
            $ctype = "application/vnd.ms-powerpoint";
            break;
        case "gif":
            $ctype = "image/gif";
            break;
        case "png":
            $ctype = "image/png";
            break;
        case "jpeg":
            $ctype = "image/jpg";
            break;
        case "jpg":
            $ctype = "image/jpg";
            break;
        case "mp3":
            $ctype = "audio/mpeg";
            break;
        case "wav":
            $ctype = "audio/x-wav";
            break;
        case "mpeg":
            $ctype = "video/mpeg";
            break;
        case "mpg":
            $ctype = "video/mpeg";
            break;
        case "mpe":
            $ctype = "video/mpeg";
            break;
        case "mov":
            $ctype = "video/quicktime";
            break;
        case "avi":
            $ctype = "video/x-msvideo";
            break;
        case "src":
            $ctype = "plain/text";
            break;
        default:
            $ctype = "application/force-download";
    }

    $filesize = filesize($file_path);

    // Set content type
    header("Content-type: " . $ctype);

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

    // Set size of file
    header("Content-Length: " . $filesize);

    readfile($file_path);

这是我从 Firefox 中的 LiveHTTPHeaders 得到的(出于某种原因,Content-Length 为零):

HTTP/1.1 200 OK
Date: Sun, 17 Jul 2011 14:34:24 GMT
Server: Apache/2.2.6 mod_auth_kerb/5.3 PHP/5.2.17 mod_fcgid/2.3.5
X-Powered-By: PHP/5.2.17
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Disposition: attachment; filename="test.avi"
Content-Length: 0
Connection: close
Content-Type: video/x-msvideo

您可能想亲自试用该网站http://snuzzer.dk/nas/client.php

【问题讨论】:

  • 请注意:使用带有键作为文件扩展名和值作为它们的 mime 类型的数组。将减少您的代码,并且可能更容易编辑
  • readfile() 返回读取的字节数,你能检查它是否真的读取了文件?可能是权限问题。

标签: php download content-type attachment avi


【解决方案1】:

readfile()之前添加这一行:

 header("Content-Length: " . filesize($file_path));

【讨论】:

  • 正如我刚刚写信给@alex,无论有没有Content-Length,结果都是一样的
  • 我刚刚尝试在 Firefox 中使用 LiveHTTPHeaders,但由于某种原因,当我在其中使用 readfile() 并且 LiveHTTPHeaders 说 Content-Length 为 0 时,Firefox 不会打开页面。请查看我的原始帖子。
【解决方案2】:

测试一下,我认为这会起作用!

header ( "Pragma: public" );
header ( "Expires: 0" );
header ( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
header ( "Content-Type: application/force-download" );
header ( "Content-Type: application/octet-stream" );
header ( "Content-Type: application/download" );
header ( "Content-Disposition: attachment; filename=\"" . $file_path . "\";" );
header ( "Content-Transfer-Encoding: binary " );
header ( "Content-type: " . $ctype);

$chunksize = 1 * (1024 * 1024); // how many bytes per chunk 
if ($size > $chunksize) { 
  $handle = fopen($file_path, 'rb'); 
  $buffer = ''; 
  while (!feof($handle)) { 
    $buffer = fread($handle, $chunksize); 
    echo $buffer; 
    ob_flush(); 
    flush(); 
  } 
  fclose($handle); 
  exit();

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多