我有一个使用 v6.1.7 的旧typo3 安装,现在我想导出侧树并将其导入到使用 v12.4.10 的新安装上。我刚刚将 filadmin 文件夹的所有内容移至新安装,然后导出侧树(我尝试了几乎所有设置组合),所有这些都运行良好,但是当尝试在新安装中导入文件时,我得到了
TypeError
TYPO3\CMS\Core\Utility\PathUtility::stripPathSitePrefix(): Argument #1 ($path) must be of type string, null given, called in /var/www/typo/vendor/typo3/cms-impexp/Classes/ImportExport.php on line 819
然后是大约 50 个代码片段。第一个位于 /var/www/typo/vendor/typo3/cms-core/Classes/Utility/PathUtility.php 第 428 行:
* Strip first part of a path, equal to the length of public web path including trailing slash
*
* @internal
*/
public static function stripPathSitePrefix(string $path): string
{
return substr($path, strlen(Environment::getPublicPath() . '/'));
}
(我现在不打算粘贴每一个。如果有人认为整个跟踪很重要,我可以提供 html 文件)
我还没有尝试很多东西,但我也不知道要尝试什么。在研究这个问题时,我没有找到任何与typo3类似错误的参考,而且我找到的唯一参考似乎都与不兼容的php版本有关(尽管与typo3无关),但在this页面的底部它说:一切都应该向后兼容,我几乎无法在 php v5.5 上运行typo3 v12...
唷,这确实是一个非常古老的垃圾场。基本上,TYPO3 Import/Export 是为了在同一版本中使用,它的目的不是提供可迁移的导入,特别是对于这些旧版本。
幸运的是,格式本身没有发生太大变化,但底层数据结构发生了变化。特别是在文件管理和文件参考内部。
目前“困扰你”的是存在无法正确读取的文件关系,并抛出该错误。
虽然可以通过绕过类型检查来修复特定错误,但在此过程中您可能会遇到更多问题。
如果您可以忽略并且不导出任何旧图像,并且最好在导入后重新分配图像,那将是最简单的。是的,这是工作。但它可能不会自动工作。您需要为此编写自己的 FAL 导入程序,或者实际上,您必须将现有实例从 v6 迁移到 7、8、9、10、11,然后是 12,而不是从 v6 跳转到 v12。这是唯一有保证的保留所有数据的方式。
话虽如此;如果您替换所有出现的内容,则可以修复手头的错误:
PathUtility::stripPathsitePrefix($somevariable)
与
PathUtility::stripPathsitePrefix((string)$somevariable ?? '')
确保至少有一个空字符串传递给该方法。
我针对 12.4.10 做了一个简单的补丁:
https://gist.github.com/garvinhicking/f95e94784a78db16100331e613ae72b0
这是针对旧版安装完成的,如果您使用 Composer,则需要调整补丁以使用“./vendor/cms-impexp/...”作为补丁基础,而不是“./typo3/sysext/impexp” ”。但它可能会给你一个线索。
希望这会有所帮助,但我想管理/抑制您的期望 - 这种网站迁移会带来很多痛苦。这就像尝试通过复制 .exe 文件将 Windows98 应用程序导入到 Windows 11 中一样。