質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

919閲覧

file_get_contents のエラーについて

risanyan

総合スコア2

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2023/08/04 10:31

編集2023/08/04 16:05

こちらの記事を元にnoteの投稿をRSSフィードを用いてWordPress内に表示させる実装を行いました。
https://tane-be.co.jp/knowledge/web-design/3349/

ロリポップのサーバーでは正しく表示をされています。

お客様のご利用のサーバーがエックスサーバーのため、
試しにエックスサーバーに契約し、その環境でwordpressを作成するとエラーメッセージが出るようになりました。
(エックスサーバーは現在無料期間)

あまりphpに詳しくなく、原因が分からず困っております。
どのように修正したら良いか、解決法を教えていただけないでしょうか?

発生している問題

表示をしたいものはすべて正しく表示されているものの
エラーメッセージが出ている。

発生している問題・エラーメッセージ

アイキャッチの上に下記エラーメッセージが出ます。 Warning : file_get_contents(https://note.mu/api/v1/notes/⚪︎⚪︎⚪︎): failed to open stream: HTTP request failed! HTTP/1.1 405 Method Not Allowed in /⚪︎⚪︎⚪︎/functions.php on line 72

該当のソースコード

function note_feed_display($feedURL, $num, $length) { if(!$feedURL) { return false; } if(!$num) { $num = 3; } if(!$length) { $length = 20; } include_once( ABSPATH . WPINC . '/feed.php' ); $rss = fetch_feed( $feedURL ); if ( !is_wp_error( $rss ) ) { $maxitems = $rss->get_item_quantity($num); $rss_items = $rss->get_items( 0, $maxitems ); } if ( !empty( $maxitems ) ) { if ($maxitems == 0){ echo '<!-- RSSデータがありません -->'; } else { echo '<ul class="list">'; foreach ( $rss_items as $item ) { $hash = substr($item->get_link(), strrpos($item->get_link(), '/') + 1);        $api_data = file_get_contents('https://note.mu/api/v1/' . 'notes/' . $hash); $eyecatch = $item->data["child"]["http://search.yahoo.com/mrss/"]["thumbnail"][0]["data"]; $creatorImg = $item->data["child"]["https://note.com"]["creatorImage"][0]["data"]; $creatorName = $item->data["child"]["https://note.com"]["creatorName"][0]["data"]; $first_img = ''; if ( preg_match('/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches) ) { $first_img = $matches[1]; } $description = $item->get_description(); $description = str_replace("続きをみる", "", $description); $description = strip_tags($description); if($length != 0) { $description = mb_strimwidth($description, 0, $length, "...", 'utf-8'); } echo '<li class="col">'; echo '<article class="card">'; echo '<a href="'.$item->get_permalink().'" class="card-wrapper" target="_blank" rel="noopener noreferrer">'; /** * アイキャッチ * ないときは、投稿内の1枚目の画像を * それもないときは、ダミー画像を表示させる */ if (!empty($eyecatch)){ echo '<figure class="card-thumbnail"><img src="'.$eyecatch.'" alt="'.$item->get_title().' eyecatch"></figure>'; } elseif (empty($eyecatch) && !empty($first_img)) { echo '<figure class="card-thumbnail"><img src="'.esc_attr($first_img).'" alt="'.$item->get_title().'" /></figure>'; } else { echo '<figure class="card-thumbnail"><img src="<!-- ダミー画像のパス -->" alt="'.$item->get_title().'" /></figure>'; } echo '<div class="card-contents">'; echo '<h3 class="card-title">'.$item->get_title().'</h3>'; echo '<p class="card-description">'.$description.'</p>'; echo '<time class="card-date">'.$item->get_date('Y.m.d').'</time>'; echo '<div class="card-author">'; echo '<div class="card-author-img"><img src="'.$creatorImg.'" alt="'.$creatorName.'"></div>'; echo '<div class="card-author-name">'.$creatorName.'</div>'; echo '</div>'; echo '</div>'; echo '</a>'; echo '</article>'; echo '</li>'; } echo '</ul>'; } } } エラーの72に該当する部分 →$api_data = file_get_contents('https://note.mu/api/v1/' . 'notes/' . $hash);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2023/08/05 03:58

HTTPリクエストに対して405エラーが返ってと言うことなので、PHPに詳しいかどうかはあまり関係なくて、なぜそのURLへのリクエストでそのエラーになるのか、どういう条件の時なのかを調べるのでは? URLの指定ミスとか言う単純な間違いでなければ、APIの理解不足と言うことでしょうね。
guest

回答1

0

ベストアンサー

file_get_contents関数で値が入る変数$api_dataですが、ブログ記事内のソースでは記事の画像や執筆者情報の取り出しに使用されていますが、こちらのソースコードではもう使われていないようです。
ですので、$api_dataとそれに関係する$hashの部分の2行は削除しても構わないと思います。

PHP

1/* 2$hash = substr($item->get_link(), strrpos($item->get_link(), '/') + 1); 3$api_data = file_get_contents('https://note.mu/api/v1/' . 'notes/' . $hash); 4*/

いったんこのようにコメントアウトするなどして、挙動を確認してみてください。

投稿2023/08/05 13:30

fareastnoise

総合スコア250

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

risanyan

2023/08/06 08:22

fareastnoise様 ご回答いただき、ありがとうございました。 ご指摘の2行を消去して解決いたしました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問