Laravel 5.1 PHP DOMDocument() 类未找到。

25

我正在使用 PHP 内置的 DOMDocument() 类来进行简单的网络爬虫操作。然而,它可以在我的 4.2 网站上运行,但不能在我的 5.1(两者都在同一个 PHP 安装中)上运行。

以下是出现的错误:

Class 'App\Http\Controllers\III_Ranks\DOMDocument' not found

这是我的控制器:

<?php

namespace App\Http\Controllers\III_Ranks;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class RanksController extends Controller 
{
    public function getRanks()
    {
        $list1 = new DOMDocument();
        //etc...
    }
}

我觉得这是一个命名空间问题,但我不知道如何访问DOMDocument()

谢谢任何帮助。

5个回答

53

在 Laravel 5.1 中,您必须使用全局命名空间前缀 '\' 来为类名添加前缀。

因此,您的更新代码:

<?php

namespace App\Http\Controllers\III_Ranks;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

class RanksController extends Controller 
{
    public function getRanks()
    {
        $list1 = new \DOMDocument();
        //etc...
    }
}

它对我起作用了。我还需要在DOMXpath前面使用斜杠,例如 $xpath = new \DOMXpath($list1); - manian

10

为了解决错误:DOMDocument() class not found,我需要安装DOM扩展

如果你使用的是PHP 5:

你可以在Debian / Ubuntu上使用以下命令进行安装:

sudo apt-get install php5-dom

对于Centos / Fedora / Red Hat操作系统:

yum install php-xml
如果您正在使用PHP 7:

对于Ubuntu:

apt-get install php7.0-xml

对于CentOS / Fedora / Red Hat:

yum install php70w-xml

对于 Laravel 5.6,请使用以下命令:apt-get install php7.1-xml - glembo

5

Laravel 5.4 中测试通过

你可以使用关键字 use

在文件顶部定义类之前,你可以写 use DOMDocument; 代替 new \DOMDocument();

例如:

<?php

namespace App\Http\Controllers\III_Ranks;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
use Illuminate\Http\Response;

use DOMDocument;

class RanksController extends Controller {
...

这个 '...' 是什么?

1

我在使用 Laravel 5.6 的时候,在一个 Ubuntu 16.04 的服务器上遇到了这个问题,我通过安装 php7.1 版本的 xml 包来解决这个问题,但是在 php7.2 版本中这种方法不起作用,我不知道为什么。

1.- 确保你已经安装了 php 的 7.1 版本,我使用以下命令在 Ubuntu 中选择正确的 php 版本:

update-alternatives --set php /usr/bin/php7.1

注意:如果您没有安装php7.1版本,则需要在执行上述命令之前安装它,此时您可以使用以下命令:apt-get install php7.1

2.- 要安装XML包,我使用了以下命令:

apt-get install php7.1-xml

3.- 重新启动您的Apache服务器,在我的情况下,使用以下命令:

service apache2 restart

希望能有所帮助,这真是救了我的一天。


1
我曾在 Amazon Linux 2 (LAMP) 上使用 Laravel 框架时遇到同样的问题。
请按以下步骤解决问题:
 sudo systemctl stop httpd 
 sudo yum install  php-xml
 sudo systemctl start httpd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接