Joomla会覆盖标题

时间:2012-08-17 15:22:45

标签: php joomla http-headers

我正在向移动电话提供下载服务(运行Android,即),Android似乎只接受specific headers。 现在这就是我在Joomla尝试做的事情。

    $doc =& JFactory::getDocument();
$doc->setMimeEncoding('application/octet-stream');

这可行,但由于某些原因Joomla将charset = utf-8添加到我的标题中,因此下载不起作用。我如何摆脱这个charset(无论如何对二进制文件来说都是无用的)?

3 个答案:

答案 0 :(得分:2)

PHP 5.3引入了header_remove,可能会在你的情况下使用(虽然我对Joomla没什么经验)。

答案 1 :(得分:1)

对于Joomla 2.5(未经测试的更低版本或更高版本) Joomla附加了自己的头文件,这就是你需要使用JResponse :: clearHeaders();

的原因。
$filename = basename($file);
ob_end_clean();
JResponse::clearHeaders();
JResponse::setHeader('Content-Type', 'application/octet-stream', true);
JResponse::setHeader('Content-Disposition', 'attachment; filename='.$filename.';', true);
JResponse::sendHeaders();
echo JFile::read($file);

答案 2 :(得分:0)

记录: 它不能在Joomla的MVC结构中完成,因为总是附加一个字符集(和其他标题),所以我最终导入并从一个单独的php文件初始化Joomla的框架,如下所示:

define( '_JEXEC', 1 );

// real path depending on the type of server
// change the number of returns/level needed in your path relative to the position of your script in your directory
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../../..' ));
define( 'JPATH_COMPONENT', realpath(dirname(__FILE__).'/..' ));
define( 'DS', DIRECTORY_SEPARATOR );

// loading framework of Joomla!
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

/* 
... some other joomla stuff ...
*/
header('Content-Disposition: attachment; filename="example.zip"'));
header('Content-Type: application/octet-stream');
readfile($lfile);

所以,基本上,加载框架,使用数据库或其他任何东西,并自己调用头函数。希望,这有助于其他人。