【问题标题】:Joomla3.6 Fatal error: require_once(): Failed opening requiredJoomla3.6致命错误:require_once():需要打开失败
【发布时间】:2017-07-19 06:34:13
【问题描述】:

我们已经迁移了网络托管服务提供商,并迁移了我们的 joomla 网站和数据库。

尝试访问网站前端时,出现错误:

警告: require_once(JPATH_BASE/libraries/import.legacy.php):无法打开流:没有这样的文件或目录 /home/xxx/public_html/includes/framework.php 在第 15 行

致命错误: require_once(): 未能打开所需的“JPATH_BASE/libraries/import.legacy.php” (include_path='.:/usr/lib/php:/usr/local/lib/php') 在 /home/xxx/public_html/includes/framework.php 在第 15 行

我检查了 import.legacy.php 文件在指定的目录中,权限是 644。

JPATH_BASE 的输出是/home/xxx/public_html

我该如何解决这个错误?

【问题讨论】:

  • 看起来JPATH_BASE 没有定义并解释为字符串。不知道 Joomla,不知道该建议什么。不过可能有类似的问题,在搜索错误消息时,会尝试一下。

标签: php joomla require-once joomla3.5


【解决方案1】:

将您的 require_once 语句更改为

require_once(JPATH_BASE . '/libraries/import.legacy.php')

【讨论】:

  • 语句是 require_once (JPATH_LIBRARIES . '/import.legacy.php'); 当我按照建议更改语句时,它修复了错误,但现在给了我相同的另一个文件的错误。您是否建议全部更改?
  • 是的,我会修复当前错误。您可以使用 IDE 执行“在文件中搜索和替换”,这将找到所有出现的旧代码并使用新代码更新它。
  • JPATH_LIBRARIES 的输出是什么?似乎在一个地方有一个错误的定义。
【解决方案2】:

确保您的 PHP 版本高于 5.3,并且您对文件拥有正确的权限以包含在其他文件中。

【讨论】:

  • 这与问题有何关系?错误消息很明显,JPATH_BASE 没有解析为任何内容,只是用作包含路径的一部分。这与PHP版本无关。
  • import.legacy.php 和 framework.php 文件都来自核心 Joomla,您不应该在每个文件中查找和替换代码。如果您将来升级到新的 Joomla 版本,您所做的所有更改都将被新版本文件覆盖。您无法每次都查找和替换代码。JPATH_LIBRARIES 是 Joomla 中的预定义常量。即使我遇到了同样的问题并尝试更改文件和文件夹的权限,它也解决了我的问题。同样在其他一些服务器上,我们升级了 PHP 版本,它也对我有用。根本不需要接触核心文件。
【解决方案3】:
$ require_once(JPATH_LIBRARIES.'/joomla/document/html/renderer/head.php');

禁用或删除以上行并添加:

$header_contents = ‘’;
if(!class_exists(‘JDocumentRendererHead’)) {
    $head = JPATH_LIBRARIES . ‘/joomla/document/html/renderer/head.php’;
    if(file_exists($head)) {
        require_once($head);
    }
}

【讨论】:

    猜你喜欢
    • 2016-07-06
    • 2014-10-21
    • 2011-08-04
    • 2014-05-09
    • 1970-01-01
    • 2020-03-02
    相关资源
    最近更新 更多