swiftotter / image-import-path-fix
N/A
Requires
- php: ~7.0.0
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
- release-1
问题描述
根本问题是处理 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()
和相对路径。
我的解决方案是将目标文件设置为绝对。这似乎解决了问题,并且应该适用于任何环境。