通过joomla网站的virtuemart扩展下载zip时,会引发无效的zip错误

时间:2014-02-25 22:05:48

标签: php joomla joomla-extensions virtuemart winrar

如果有经验的人遇到过这种错误,比如当我的用户从我的joomla网站下载扩展zip文件并尝试在本地提取/打开时,他们会收到无效的zip,中心目录找不到错误类型!.I压缩使用winrar和问题出现时,他们不使用winrar但其他拉链程序,如winzip.I不明白为什么会发生?

仅供参考我使用virtmart和螺旋免费下载插件为vm提供下载,因此扩展zip文件不在我网站的根文件夹下,但在joomla vm2的无法访问的上层文件夹中。经过以下测试我缩小了这个问题归结为joomla或virtuemart螺旋免费下载插件代码的问题,以及下载zip的方式。

  

Test1 - 验证是否将zip放在站点根文件夹之外   问题是,我将zip放在站点根文件夹中并下载了它   在浏览器中键入地址,卸载本地winrar zip程序,   当我通过点击打开zip时没有收到任何错误。

     

Test2 - 然后我创建了一个joomla模块并使用了相同的代码   螺旋免费下载插件和下载zip现在位于模块中   文件夹(不在根文件夹之外)但是当我从模块下载zip时,我明白了   与我所关注的相同的错误。

所以恰恰问题是在joomla中间接或在代码螺旋免费下载插件中为我的joomla网站的virtmart准备扩展产品下载zip。这些代码如下 -

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename="".JFile::getName($media->file_url).""");
if (!readfile($media->file_url)) $output = jText::_('VMCUSTOM_SPIRAL_FREEDOWNLOAD_NO_FILE_FOUND');

我改进了一点这些,但仍然拉链问题仍然存在 -

header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename="".JFile::getName($media->file_url).""");
header("Content-Length: ".filesize($media->file_url));
if (!readfile($media->file_url)) $output = jText::_('VMCUSTOM_SPIRAL_FREEDOWNLOAD_NO_FILE_FOUND'); 

这些代码有问题吗?

1 个答案:

答案 0 :(得分:0)

首先(这只是旁注),您应该使用JText而不是jText

尝试使用以下几个引号更改

header("Content-Disposition: attachment; filename=".JFile::getName($media->file_url));

JFile::getName也已弃用,因此根据您使用的Joomla版本,请尝试以下方法:

header("Content-Disposition: attachment; filename=".basename(strtolower($media->file_url)));