Joomla3.6致命错误:require_once():需要打开失败

Posted

技术标签:

【中文标题】Joomla3.6致命错误:require_once():需要打开失败【英文标题】:Joomla3.6 Fatal error: require_once(): Failed opening required 【发布时间】: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,不知道该建议什么。不过可能有类似的问题,在搜索错误消息时,会尝试一下。 【参考方案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 版本,它也对我有用。根本不需要接触核心文件。 参考forum.joomla.org/viewtopic.php?t=837896 & ***.com/questions/18428789/joomla-php-error-message【参考方案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);
    

【讨论】:

以上是关于Joomla3.6致命错误:require_once():需要打开失败的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:require_once():

require_once 致命错误(再一次)

致命错误:require_once() 使用绝对路径

致命错误:require_once():需要打开失败

require_once() 中的 PHP 致命错误可以 n

致命错误:require_once() [function.require]