我自己编写了代码,每次都会出现内部服务器错误,我对此感到厌倦,请帮忙:
<?
function doer($str)
{
$d = base64_decode($str);
$a = explode('<||>',$d);
$v =array(
'path' => $a[0],
'size' => $a[1],
'type' =>$a[2]
);
return $v;
}
?>
<?
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT\n");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
$a= doer($_GET['d']);
$type = $a['type'];
header("Content-type: application/".$type.";\n"); //or yours?
header("Content-Transfer-Encoding: binary");
$filename = $a['path'];
$len = $a['size'];
header("Content-Length: $len;\n");
$outname="downfile.".$type;
header("Content-Disposition: attachment; filename=\"$outname\";\n\n");
$filename = 'http://example.com/tst/'.$a['path'];
readfile($filename);
?>
更多信息: 这个脚本应该放在(http://example.com/tst/)上,所有文件都存储在(http://example.com/tst/downloads)中。也没有.htaccess文件
答案 0 :(得分:2)
有一个空格......
?>
<?
请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。使用include()或require(),函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。 1
答案 1 :(得分:1)
你是否有任何理由将file_get_contents()与url一起使用,指向脚本本身运行的同一服务器?这会导致第二个HTTP请求被触发,如果URL指向受密码保护的资源(或需要有效会话的资源),则file_get_contents()
调用将无法处理该问题。
服务器的错误日志中是否有任何错误/无效标头是什么?您是否尝试将生成的标题字符串保存到文件中以确保它们正确生成?