我写了一个实现下载功能的php文件,但是有问题,大家帮忙看下,我是新手,刚刚接触php,急着交作业,忘指点!<?php 
    $file_name = "audiQ5320x240.avi"; 
    $file_dir = "video/"; 
    if (!file_exists($file_dir . $file_name)) { //检查文件是否存在 
    echo "文件找不到"; 
    exit; 
    } else { 
    $file = fopen($file_dir . $file_name,"r"); // 打开文件 
    // 输入文件标签 
    header("content-type: application/avi"); 
    header("accept-ranges: bytes"); 
    header("accept-length: ".filesize($file_dir . $file_name)); 
    header("content-disposition: attachment; filename='$file_name'"); 
    // 输出文件内容 
    echo fread($file,filesize($file_dir . $file_name)); 
    fclose($file); 
    exit;} 
?>还有就是视频文件和php文件分别在站点下的video和php文件夹中,路径这样写对不对?如果有错,把正确的代码给我一份吧,谢谢了哈!

解决方案 »

  1.   


    <?php  
      $file_name = "audiQ5320x240.avi";  
      $file_dir = "../video/";  
      if (!file_exists($file_dir . $file_name)) { //检查文件是否存在  
      echo "文件找不到";  
      exit;  
      } else {  
      $file = fopen($file_dir . $file_name,"r"); // 打开文件  
      // 输入文件标签  
      header("content-type: application/avi");  
      header("accept-ranges: bytes");  
      header("accept-length: ".filesize($file_dir . $file_name));  
      header("content-disposition: attachment; filename='$file_name'");  
      // 输出文件内容  
      echo fread($file,filesize($file_dir . $file_name));  
      fclose($file);  
      exit;}  
    ?>试一下
      

  2.   

    也就是header那几行,对了,在html里面怎么调用这个php文件开始下载,可不可以直接用个表单,提交就行了!我的目的是,可以在页面直接用下载工具下载到本地。
      

  3.   

    给你一个哥在用的。function download($filePath='')
    {
        if(!file_exists($filePath)) {
            return false;
        }
        $x=explode('/',$filePath);
        $filename=end($x);
        forceDownload($filename,  file_get_contents($filePath));
    }
    function forceDownload($filename = '', $data = '')
    {
    if ($filename == '' OR $data == '')
    {
    return FALSE;
    } // Try to determine if the filename includes a file extension.
    // We need it in order to set the MIME type
    if (FALSE === strpos($filename, '.'))
    {
    return FALSE;
    } // Grab the file extension
    $x = explode('.', $filename);
    $extension = end($x);                $mimes=getFileType();
                    
    if ( ! isset($mimes[$extension]))
    {
    $mime = 'application/octet-stream';
    }
    else
    {
    $mime = (is_array($mimes[$extension])) ? $mimes[$extension][0] : $mimes[$extension];
    } // Generate the server headers
    if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
    {
    header('Content-Type: "'.$mime.'"');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header("Content-Transfer-Encoding: binary");
    header('Pragma: public');
    header("Content-Length: ".strlen($data));
    }
    else
    {
    header('Content-Type: "'.$mime.'"');
    header('Content-Disposition: attachment; filename="'.$filename.'"');
    header("Content-Transfer-Encoding: binary");
    header('Expires: 0');
    header('Pragma: no-cache');
    header("Content-Length: ".strlen($data));
    } exit($data);
    }        function getFileType()
            {
                $mimes = array( 'hqx' => 'application/mac-binhex40',
    'cpt' => 'application/mac-compactpro',
    'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'),
    'bin' => 'application/macbinary',
    'dms' => 'application/octet-stream',
    'lha' => 'application/octet-stream',
    'lzh' => 'application/octet-stream',
    'exe' => 'application/octet-stream',
    'class' => 'application/octet-stream',
    'psd' => 'application/x-photoshop',
    'so' => 'application/octet-stream',
    'sea' => 'application/octet-stream',
    'dll' => 'application/octet-stream',
    'oda' => 'application/oda',
    'pdf' => array('application/pdf', 'application/x-download'),
    'ai' => 'application/postscript',
    'eps' => 'application/postscript',
    'ps' => 'application/postscript',
    'smi' => 'application/smil',
    'smil' => 'application/smil',
    'mif' => 'application/vnd.mif',
    'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'),
    'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'),
    'wbxml' => 'application/wbxml',
    'wmlc' => 'application/wmlc',
    'dcr' => 'application/x-director',
    'dir' => 'application/x-director',
    'dxr' => 'application/x-director',
    'dvi' => 'application/x-dvi',
    'gtar' => 'application/x-gtar',
    'gz' => 'application/x-gzip',
    'php' => 'application/x-httpd-php',
    'php4' => 'application/x-httpd-php',
    'php3' => 'application/x-httpd-php',
    'phtml' => 'application/x-httpd-php',
    'phps' => 'application/x-httpd-php-source',
    'js' => 'application/x-javascript',
    'swf' => 'application/x-shockwave-flash',
    'sit' => 'application/x-stuffit',
    'tar' => 'application/x-tar',
    'tgz' => 'application/x-tar',
    'xhtml' => 'application/xhtml+xml',
    'xht' => 'application/xhtml+xml',
    'zip' =>  array('application/x-zip', 'application/zip', 'application/x-zip-compressed'),
    'mid' => 'audio/midi',
    'midi' => 'audio/midi',
    'mpga' => 'audio/mpeg',
    'mp2' => 'audio/mpeg',
    'mp3' => array('audio/mpeg', 'audio/mpg'),
    'aif' => 'audio/x-aiff',
    'aiff' => 'audio/x-aiff',
    'aifc' => 'audio/x-aiff',
    'ram' => 'audio/x-pn-realaudio',
    'rm' => 'audio/x-pn-realaudio',
    'rpm' => 'audio/x-pn-realaudio-plugin',
    'ra' => 'audio/x-realaudio',
    'rv' => 'video/vnd.rn-realvideo',
    'wav' => 'audio/x-wav',
    'bmp' => 'image/bmp',
    'gif' => 'image/gif',
    'jpeg' => array('image/jpeg', 'image/pjpeg'),
    'jpg' => array('image/jpeg', 'image/pjpeg'),
    'jpe' => array('image/jpeg', 'image/pjpeg'),
    'png' => array('image/png',  'image/x-png'),
    'tiff' => 'image/tiff',
    'tif' => 'image/tiff',
    'css' => 'text/css',
    'html' => 'text/html',
    'htm' => 'text/html',
    'shtml' => 'text/html',
    'txt' => 'text/plain',
    'text' => 'text/plain',
    'log' => array('text/plain', 'text/x-log'),
    'rtx' => 'text/richtext',
    'rtf' => 'text/rtf',
    'xml' => 'text/xml',
    'xsl' => 'text/xml',
    'mpeg' => 'video/mpeg',
    'mpg' => 'video/mpeg',
    'mpe' => 'video/mpeg',
    'qt' => 'video/quicktime',
    'mov' => 'video/quicktime',
    'avi' => 'video/x-msvideo',
    'movie' => 'video/x-sgi-movie',
    'doc' => 'application/msword',
    'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
    'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
    'word' => array('application/msword', 'application/octet-stream'),
    'xl' => 'application/excel',
    'eml' => 'message/rfc822'
    );
                return $mimes;
            }
      

  4.   

    目录权限不够的话用相对路径可能会出问题$basedir='video/';
    $filename=$_GET['file'];x_dl($basedir.$filename);function x_dl($path)
    {
    if(!is_file($path))die("<br>File Not Found!</br>");
    $fname = $path;  
    $fp = fopen($fname,'rb');  
    $fsize = filesize($fname);  
    header("Content-Disposition: attachment; filename=".basename($fname)); 
    header("Content-Length: $fsize"); 
    header("Content-Type: application/x-msdownload");
    readfile($fname); 
    }
    比如把上面的代码存成down.php
    那么在html中 调用 down.php?file=audiQ5320x240.avi