PHP 是一种服务器端脚本语言,与客户端的 HTML 文件不同。因此,PHP 的文件在在服务器端运行,其路径信息并不会暴露给客户端。
但是,在使用 PHP 下载文件时,通常需要通过 URL 来访问文件,这时候 URL 的路径信息就会暴露给客户端,为了解决这个问题,可以使用以下方法:
1.将文件存储在非 Web 访问目录下,例如 `/home/username/download/file.zip`,这样客户端就无法直接访问文件路径。需要通过 PHP 读取并输出文件内容。
2.使用 PHP 的 `readfile()` 函数将文件内容输出至客户端,并设定响应头使客户端浏览器将其解释为一个附件下载。
具体代码实现如下:
<?php
$file = '/home/username/download/file.zip';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
?>
在上面的代码中,`$file` 是需要下载的文件的完整路径。首先判断文件是否存在,然后设定响应头,通过 `readfile()` 函数输出文件内容至客户端,最后退出程序。
为了更好的安全性,需要对 `$file` 变量内容进行验证和过滤,例如只允许下载指定类型的文件或者只允许下载已经授权的用户等。
注:代码参考自 [PHP.net](http://php.net/manual/zh/function.readfile.php)。
正文完