新サーバー移行で実は結構問題があった。
解決までの無駄な過程を書いてもしょーがないので結果だけ。
このブログ (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> ($date)</dt> <dd>$desc</dd> __EOS__; } } else { echo "<p>HTTP Status " . $status['http_code'] . "</p>"; } } ?>
Status 200 (OK) 時のみ表示させるように変更。
やっと表示できるようになった、長かった。
あれこれ試す過程で PHP を 7=>8 にしたのが原因かと疑ったり。
無駄なコードを散々書いたり、ただの勉強不足でした。
しかしコレについて言及している人少ないね。
Wordpress を使っているだけで自前コードの人って少ないんだろうか。