我正在向移动电话提供下载服务(运行Android,即),Android似乎只接受specific headers。 现在这就是我在Joomla尝试做的事情。
$doc =& JFactory::getDocument();
$doc->setMimeEncoding('application/octet-stream');
这可行,但由于某些原因Joomla将charset = utf-8添加到我的标题中,因此下载不起作用。我如何摆脱这个charset(无论如何对二进制文件来说都是无用的)?
答案 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);
所以,基本上,加载框架,使用数据库或其他任何东西,并自己调用头函数。希望,这有助于其他人。