Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过joomla站点的virtuemart扩展下载zip时引发无效zip错误_Php_Joomla_Joomla Extensions_Virtuemart_Winrar - Fatal编程技术网

Php 通过joomla站点的virtuemart扩展下载zip时引发无效zip错误

Php 通过joomla站点的virtuemart扩展下载zip时引发无效zip错误,php,joomla,joomla-extensions,virtuemart,winrar,Php,Joomla,Joomla Extensions,Virtuemart,Winrar,如果任何有经验的人遇到过这种错误,比如当我的用户从我的joomla站点下载扩展zip文件并尝试在本地解压缩/打开时,他们会得到无效的zip,中心目录找不到类型的错误!。我使用winrar压缩,当他们不使用winrar,而是使用winzip等其他压缩程序时,问题就出现了。我不明白为什么会发生这种情况 仅供参考,我使用virtuemart和virtuemart免费下载插件进行虚拟机下载,因此扩展zip文件不在我网站的根文件夹下,而是像joomla vm2一样位于无法访问的上部文件夹中。在以下测试之后

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

仅供参考,我使用virtuemart和virtuemart免费下载插件进行虚拟机下载,因此扩展zip文件不在我网站的根文件夹下,而是像joomla vm2一样位于无法访问的上部文件夹中。在以下测试之后,我将问题缩小到joomla或virtuemart免费下载插件代码的问题它制作zip下载的方式

Test1-验证将zip放在站点根文件夹之外是否正确 为了解决这个问题,我将zip文件放在站点根文件夹中,并通过 在浏览器中键入地址,卸载本地winrar zip程序, 当我点击打开zip时,不会出现任何错误

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

因此,问题恰恰出在joomla间接或在code spiral免费下载插件中,该插件为我的joomla站点的virtuemart准备了扩展产品下载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'); 

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

首先,这只是一个旁注,您应该使用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)));

感谢您的回复,joomla版本是2.5.11。使用basename方法编写JText,删除文件名的引号不起作用。同样的错误仍然存在。由于我等待了很长时间,但没有得到专家的回复,所以在进行更多测试之前,我发现如果我添加ob_end_clean;ob_启动;然后,当我在本地测试时,它似乎起作用了。那么,我应该在头声明之后/之前添加任何内容吗?plz回复详细代码。