swiftotter/image-import-path-fix

N/A

安装: 426

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 1

开放问题: 0

类型:magento2-module

v1.2 2018-02-05 19:48 UTC

This package is not auto-updated.

Last update: 2024-09-21 01:34:50 UTC


README

##安装

  • composer require swiftotter/image-import-path-fix
  • php bin/magento module:enable SwiftOtter_ImageImportPathFix
  • php bin/magento setup:upgrade
  • php bin/magento setup:di:compile

##描述

从哪里开始呢?这个错误修复是针对 Magento 2.1.2(截至2017年1月9日的最新版本)。使用 Nginx 和 MySQL。文件夹结构略不同于常规,这可能解释了为什么这个错误之前没有被发现。Nginx 指向 pub/index.php

文件夹结构

  • 当前 > 链接到: /path/to/releases/release-2
  • 链接
    • 媒体
      • 导入
      • 目录
        • 产品
    • 变量
      • 日志
      • 报告
  • 发布
    • release-1
      • 应用
      • pub
        • index.php
        • 媒体 > 链接到: link/media
      • ...
      • 变量 > 链接到: link/var
    • release-2
      • 应用
      • pub
        • index.php
        • 媒体 > 链接到: link/media
      • ...
      • 变量 > 链接到: link/var

问题描述

根本问题是处理 pub/ 文件夹的不一致性。

Magento 的初始文件是 pub/index.php。该文件的 cwd/path/to/releases/release-2/pub/。然而,\Magento\Framework\Filesystem\Directory\ReadInterface->getAbsolutePath() 的一个特性是它会从路径结构中移除 /pub。这很好,直到尝试结合使用原始 PHP 函数(如 is_readable($relativePath))使用相对路径时。

有两个方面:来自 tmp 目录(文件来源)和 dest 目录(文件目标)都有其独特的挑战。

tmp 目录

tmp 目录来自“图像文件目录”。Magento 移除了末尾对 pub/ 的引用。由于 media 文件夹位于 pub 文件夹内,因此不清楚如何引用此文件夹。修补程序通过提供额外的查找路径来解决这个问题。

我不确定这也会造成问题,但 tmp 目录是相对的而不是绝对的。这给 dest 目录带来了问题,因此我也修复了 tmp

dest 目录

这里还有另一个不一致的问题。在 \Magento\CatalogImportExport\Model\Import\Product->_getUploader 中创建/设置文件夹时,路径最初是作为绝对路径检查的。然而,当它在 \Magento\Framework\File\Uploader->save() 中使用时,会调用 validateDestination()。在这个函数内部使用了 is_writable() 和相对路径。

我的解决方案是将目标文件设置为绝对。这似乎解决了问题,并且应该适用于任何环境。