【发布时间】:2020-05-29 08:49:59
【问题描述】:
我正在尝试下载受保护的 zip、rar 文件。在尝试了数百种不同的标题和组合之后,我迷路了。我无法下载图片、pdf,但 zip 和 rar 已损坏。
问题出在哪里?
代码
$url = url_for('/staff/photos/error.php');
$error = $url;
//$filepath = 'C:\wamp\www\photo_gallery\public\files\3d_models';
$url2 = PROJECT_PATH.DS.'public'.DS.'files'.DS.'3d_models';
$filepath = $url2;
$filename = null;
if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) {
$filename = $_GET['file'];
} else {
header("Location: $error");
exit;
}
if ($filename) {
$abs_path = $filepath . DIRECTORY_SEPARATOR . $filename;
if (file_exists($abs_path) && is_readable($abs_path)) {
header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
header("Content-Type: application/zip");
header("Content-Type: application/rar");
header("Content-Transfer-Encoding: Binary");
header('Content-length: ' . filesize($abs_path));
header('Content-disposition: attachment; filename=' . $filename);
readfile($abs_path);
} else {
header("Location: $error");
}
}
【问题讨论】:
-
header("Content-Type: application/zip"); header("Content-Type: application/rar");...您不能同时发送 both 这些标头。根据文件类型选择一个。不确定这是否是您的全部问题,但不太可能有帮助。 -
@ADyson 我把(application/rar) rar去掉了,还是一样
-
好吧,这是一个开始。完整性检查:您是否验证了相关文件一开始就绝对有效?也就是说,您可以直接从原始位置成功打开它们而不涉及您的 PHP 脚本吗?
-
第二次健全性检查,您是否确认
$abs_path指向服务器磁盘上的有效位置,并且网络服务器的帐户有权读取该位置? -
@ADyson rest api mantykora.cleoni.com:8080/photo_gallery/public/staff/rest_api/…