无法将类加载到PHP脚本

时间:2015-07-23 06:48:24

标签: php

我需要PHP的HTML解析器并使用以下库 - https://github.com/paquettg/php-html-parser

我甚至无法运行简单的代码。我正在添加文件的方式看起来有些不对劲。以下是我的代码。

<?php
use PHPHtmlParser\Dom;

$url = 'http://google.com/';

// echo class_exists('Dom')?'yes':'no';

$dom = new Dom;
$dom->loadFromUrl($url);
$html = $dom->outerHtml;

echo $html;
?>

echo $html没有给我任何输出。因此,我检查了class_exists是否为no,结果为<html> <head> <title>Math Page</title> </head> <link href="main.css" rel="stylesheet" type="text/css"> <body> <button onclick="mathstuff()">Random number 1-10 (with math.floor </button> <p id="demo"></p> <button onclick="mathstuff2()">Random number 0-1 (with math.random</button> <p id="demo2"></p> <br> <p>Please input a number 1-10</p> <input id="numb" type="text"> <button type="button" onclick="onetoten()">Submit</button> <p id="displayonetoten"></p> <br> <button type="button" style="position: absolute; right: 0;" onclick="lives+=" id="uplife">Click to increase life by 1</button> <br> <p align="right"></p> <p align="right" id="livestext">LIVES</p> <button type="button" style="position: absolute; right: 0" onclick="lives-=" id="downlife">Click to decrease life by 1</button> <br> <p id="endingmessage"></p> <script language="javascript"> function mathstuff() { var x = Math.floor((Math.random() * 10) + 1); document.getElementById("demo").innerHTML = x; } function mathstuff2() { var x = Math.random(); document.getElementById("demo2").innerHTML = x; } function onetoten() { var x, text; //get the value of input with id "numb" x = document.getElementById("numb").value; //if x is not a number or is less than one or greater than 10 if (isNaN(x) || x < 1 || x > 10){ text="Not A Valid Input"; } else { text="A Valid Input" } document.getElementById("displayonetoten").innerHTML=x+" is "+text; } /* function gainloselife(){ increase/decrease lives function gainlife(){ lives += 1; } function loselife(){ lives -= 1; } */ var lives = 1; //lives testing function lifetest(){ var message; if (isNaN(lives) || lives < 0){ //endgame(); message="You are out of lives. Better luck next time. Press Restart to try again."; } else { message="You have at least a life left"; } document.getElementById("endingmessage").innerHTML=message; } lifetest(); document.getElementById(livestext).innerHTML=lives; } </script> </body> </html>

我做错了吗?

3 个答案:

答案 0 :(得分:1)

首先,class_exists仅适用于完全限定的类名(即包括命名空间):

class_exists('PHPHtmlParser\Dom')

其次,您需要包含一个自动加载器 1 ,它告诉PHP在哪里查找类文件。

如果您使用composer 安装了PHPHtmlParser,则可以使用composer 2 生成的那个:

require_once 'vendor/autoload.php';

如果您下载了PHPHtmlParser源,则必须构建自己的自动加载器或使用第三方PSR-0 3 兼容的自动加载器(因为这是标准的图书馆使用)。

简单示例:

spl_autoload_register(function($className)
    {
        $baseDir = 'PHPHtmlParser/src';
        $fileName = $baseDir . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
        if (stream_resolve_include_path($fileName)) {
            include $fileName;
            return true;
        }
        return false;
    }
);

(根据您提取文件的位置调整'PHPHtmlParser/src/

1)http://php.net/autoload
2)https://getcomposer.org/doc/01-basic-usage.md#autoloading
3)http://www.php-fig.org/psr/psr-0/

答案 1 :(得分:0)

如果您使用的是作曲家,必须包括vendor/autoload.php这样的

<?php

require_once __DIR__.'/vendor/autoload.php';

use PHPHtmlParser\Dom;

$url = 'http://google.com/';

// echo class_exists('Dom')?'yes':'no';

$dom = new Dom;
$dom->loadFromUrl($url);
$html = $dom->outerHtml;

echo $html;
?>

1)从https://getcomposer.org/composer.phar

下载作曲家

2)创建一个文件composer.json

{
    "require": {
        "paquettg/php-html-parser": "0.1.0"
    }
}

3)从终端php composer.phar install运行以安装依赖项

4)现在编辑脚本并添加require_once __DIR__.'/vendor/autoload.php';

5)学会​​正确使用作曲家https://getcomposer.org/doc/01-basic-usage.md

答案 2 :(得分:0)

我快速查看了Dom类的代码,loadFromUrl方法使用PHP核心方法file_get_contents来获取网站的内容。此方法要求php.ini选项allow_url_fopen设置为true。

如果是这种情况,问题可能在于课堂加载问题。