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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

WordPress

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

PHP

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

Q&A

解決済

2回答

4563閲覧

httpsサイトにてhttp画像を表示させたい

ryches

総合スコア7

SSL

SSL(Secure Sockets Layer)とは、暗号化されたプロトコルで、インターネット上での通信セキュリティを提供しています。

WordPress

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

PHP

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

0グッド

2クリップ

投稿2018/03/04 09:11

編集2018/03/04 13:00

前提・実現したいこと

SSL導入をしたWordpressのhttpsサイトにて
httpサイトで配信されているフィードのサムネイル画像を使用したい。

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

mix contentでSSL通信ではなくなってしまう。

試したこと

http:// → //
といった処理を行うと画像が取得できない。

何か他の方法がないか探したが、見つからなかった為
質問させて頂きました。

補足情報(FW/ツールのバージョンなど)

http// → //
で対応可能なものもあれば
省略してしまうと画像が取得できないものがあります。

何か方法をご存知の方がいましたら、ご教示下さい。

RSSの取得にはプラグインを使用

フィード取得先は画像配布サイトではなく
通常のブログです。

あくまでもブログ更新記事毎のサムネイルがSSL化で表示が行えれば良いです。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/03/04 10:12

そのサイトは画像配布サイトではないんじゃないのか?
退会済みユーザー

退会済みユーザー

2018/03/04 10:12

そのサイトの管理者はあなたか(あなたの会社か)?
guest

回答2

0

ベストアンサー

http:// → //
といった処理を行うと画像が取得できない。

この場合、参照先のサーバがHTTPSに対応していない事を意味しているため、
ブラウザから直接アクセスさせる方法では対応不可能です。

方法論としては一度Wordpressサーバ側で先方の画像を取得、
一時保存して自分のドメインの画像として表示させればHTTPSで表示が可能になります。

ただ、コピーして再配信ということになるので、元サイトが自己所有のもので無い場合は著作権上の問題や元サイトの利用規約に違反する可能性が出てくるので注意が必要です。
(法律的な部分は法律の専門家に専門するか、元サイトの管理者に許可を取って下さい。)

あくまでもブログ更新記事毎のサムネイルがSSL化で表示が行えれば良いです。

という事ですが、原理的にサーバ側で一回処理をしないといけないので、
今のプラグインを改造するか、機能が実現可能なプラグインを探してページを作り直すのどちらかが必要になるので、http://→// と同じくらいに簡単に出来る方法は無いと考えた方が良いです。

投稿2018/03/04 13:17

tanat

総合スコア18713

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

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

ryches

2018/03/06 13:00 編集

詳細有難う御座います。 フィード取得に関して、画像の含め許可を頂いております。 プラグインではなくphpで処理を行うようにしましたが どうしても画像の一時保存がうまくいかず止まっております。 可能であればでよいので、教授頂けたらと思います。 ソース <?php include_once(ABSPATH . WPINC . '/rss.php'); define('MAGPIE_OUTPUT_ENCODING' , 'UTF-8'); define('MAGPIE_CACHE_DIR' , './cache'); define('MAGPIE_FETCH_TIME_OUT', 30); define('MAGPIE_CACHE_AGE', 60*60); //フィードのURI $rss_arr = array( 'http://******.com' ); $rss = fetch_feed($rss_arr); if (!is_wp_error( $rss ) ) : // すべてのフィードから最新5件を出力 $maxitems = $rss->get_item_quantity(5); // 0件から始めて指定した件数までの配列を生成 $rss_items = $rss->get_items(0, $maxitems); endif; ?> <ul class="feed clearfix"> <?php if ($maxitems == 0) echo '<li>No items.</li>'; else //RSSフィードが0件の時は「No items.」と表示 //RSSフィードが1件以上ある時は、以下のようにRSSのデータを繰り返し //取得RSSのデータは、$itemにあるデータであれば、他のデータも表示可 foreach ( $rss_items as $item ) : ?> <li class="clearfix"> <?php // ブログの画像を取得 $first_img = ''; if ( preg_match( '/<img.+?src=[\'"]([^\'"]+?)[\'"].*?>/msi', $item->get_content(), $matches ) ) { $first_img = $matches[1]; } ?> <a href='<?php echo $item->get_permalink(); ?>' target="_blank"> <?php if ( !empty( $first_img ) ) : ?> <div class="image"> <img src="<?php echo esc_attr( $first_img ); ?>" alt="<?php echo $item->get_title(); // 記事タイトル ?>" > </div> <?php else : ?> <div class="image"> <img src="<?php echo esc_url ( get_template_directory_uri() ); ?>/img/common/no_image2.gif" alt="no image"> </div> <?php endif; ?> <div class="info"> <h4 class="title"><?php echo $item->get_title(); // 記事タイトル ?></h4> <p class="date"><?php echo $item->get_date("Y.n.j"); // 日付 ?></p> </div> </a> </li> <?php endforeach; ?> </ul> 画像取得の部分の下に 取得したURLを/hogehoge/へ保存といった処理を加えたらどうかと思い、処理を追加してみましたが 保存できずおります。
guest

0

$first_img = $matches[1];
の下に下記を追加したらどうでしょうか?

自サーバーに画像を保存して表示するやり方です。

初回のみ画像を保存して、画像があれば画像を表示するといった処理になっています。

php

1if(!empty($first_img)){ 2 3 4 // 画像URLからファイル名のみ取得 5 $image_name = substr(strrchr($first_img, "/"), 1); 6 7 //同じファイル名で違う画像だと保存されないので、ファイル名の最初に記事ID(rssの一意ID)とか付与できればベスト 8 //$image_name = '記事IDなどの一意のID'.'_'.$image_name; 9 10 // 画像を保存するパス(WordPressのアップロードディレクトリ) 11 $wp_upload_dir = wp_upload_dir(); 12 $upload_dir = $wp_upload_dir['basedir'] . '/rss_tmp/'; 13 14 // 画像ファイルが存在するかチェック 15 if (! file_exists($upload_dir . $image_name)) { 16 // 画像データを取得 17 if ($image_data = @file_get_contents($first_img)) { 18 19 // ディレクトリが無ければ作成 20 if (! is_dir($upload_dir)) { 21 mkdir($upload_dir); 22 } 23 24 // 画像をサーバーに保存する 25 file_put_contents($upload_dir . $image_name, $image_data); 26 } 27 } 28 // 画像URLを自サイトのURLに書き換える 29 $first_img = $wp_upload_dir['baseurl']. '/rss_tmp/'.$image_name; 30}

投稿2018/03/13 07:30

mitsulog

総合スコア14

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

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

ryches

2018/03/15 09:43

mitsulog 様 有難う御座います。 記載頂いたソースを利用させてもらったところ 無事、SSL表示で望むような動作確認が出来ました。 各処理の内容も記載して頂き有難う御座います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問