I am completely baffled by this. I packaged up an extension and manually installed it on a fresh Magento instance. (Both the packaging and installing machine were running Magento 1.7). The installation went smoothly, except every single file I installed was turned into a folder, named after the file. Every single file. Has anyone run into this? Could it be a Magento bug?
7 回答
当我手动创建一个tar
存档以用作 Magento Connect 存档时,我曾经看到过这个问题。不幸的是,我没有解决方案,但这是我对这个问题的理解。
虽然 Magento Connecttgz
软件包在技术上是 gzip 压缩的 tar 档案——创建和提取这些档案的代码不是标准的 *nixtar
工具。相反,Magento 为 Magento Connect 实现了自己的打包和解包 tar 代码
downloader/lib/Mage/Archive/Tar.php
不幸的是,这种打包和解包代码并没有经过操作系统或使用标准 *nix 工具创建的 tar 归档的可靠测试。我对这段代码的问题是在我的 Mac OS 系统上创建的档案tar
无法在运行 linux 的系统上使用 Magento Connect 的代码正确解包。
难以追踪、难以报告、难以重现意味着难以修复。
这些目录是在 Magento Connect 解压缩tgz
文件时创建的。我 99% 确定您的目录是由这段代码创建的
#File: downloader/lib/Mage/Archive/Tar.php
if (in_array($header['type'], array("0",chr(0), ''))) {
if(!file_exists($dirname)) {
$mkdirResult = @mkdir($dirname, 0777, true);
if (false === $mkdirResult) {
throw new Mage_Exception('Failed to create directory ' . $dirname);
}
}
$this->_extractAndWriteFile($header, $currentFile);
$list[] = $currentFile;
} elseif ($header['type'] == '5') {
if(!file_exists($dirname)) {
$mkdirResult = @mkdir($currentFile, $header['mode'], true);
if (false === $mkdirResult) {
throw new Mage_Exception('Failed to create directory ' . $currentFile);
}
}
$list[] = $currentFile . DS;
这是 Magento 解压缩档案并创建文件夹的两个位置。出于某种原因,在您的两个系统上存在某种情况,其中数据被打包或解包,错误地进出存档文件。尝试tgz
使用命令行工具或操作系统内置的取消归档程序手动取消归档文件。如果发生奇怪的事情,那么至少您知道问题出在包装代码上。
这绝对是一个错误,虽然我会报告它,但唯一的“解决方案”是不在您的本地机器上创建您的存档(我意识到这是一个糟糕的解决方案,但我们不会质疑为什么和所有这些)
这是自 1.7 以来一直存在的错误,因为在读取@././LongLink
标头时 if 比较永远不会评估为 false。我在这个问题上回答了更多:
我发现在将链接(modman)链接到magento文件夹的OS X上的Magento扩展打包时发生了这个问题。文件夹创建仅发生在 Windows 系统上。
这里也可能发生这种情况吗?
里科
我遇到了它,由于某种原因我的插件文件设置了后缀 .gz 所以它是 plugin.tgz.gz 将它解压缩到 plugin.tgz 解决了我的问题
我认为问题是因为 PHP 版本。我在 Magento 1.8.1 上安装扩展时遇到了同样的问题,但我通过更改 /downloader/lib/Mage/Archive/Tar.php 文件中的 _getFormatParseHeader() 函数找到了解决方法。
最初的功能是:
protected static final function _getFormatParseHeader()
{
return 'a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2version/'
. 'a32uname/a32gname/a8devmajor/a8devminor/a155prefix/a12closer';
}
我将其更改为:
protected static final function _getFormatParseHeader()
{
if (version_compare(phpversion(), '5.5.0', '<') === true) {
return 'a100name/a8mode/a8uid/a8gid/a12size/a12mtime/a8checksum/a1type/a100symlink/a6magic/a2version/'
. 'a32uname/a32gname/a8devmajor/a8devminor/a155prefix/a12closer';
}
return 'Z100name/Z8mode/Z8uid/Z8gid/Z12size/Z12mtime/Z8checksum/Z1type/Z100symlink/Z6magic/Z2version/'
. 'Z32uname/Z32gname/Z8devmajor/Z8devminor/Z155prefix/Z12closer';
}
真是讨厌的虫子。
对我来说,它重命名我的手动打包文件*.tar.gz
来*.tgz
解决它。
至少它适用于我的 ubuntu 15.04
用magento 1.8测试
it's more likely that you choose the wrong path when adding content to your extension.
For me the bug happened when I added (non existing) files from layout/base instead from layout/base/default.