PHP标头不会修改内容/类型

时间:2013-11-09 22:24:19

标签: php http

尝试返回文件时,我无法让php设置各种标题。

相关代码:

if (ob_get_contents()) ob_end_clean();
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header('Content-Type', 'application/pdf');
if (ob_get_contents()) ob_flush();
header('Content-Disposition', 'attachment; filename="' . basename($setfile) . '"');
header('Content-length', filesize($fullpath));

readfile($fullpath);

文件存在,一切都很好。但标题响应总是:

HTTP/1.1 200 OK
Date: Sat, 09 Nov 2013 22:19:22 GMT
Server: Apache/2.2.24 (Unix) DAV/2 PHP/5.5.0 mod_ssl/2.2.24 OpenSSL/0.9.8y
X-Powered-By: PHP/5.5.0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Content-Type: text/html

我可以修改状态代码,我已经返回了404等。但是内容类型总是text / html ...我有点不知所措。内容配置没有被设置。嗯......

提供文件需要有效的会话,所以请不要“只是重定向到文件”类型的答案。

感谢任何输入

2 个答案:

答案 0 :(得分:2)

您正在正确呼叫header()。你想要

header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($setfile) . '"');

请参阅http://php.net/manual/en/function.header.php

答案 1 :(得分:1)

怎么样:

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="YOUR_FILE.pdf"');

@rob是对的,你正在错误地调用标题。另外,看看你是否真的能够阅读该文件。