php标头,内部服务器错误

时间:2010-06-21 22:21:52

标签: php header

我自己编写了代码,每次都会出现内部服务器错误,我对此感到厌倦,请帮忙:

<?
    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文件

2 个答案:

答案 0 :(得分:2)

有一个空格......

?>
<?

请记住,在发送任何实际输出之前,必须通过普通HTML标记,文件中的空行或PHP来调用header()。使用include()或require(),函数或其他文件访问函数读取代码是一个非常常见的错误,并且在调用header()之前输出空格或空行。使用单个PHP / HTML文件时存在同样的问题。 1

答案 1 :(得分:1)

你是否有任何理由将file_get_contents()与url一起使用,指向脚本本身运行的同一服务器?这会导致第二个HTTP请求被触发,如果URL指向受密码保护的资源(或需要有效会话的资源),则file_get_contents()调用将无法处理该问题。

服务器的错误日志中是否有任何错误/无效标头是什么?您是否尝试将生成的标题字符串保存到文件中以确保它们正确生成?