リモートサーバ(別のサーバ)からCMSDのコンテンツを読み込む方法
Posted: 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
-- http:/ /server-b -------------------------------------------------------------
newslist.php
cmsd_remote.inc
----------------------------------------------------------------------------------
つまり、サーバ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}" />
のように変更します。
以上、簡単に説明しましたので、お分かりになる方だけお試しくださいませ。
もし、「やり方がよくわからないが、非常に興味がある。詳しく説明して欲しい」という
方がいらっしゃいましたら、ご連絡くださいませ。![Smile :)](./images/smilies/icon_smile.gif)
尚、この方法をとった場合、サーバBには追加のライセンスは不要です。
(つまり、このcmsd_remote.incは誰でも無料でご利用頂けます)
但し、サーバBが商用サイトの場合、サーバAのCMSDに商用ライセンスが必要
となりますのでご注意ください。
場合によっては、別のサーバ上の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 );
?>
newslist.php
コード: 全て選択
<?php require_once( "cmsd_remote.inc" ); ?>
<html>
<body>
ニュース一覧です。<br />
<?php
cmsd_remote( 'http://server-a/newslist.php' );
?>
</body>
</html>
コード: 全て選択
<?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}" />
のように変更します。
以上、簡単に説明しましたので、お分かりになる方だけお試しくださいませ。
もし、「やり方がよくわからないが、非常に興味がある。詳しく説明して欲しい」という
方がいらっしゃいましたら、ご連絡くださいませ。
![Smile :)](./images/smilies/icon_smile.gif)
尚、この方法をとった場合、サーバBには追加のライセンスは不要です。
(つまり、このcmsd_remote.incは誰でも無料でご利用頂けます)
但し、サーバBが商用サイトの場合、サーバAのCMSDに商用ライセンスが必要
となりますのでご注意ください。