4

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?

4

7 回答 7

4

当我手动创建一个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使用命令行工具或操作系统内置的取消归档程序手动取消归档文件。如果发生奇怪的事情,那么至少您知道问题出在包装代码上。

这绝对是一个错误,虽然我会报告它,但唯一的“解决方案”是不在您的本地机器上创建您的存档(我意识到这是一个糟糕的解决方案,但我们不会质疑为什么和所有这些)

于 2013-04-01T22:19:18.310 回答
1

这是自 1.7 以来一直存在的错误,因为在读取@././LongLink标头时 if 比较永远不会评估为 false。我在这个问题上回答了更多:

https://magento.stackexchange.com/questions/5585/long-file-names-and-magento-connect-extension-packager/45187#45187

于 2014-11-24T13:07:24.867 回答
0

我发现在将链接(modman)链接到magento文件夹的OS X上的Magento扩展打包时发生了这个问题。文件夹创建仅发生在 Windows 系统上。

这里也可能发生这种情况吗?

里科

于 2013-04-02T06:37:27.443 回答
0

我遇到了它,由于某种原因我的插件文件设置了后缀 .gz 所以它是 plugin.tgz.gz 将它解压缩到 plugin.tgz 解决了我的问题

于 2013-10-17T18:53:26.317 回答
0

我认为问题是因为 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';
}
于 2016-04-05T17:53:22.723 回答
0

真是讨厌的虫子。

对我来说,它重命名我的手动打包文件*.tar.gz*.tgz解决它。

至少它适用于我的 ubuntu 15.04

用magento 1.8测试

于 2016-10-11T21:02:40.030 回答
-1

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.

于 2015-08-03T10:27:28.663 回答