PHP脚本返回index.php而不是filename

时间:2012-09-03 22:17:58

标签: php

我制作了一个小的PHP脚本,应该允许访问者从我的服务器下载文件。它的工作方式是获取其中一个文件,获取基本名称并将标题和文件发送给客户端。

但是,在下载文件时,我有时会获得index.php,有时会获得proper_file_name.zip。

我真的不知道为什么它有时会起作用,为什么它有时不起作用。任何建议都将受到高度赞赏。

这是我的源代码的相关部分:

// Client requested custom byte range
if(isset($_SERVER['HTTP_RANGE'])) 
{ 
  $range = explode('-', substr($_SERVER['HTTP_RANGE'], 6));
  $seekStart = intval($range[0]);

  if ($range[1] > 0)
    $seekEnd = intval($range[1]);

  header('HTTP/1.1 206 Partial Content');
  header(sprintf('Content-Range: bytes %d-%d/%d', $seekStart, $seekEnd, $size_vfile));
}
else // Set headers for full file
  header('HTTP/1.1 200 OK');

// Get basename of filename
$filename = basename($filename);

// Send headers to client
header('Cache-Control: private');
header('Content-Type: application/octet-stream'); 
header("Content-Disposition: attachment; filename=\"$filename\"");
header('Content-Transfer-Encoding: binary');
header('Content-Description: File Transfer');
header('Content-Length: '.$file_size);
header('Accept-Ranges: bytes');

2 个答案:

答案 0 :(得分:1)

您正在使用基本名称,因此您依赖于您的工作目录。只需在下载文件之前更改到正确的目录

答案 1 :(得分:1)

您是否清理文件名?

并非所有浏览器都接受所有字符。请注意,“将是100%保证中断,但其他字符会产生问题。您可以通过注意未通过的文件名来找出哪些问题会给您带来问题。

您可能希望通过删除任何可能不喜欢的字符来清理$ filename。以下是关于它的一些解读:http://greenbytes.de/tech/tc2231/

使用str_replace()更改它不喜欢的字符。