php - 使用 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 );
?>
解决方案
目前,您只是通过 读取文件的内容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;
并只回显文件内容,否则它可能看起来文件已损坏。
推荐阅读
- javascript - 使用 settimeout 从下拉列表中的后端返回数据
- java - 无法使用 Dagger 2 提供活动上下文
- python - Python库安装libact:libact构建轮失败
- python - Python/Pygame:列表显然会覆盖自身
- kubernetes - 使用 kubectl 运行将部署对象创建到 AKS 服务会引发服务器报告 400 问题
- thingsboard - 如何获取 excel 文件或 CSV 以用于使用 thingsboard 的真实案例
- gerrit - Gerrit:此时身份验证不可用
- ethereum - 转换为 bytes32 后出现参数问题
- azure - 将 Azure Data Lake Storage 挂载到 Windows VM 文件系统
- jenkins - Jenkins IllegalArgumentException,同时添加一个新的奴隶