如果有经验的人遇到过这种错误,比如当我的用户从我的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');
这些代码有问题吗?
答案 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)));