0

この php を使用して、ブログの最新の投稿を取得しました。

function read_rss($display=0,$url='') {
    $doc = new DOMDocument();
    $doc->load($url);
    $itemArr = array();

    foreach ($doc->getElementsByTagName('item') as $node) {
        if ($display == 0) {
            break;
        }

        $itemRSS = array (
            'title'       => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'description' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link'        => $node->getElementsByTagName('link')->item(0)->nodeValue,
        );

         array_push($itemArr, $itemRSS);

        $display--;
    }
    return $itemArr;
}

このタスクの実行方法がわからなかったので、チュートリアルからこれを学びました。ただし、機能しますが、エラーログに次のエラーが出力され続けます。

[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Document is empty in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153
[12-Jun-2010 06:13:36] PHP Warning:  DOMDocument::load() [<a href='domdocument.load'>domdocument.load</a>]: Start tag expected, '&lt;' not found in http://www.prettyklicks.com/blog/?feed=rss2, line: 1 in public_html/includes/functions.php on line 153

何か案は?

ありがとう!

4

1 に答える 1

0

私は同じ問題を抱えていましたが、ここに解決策があります:

次の行を置き換えます。

$doc->load($url);

$doc->loadXML(preg_replace("/>\s+<", file_get_contents($url)));

これは、URL を文字列にロードし、タグ間のすべての空白を取り除き、それを DOMDocument オブジェクトに渡してロードすることです。

なぜ空白が重要なのですか? よくわかりませんが、WordPress の RSS フィードには適切にインデントするために空白が含まれているようですが、これが DOMDocument のパーサーに干渉し、タグが欠落しているように見えます。

私が答えを見つけたhttp://netweblogic.com/php/domdocument-whitespace-php/の功績。異なる状況で同じ問題を解決します。

奇妙なことに (そして、これはわかりません)、開発サーバーでは回避策なしでコードが機能しますが、運用サーバーでは機能しません。理由はわかりませんが、Apache/PHP/WordPress のバージョンと構成に関係があるはずです。

とにかく、これがお役に立てば幸いです。手遅れではありません。

ポール。

于 2010-09-24T18:08:55.443 に答える