PHP强制下载,htaccess拒绝所有,无法读取文件头

PHP强制下载,htaccess拒绝所有,无法读取文件头,php,.htaccess,download,Php,.htaccess,Download,我想从受.htaccess正常访问保护的文件夹下载文件。 我找到了很多教程,但没有一本适合我 .htaccess <files "passportScan.jpg"> deny from all </files> 当我访问url/uploads/passportScan.jpg时,它是被禁止的。这是正确的。但当我调用我的php方法时,它会强制下载文件,但随后出现错误“无法读取文件头!Uknown文件格式或找不到文件!” 编辑 如果我删除htaccess,它可以正常工

我想从受.htaccess正常访问保护的文件夹下载文件。 我找到了很多教程,但没有一本适合我

.htaccess

<files "passportScan.jpg">
  deny from all
</files>
当我访问url/uploads/passportScan.jpg时,它是被禁止的。这是正确的。但当我调用我的php方法时,它会强制下载文件,但随后出现错误“无法读取文件头!Uknown文件格式或找不到文件!”

编辑 如果我删除htaccess,它可以正常工作

编辑2
链接是从电子邮件中调用的。

如果文件与php脚本位于同一服务器上,只需使用内部路径

如果文件与php脚本位于同一服务器上,只需使用内部路径

而不是使用您可以创建文件的完整http url,例如,
download.php
,然后使用
download.php?file=ID
下载该图像,而不是使用完整的http url,您可以创建文件,例如,
download.php
,然后使用
download.php?file=ID
下载该图像,向我们展示更多的代码(例如,所用变量的声明)。变量很好。因为如果我删除htaccess,它会工作得很好。但是该文件不受保护。
self::SERVER\u URL
?你使用的是完整的http url吗?那么就不可能访问受限制的文件了。是的,我改成了相对url,它就可以工作了。谢谢向我们展示更多的代码(如所用变量的声明)。变量很好。因为如果我删除htaccess,它会工作得很好。但是该文件不受保护。
self::SERVER\u URL
?你使用的是完整的http url吗?那么就不可能访问受限制的文件了。是的,我改成了相对url,它就可以工作了。谢谢@tttpapi请小心,您考虑的是URL,而这个答案谈论的是文件路径。不同之处在于readfile不尝试加载HTTP url,而是直接读取磁盘上的文件,这当然有效,因为它与HTTP无关apache@tttpapi请注意,您考虑的是URL,而这个答案讨论的是文件路径。区别在于readfile不尝试加载HTTP url,而是直接读取磁盘上的文件,这当然有效,因为它与apache无关
$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);