首页 > 解决方案 > 使用 PHP 和 file_get_contents 下载文件

问题描述

我想从存储库下载文件,我有下面的代码,找到了文件,但没有任何反应......

我没有错误。

我暂时使用测试值,但稍后我将使用 GET。

目标是直接下载文件:

$dossier = "../private/cartes_identites/test/";
$filename = "test.png";

$file = $dossier.$filename;

//First, see if the file exists
if (!is_file($file)) { die("<b>404 File not found!</b>"); }
else echo "file exists";

$ext = strrchr( $filename, "." );

switch( $ext ) {
    case ".zip": $type = "application/zip"; break;
    case ".txt": $type = "text/plain"; break;
    case ".pdf": $type = "application/pdf"; break;
    case('gif') : $type = "image/gif";break;
      case('pnggif') : $type = "image/png";break;
         case('jpg') : $type = "image/jpeg";break;


    default: $type = "application/octet-stream"; break;


}

echo $ext;

// Constitution de l'header suivant le type
header("Content-Description: File Transfer");
header("Content-Type: $type\n");
header("Content-Transfer-Encoding: binary");
header("Content-disposition: attachment; filename=$filename");
header("Content-Length: ".filesize( $dossier.$filename ) );


// Lecture et Affichage
file_get_contents( $dossier.$filename );
?>

这是存储库(测试)

标签: phpfile-get-contents

解决方案


目前,您只是通过 读取文件的内容file_get_contents,但从未将内容交付给客户端。

像这样将文件的内容回显给用户

// ...
header("Content-Length: ".filesize( $dossier.$filename ) );


// Lecture et Affichage
echo file_get_contents( $dossier.$filename );
?>

或者您也可以使用readfile 函数而不是file_get_contents这样:

// ...
header("Content-Length: ".filesize( $dossier.$filename ) );


// Lecture et Affichage
readfile( $dossier.$filename );
?>

此外,您应该摆脱echo $ext;并只回显文件内容,否则它可能看起来文件已损坏。


推荐阅读