PHP强制下载,htaccess拒绝所有,无法读取文件头
Posted
技术标签:
【中文标题】PHP强制下载,htaccess拒绝所有,无法读取文件头【英文标题】:PHP force download, htaccess deny all, cant read file header 【发布时间】:2013-08-23 11:47:20 【问题描述】:我想从 .htaccess 保护正常访问的文件夹中下载文件。 我找到了很多教程,但没有一个适合我。
.htaccess
<files "passportScan.jpg">
deny from all
</files>
$file_name = 'passportScan.jpg';
$file_url = self::SERVER_URL . 'uploads/prom_conf/'.$user['uid'].'/' . $file_name;
header("Content-Description: File Transfer");
header('Content-Type: image/jpeg');
header("Content-disposition: attachment; filename=\"".$file_name."\"");
readfile($file_url);
当我访问 url /uploads/passportScan.jpg 时,它是被禁止的。那是正确的。但是当我调用我的 php 方法时,它会强制下载文件但随后出现错误“无法读取文件头!未知文件格式或找不到文件!”
编辑 如果我删除 htaccess,它就可以正常工作。
编辑 2 通过电子邮件调用链接。
【问题讨论】:
向我们展示更多代码(例如,使用的变量的声明)。 变量没问题。因为如果我删除 htaccess 它会完美运行。但随后该文件不受保护。self::SERVER_URL
?您使用的是完整的 http 网址吗?
那么就无法访问受限文件了。
是的,我更改为相对 url 并且它有效。谢谢!
【参考方案1】:
如果文件和你的 php 脚本在同一台服务器上,只需使用内部路径
【讨论】:
@tttpapi 小心,你在考虑 URL,而这个答案是关于文件路径的。不同的是readfile不会尝试加载一个HTTP url,而是直接读取磁盘上的文件,这当然可以,因为它与apache无关【参考方案2】:您可以创建文件,而不是使用完整的 http url,例如。 download.php
然后使用 download.php?file=ID
下载该图像。
【讨论】:
以上是关于PHP强制下载,htaccess拒绝所有,无法读取文件头的主要内容,如果未能解决你的问题,请参考以下文章
使用 .htaccess 拒绝访问目录中的所有 PHP 文件
使用 www 强制 HTTPS 并在 CodeIgniter 中删除 index.php .htaccess
权限被拒绝:/var/www/abc/.htaccess pcfg_openfile:无法检查 htaccess 文件,确保它是可读的?