リモートサーバ(別のサーバ)からCMSDのコンテンツを読み込む方法

CMS Designerを「こんな風に使ってます」等の活用事例や、自分なりのTIPS等のご報告をお待ちしています。
返信
webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

リモートサーバ(別のサーバ)からCMSDのコンテンツを読み込む方法

投稿記事 by webmaster » 2005年4月18日(月) 15:04

 webmasterです。

 場合によっては、別のサーバ上のCMSDのコンテンツを読み込んで使いたいと
いう事があるかもしれません。

 わかり易い例を挙げるなら、サーバAにはCMSDをインストールできたが、
サーバBにはインストールできなかった・・・しかし、サーバBをメインにサイトを
構築したい、というような場合です。
 または、サーバAがメインサイトだけども、サーバBにもちょっとだけサーバAの
情報を掲載したい、という場合も多いかもしれません。
 (但しサーバBでは最低限、PHPが動作する事とします。)

 そこで、コンテンツをサーバAに置いておき、ブラウザからサーバBにアクセスすると、
サーバBがサーバAのコンテンツを読み込んでブラウザへ返す仕組みを作ります。

 具体的には次のようにします。

-- http:/ /server-a/ ------------------------------------------------------------
newslist.php

コード: 全て選択

<?php
  require_once( "cmsdesigner/include/view.php.inc" );
  cmsview::listpage( "news1", 'default', 10 );
?>
-- http:/ /server-b -------------------------------------------------------------
newslist.php

コード: 全て選択

<?php  require_once( "cmsd_remote.inc" ); ?>
<html>
<body>
ニュース一覧です。<br />
<?php
  cmsd_remote( 'http://server-a/newslist.php' );
?>
</body>
</html>
cmsd_remote.inc

コード: 全て選択

<?php

  function cmsd_remote( $url )
  {
    // GETパラメータを引き継ぐ。
    $urlparams = '';

    foreach ( $_GET as $key => $value )
    {
      if ( strlen( $urlparams ) == 0 )
      {
        $urlparams .= '?';
      }
      else
      {
        $urlparams .= '&';
      }
      
      $urlparams .= $key . '=' . $value;
    }
    
    // パラメーターのサニタイズ(2020年5月 ユーザー様より指摘)
    $urlparams = htmlspecialchars( $urlparams, ENT_QUOTES);

    $url .= $urlparams;
    
    // 連結したURLのサニタイズ(2020年5月 ユーザー様より指摘)
    $url = htmlspecialchars( $url, ENT_QUOTES);    
    
    // URL先のページを読み込む。
    $fp = fopen( $url, 'r' );
    
    if ( empty( $fp ) )
    {
      die( 'URL取り込み失敗。' . $urlparams );
    }
    
    // 読み込んだデータを表示する。
    while( !feof( $fp ) )
    {
      $buffer = fgets( $fp, 4096 );
      print $buffer;
    }
    
    fclose( $fp );
    
  }

?>
----------------------------------------------------------------------------------

 つまり、サーバAには、cmsview::listpageコマンドだけを埋め込んだnewslist.php
を置いておき、サーバBからcmsd_remoteコマンドを使って呼び出すようにします。

 これで、サーバAのnewslist.phpの内容がサーバBのnewslist.phpに読み込まれて
表示されます。
 URLパラメータも受け渡されますので、ページ切り替えも可能です。

 cmsd_remote.incの内容は気にする必要はありません。
 そのままの形で使いまわし可能です。

 尚、注意事項としては、画像とファイルについては相対パスで表示される為、
そのままだとサーバB上の画像を探しにいって画像が「×」になってしまいます。
 これを回避する為に、デザイン定義側で、画像の表示部分を次のようにしてください。

<img src="{photo}" />

 のような箇所を、

<img src="http://server-a/{photo}" />

 のように変更します。

 以上、簡単に説明しましたので、お分かりになる方だけお試しくださいませ。

 もし、「やり方がよくわからないが、非常に興味がある。詳しく説明して欲しい」という
方がいらっしゃいましたら、ご連絡くださいませ。 :)

 尚、この方法をとった場合、サーバBには追加のライセンスは不要です。
 (つまり、このcmsd_remote.incは誰でも無料でご利用頂けます)
 但し、サーバBが商用サイトの場合、サーバAのCMSDに商用ライセンスが必要
となりますのでご注意ください。

moory

リスト表示以外の表示方法について

投稿記事 by moory » 2005年10月08日(土) 13:44

リモートサーバ(別のサーバ)からCMSDのコンテンツを読み込む方法」についてもう少し詳しく教えてください。

具体的には、abc.comにCMSDをインストールし、123.abc.comと456.abc.comという2つのサブドメイン用のコンテンツを管理しようと思います。
すでにインストールは完了し、例にありましたリスト表示、また例にはありませんでしたが、「cmsview::listpage( "news1", 'default', 10 ); 」を
「cmsview::enty( "news1", 'default' ); 」に変更することで個別のページの表示も可能になりました。

さてココからが質問なのですが、リモートサーバーで個別の記事に「記事のナビゲーション」を表示させる(同じサーバー内での動作と同じように)ためには、abc.comに置くnewslist.phpはどのように記述すればよいのでしょうか? 同じくリスト表示時に「記事のナビゲーョン」を表示させるためにはどのように記述すれば宜しいのでしょうか?

お忙しいとは思いますがご指導いただけると幸いです。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: リスト表示以外の表示方法について

投稿記事 by webmaster » 2005年10月08日(土) 20:47

 webmasterです。mooryさん、ご質問ありがとうございます。

 全部書くと書ききれないので、敢えて最小限の説明に留めます。
 ご不明な点がありましたら、その都度個別にご質問頂ければ幸いです。m(_ _)m

 まず、abc.com上にて、普通にページを作成します。
 今回、リモートサーバー上で個別の記事に記事のナビゲーションをつけるページ
を表示したいとのことですので、まずはそれをabc.com上で実現して下さい。
 そのphpファイルの名前を仮に myentrywithnavi.php とします。

 その後、作成したphpと同一の名前(でなくても構いませんが、分かりやすくする為
同一で)のphpファイルをリモートサーバー上に作ります。
 中身は、このトピックの最初の書き込みの「server-bのnewslist.php」を参考に、
「 http://abc.com/myentrywithnavi.php 」を読み込むようにします。
 このファイルと同一の場所に、cmsd_remote.inc も置いて下さい。

 これで、リモートサーバーのmyentrywithnavi.phpを実行すると、あたかも
abc.comのmyentrywithnavi.phpを実行しているかのように動作します。

 この説明でいかがでしょうか。
 ご不明な点は再度ご質問頂ければ幸いです。

(もし、リモートサーバーうんぬんとは無関係に、「個別記事のナビゲーション」を
実現する方法についてご質問の場合は、リファレンスマニュアルの5.5.9を
ご参照ください)

moory

解決です

投稿記事 by moory » 2005年10月08日(土) 22:44

早速のご返答ありがとうございます。
ご指導の通りに埋め込んでみたところきちんと動作いたしました。

単純にabc.com用に作成したページをリモートを使ってそのまま読み込んでやればよかったのですね。 なんだかとてつもなく勘違いしていたようで、的外れな質問をしてしまいお恥ずかしい限りです。

このCMSDesignerは知れば知るほど奥の深いプログラムで、使い方によってはかなりなことまで出来てしまいそうでワクワクしながらお勉強中です。 他の方も書き込みされていましたが、TBやPING、コメント機能や静的URLの書き出し等の機能充実でさらに強力なソフトに進化していくことを期待しています。 がんばってください。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 解決です

投稿記事 by webmaster » 2005年10月08日(土) 22:57

 webmasterです。
 うまく動作したようでホッとしております。

 もともとのこちらの説明がかなり省略してあったものですので、混乱を招いてしまい
申し訳ありませんでした。

 TB、PING、コメント、静的書き出しにつきましては、現在いろいろと方法を検討中
ですが、まだ煮詰まっておらず、保留の状態となっております。m(_ _)m
 ご期待くださっているのに申し訳ありません。

 今後も精進いたしますので、またご要望などありましたらよろしくお願い致します。

返信