【发布时间】:2011-11-07 19:37:11
【问题描述】:
我正在尝试解决从 php 脚本下载“zip”文件时遇到的问题。似乎当我使用以下代码下载文件时,下载的文件在文件开头附加了一个额外的 0A09,导致 winzip 抛出损坏错误。
<?php
$pagePermissions = 7;
require_once ('util/check.php');
require_once ('util/file_manager.php');
$file_manager = new FileManager();
if ($_SERVER['REQUEST_METHOD'] == "GET") {
if (isset($_GET['q']) && $_GET['q'] == 'logout') {
//require_once ('util/users.php');
//$userdata = new Userdata();
$userdata -> kill_session();
header("Location: download.php");
exit ;
}
if (isset($_GET['q']) && $_GET['q'] == 'fetch') {
if (isset($_GET['name'])) {
@apache_setenv('no-gzip', 1);
header("Content-length: " . filesize('upload/' . $_GET['name']));
header('Content-type: application/zip');
//header("Content-Disposition: attachment; filename=\"{$_GET['name']}\" ");
header("Content-Disposition: attachment; filename={$_GET['name']}");
header('Content-Transfer-Encoding: binary');
readfile('upload/' . $_GET['name']);
exit();
}
}
}
?>
任何帮助将不胜感激,文件可以通过直接链接很好地下载,文件开头附加的 2 个字节仅通过此代码发生。 提前致谢
【问题讨论】:
-
我希望你没有在生产环境中使用它,它允许访问者在你的服务器中获取 PHP 可以访问的 any 文件。
-
与您的错误无关,但是...过滤您的输入!否则我可以在 URL 上提供 ?name=../../../etc/passwd。
-
readfile()将在末尾追加从文件读取的字节数。
标签: php