日別アーカイブ: 2024/03/27

HTTP 301

新サーバー移行で実は結構問題があった。
解決までの無駄な過程を書いてもしょーがないので結果だけ。

このブログ (WordPress) の RSS が取得できなくなっていた。
どうやらパーマリンクの設定を変更したのがいけなかったようで。

WordPressでRSS配信がされないのは、head内にRSSのURL指定が正しくされていないのでは? | 便利なデジタル生活

マジでこれだった、archive 付きの URL に変更。
それだけで WordPressのURL/feed/ にて普通に取得できるように戻った。
元に戻しただけで進歩は何も無いんですけどね。

まて、本サイトにて RSS の内容を表示していた所が空っぽのままだ。
RSS に直接アクセスは普通に読み込めるようになったのに何故だ?

既存のソースを殆ど変えずにfile_get_contents()をcURLにする │ Webty Staff Blog

RSS 取得はネットでよく見かけるこのコードを使っていたんですけど。
ローカルで色々試すと HTTP Status 301 が戻っていた。
http://localhost で試すとゼロしか戻らないので PHP コードのみでやって。

PHPのcurlやfile_get_contentsでリダイレクトに対応する方法

解説感謝、そういうことかリダイレクトなのか。
移行前のサーバーでは問題なく取得できていたけど同じじゃないのね。

<?php
// localhost(192.168.***.***) や macOSname.local では読み込まない
if ($hostname == "localhost" or preg_match("/^192/", $hostname) or strpos($hostname, ".local") ) {
    echo "RSS";
} else {
    $url = "https://palepoli.skr.jp/wp/feed/";
    // cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    // HTTP Status 301 対策
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    $result = curl_exec( $ch );
    $status = curl_getinfo($ch);
    curl_close( $ch );
    if ($status['http_code'] === 200) {
        $rss = simplexml_load_string($result);
        $i = 0;
        foreach ($rss->channel->item as $item) {
            if( $i++ == 5 ) { break; }
            $link = $item->link;
            $title = $item->title;
            $date = date('Y.m.d', strtotime($item->pubDate));
            $desc = $item->description;
            echo <<< __EOS__
<dt><a href="$link" target="_blank">$title</a>&nbsp;($date)</dt>
<dd>$desc</dd>
__EOS__;
        }
    } else {
        echo "<p>HTTP Status " . $status['http_code'] . "</p>";
    }
}
?>

Status 200 (OK) 時のみ表示させるように変更。

やっと表示できるようになった、長かった。
あれこれ試す過程で PHP を 7=>8 にしたのが原因かと疑ったり。
無駄なコードを散々書いたり、ただの勉強不足でした。

しかしコレについて言及している人少ないね。
Wordpress を使っているだけで自前コードの人って少ないんだろうか。