0
<html>

<head>
<?PHP
include('simple_html_dom.php');
?>
<title>

</title>
</head>

<body>
<form name ="form1" method ="POST" ACTION="parser.php">
<input type="text" name="parser1" style="height:200px; width:200pt;"></br></br>
<input type="submit" value="Submit"></br></br>
</form>

<?php

$html_str = $_POST['parser1'];

// Create DOM from URL or file
$html = file_get_html($html_str);
$html->load('
<form name="form1" action="parser.php" method="post">
<input type="text" name="parser1">
</form>');

// Get the form action
foreach($html->find('form') as $element) 
   echo $element->action . '<br>';

// Get the input name       
foreach($html->find('input') as $element) 
   echo $element->name . '<br>';
?>
</body>

</html>

ここで、HTMLソースをテキストボックスに入力しようとしていますparser1

次に、ポストを使用してテキストボックスからデータを文字列にキャッチしていますhtml_str

その文字列を解析しようとすると、エラーが発生し始めます。

致命的なエラー: 24 行目の /home/public_html/parser.php の非オブジェクトに対するメンバー関数 load() の呼び出し

助けてください

4

2 に答える 2

1

あなたはこれを持っています:

$html = file_get_html($html_str);
$html->load('
<form name="form1" action="parser.php" method="post">
<input type="text" name="parser1">
</form>');

エラーメッセージは、それ$htmlがオブジェクトではないことを示しています。file_get_html()は組み込み関数ではありませんが、PHP Simple HTML DOM Parserを使用しているようです。そのAPI ドキュメントには、オブジェクトを返すと書かれていますが、追加情報は提供されていません。ソースコードを見ると:

function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
    // We DO force the tags to be terminated.
    $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
    // For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.
    $contents = file_get_contents($url, $use_include_path, $context, $offset);
    // Paperg - use our own mechanism for getting the contents as we want to control the timeout.
    //$contents = retrieve_url_contents($url);
    if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
    {
        return false;
    }
    // The second parameter can force the selectors to all be lowercase.
    $dom->load($contents, $lowercase, $stripRN);
    return $dom;
}

...何度か返されることがわかりますFALSE

if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
{
    return false;
}

したがって、POST フィールドが空であるか、大きすぎると言えます。を呼び出す前に、実際に確認する必要があります->load()

アップデート:

file_get_html()機能:

ファイルまたは URLから DOM オブジェクトを作成します。

あなたが本当に欲しいのは次のとおりだと思いますstr_get_html()

stringから DOM オブジェクトを作成します。

于 2013-02-21T12:42:28.537 に答える
0

フォームが送信されているかどうかを実際に確認すると役立つ場合があります。入力が有効かどうかを確認して再確認する必要があります。

// check if it's a POST request
if($_SERVER['REQUEST_METHOD'] === 'POST') {
    // check if parser1 is not empty
    if(!empty($_POST['parser1'])) {
        $input = $_POST['parser1'];

        if(filter_var($input, FILTER_VALIDATE_URL)) { // looks like an URL
            $html = file_get_html($input); // download URL
        } else { // lets assume it's HTML, because it's not an URL
            $html = str_get_html($input);
        }

        // If something goes wrong here, the input is invalid
        if(!empty($html)) {
             // parse DOM document here
        } else {
            // There is something wrong with the input
        }
    }
}
于 2013-02-21T12:01:52.487 に答える