手动安装Magento扩展将每个文件转换为文件夹

时间:2013-04-01 21:00:51

标签: magento

我对此完全感到困惑。我打包了一个扩展并手动将其安装在一个新的Magento实例上。 (包装和安装机都运行Magento 1.7)。安装顺利进行,除了我安装的每个文件都变成了一个以文件命名的文件夹。每个文件。有没有人碰到这个?它可能是Magento的错误吗?

7 个答案:

答案 0 :(得分:4)

当我手动创建用作Magento Connect存档的tar存档时,我常常看到此问题。不幸的是,我没有解决方案,但这是我对这个问题的理解。

虽然Magento Connect tgz软件包在技术上是gzip压缩tar档案 - 在标准* nix tar工具中创建和提取这些档案的代码。相反,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 :(得分:1)

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

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

答案 2 :(得分:0)

我发现将OS X上的Magento Extension打包到magento文件夹时会发生问题。仅在Windows系统上创建文件夹。

这可能发生在这里吗?

波多黎各

答案 3 :(得分:0)

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

答案 4 :(得分: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';
}

答案 5 :(得分:0)

非常讨厌的bug。

对我而言,我将手动打包的文件从*.tar.gz重命名为*.tgz解决了它。

至少它适用于我的ubuntu 15.04

使用magento 1.8进行测试

答案 6 :(得分:-1)

在向扩展程序添加内容时,您更有可能选择错误的路径。

对我来说,当我从layout / base(而不是layout / base / default)添加(不存在的)文件时,就会发生错误。