0

如果任何有经验的人曾经遇到过这种错误,例如当我的用户从我的 joomla 站点下载扩展 zip 文件并尝试在本地解压/打开时,他们会得到无效的 zip,找不到中央目录类型的错误!我使用 winrar 压缩和当他们不使用 winrar 而是使用其他 zip 程序(如 winzip)时会出现问题。我不明白为什么会发生这种情况?

仅供参考,我使用了 vm 的美德玛特和螺旋免费下载插件来提供下载,所以扩展 zip 文件不是位于我网站的根文件夹下,而是在一个无法访问的上层文件夹中,就像 joomla vm2 一样。经过以下测试,我缩小了问题的范围关于 joomla 或美德玛特螺旋免费下载插件代码的问题,它使 zip 下载的方式。

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

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

因此,问题恰恰出在 joomla 中,或者在代码螺旋免费下载插件中,该插件为我的 joomla 站点的 ddermart 准备了扩展产品下载 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'); 

那么这些代码有什么问题吗?

4

1 回答 1

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)));
于 2014-02-25T22:30:31.837 回答