PHP:JS(JavaScript)からPHPを呼び出しHTML上に出力する方法
PHP (55 items)
2004年12月22日
これらを提供するサービスサイトに行けば、大体が下記のような、
生成されるJS(JavaScript)のコードをHTMLに埋め込んでと言われます。
<script type="text/javascript" src="〜"></script>
このscriptタグのsrc属性の部分には、
各サービスサイト上のjsファイルが指定されている事が多いです。
仕組み的には、そのjsファイル内で、
更に各サービスサイトのcgiやphp等のサーバープログラムを呼び出しています。
こうする事は、そのサービス処理の仕組みを隠蔽する意味合いもありますが、
大きな意味は、
”ユーザーがJSコードを埋め込むだけで、各サービスを導入する事が出来る”
ここにあると思います。
また、”RSS Feed”のようなサービスについて考えると、
”ユーザーがJSコードを埋め込むだけで、その部分が動的に変わる事が出来る”
のです。
さて、そのjsファイルですが、
先に述べたように、そこから更にサーバープログラムを呼んでいる訳で、
「ほな、JSとサーバープログラムってどう関わってんねん?」
っていう事になります。。
では、これらの事をサーバープログラムをPHPに特化して簡単に考えてみます。
これにはjsファイルだけなく、php等も指定できます。
つまり、
<script type="text/javascript" src="〜.js"></script>
だけでなく、
<script type="text/javascript" src="〜.php"></script>
という指定もできるのです。
素早い人は、この時点で「あーなるほど」となるのでしょう。
「php側でechoなんかで出力すれば、その内容がHTMLに反映されんちゃうの?」
・・まあそうなんですが、ここでPHP側で注意する点があります。
で、実際、簡単なプログラムを作ってみました。
まず、”jsphptest.php”というPHPを用意し、
しょーもない処理ですが、このPHPの”param”というパラメータに、
”1”を渡せば、「WEB Artisan」、
”2”を渡せば、「RESTARTSYSTEM」、
と出力されるというものにします。
で、こいつをさっきのscriptタグで呼び出すとどうなるか?
■ソース
<script type="text/javascript"
src="http://www.res-system.com/weblog/media/1/jsphptest.php?
param=1"></script>
■結果
・・ちゃんとなってますねえ。。
ここで、PHPのソースから注意点を・・。
■ソース(jsphptest.php)
<?php
$param = $_GET['param'];
//(注1)
header("Content-type: application/x-javascript");
//(注2)
if ($param == '1') {
echo "document.write(¥"WEB Artisan¥")";
} else {
echo "document.write(¥"RESTARTSYSTEM¥")";
}
?>
(注1)
これが一番の注意点ですが、
headerには、application/x-javascriptを指定します。
これでないと、PHPが出力した内容はHTML上に出力されず、
scriptエラーとして判断されます。
(注2)
出力する際は、JSを意識して出力します。
つまり、PHPの出力結果は、その処理イメージを考えると、
HTML上でなく、JS上に出力される訳です。
で、JSがHTML上に出力するにはdocument.writeで行うので、
PHP側でも、この関数付きで出力します。
このように、
scriptタグのsrc属性にphpを指定する事で実現できるのですが、
最初に述べたように、srcにjsファイルをしている場合はどうなのか??
全てではないですが、結局、そのjsも更にphpを呼んでいる事でしょう。
実際やってみると、
■ソース
<script type="text/javascript"
src="http://www.res-system.com/weblog/media/1/jsphptest.js"></script>
■結果
・・ちゃんとなってますねえ。。
ここで、jsのソースから注意点を・・。
■ソース(jsphptest.js)
document.write('<script type="text/javascript"
src="http://www.res-system.com/weblog/media/1/jsphptest.php?param=1">
</script>');
・・つまり、結局、サーバー上のjsファイルでは、
そこから更にscriptタグのsrcにphpを指定して、
それをdocument.writeしている訳です。。。
・・まあ、これは一例ですので、
これ以上の素晴らしい仕組みでサービス提供しているサイトも多いです。
ただ、使う側は単にscriptを埋め込むだけですが、
サービス側はいろいろやってんだなと、、
更には、src属性にjs以外も指定できるんだなという事で。。。
しかし、この仕組みも使い様によっては、いろいろ出来ると思います。
これによって、htmlファイルといった静的なページでさえ、
外部phpと組み合わせる事で、動的に変えられる訳ですからね。。。
■動作テストのダウンロード
ダウンロードしたphpファイルをサーバーにアップロードしてください。
>>ダウンロード(srcにphp指定)
>>ダウンロード(srcにjs指定)
<関連記事>
>JS(JavaScript)で取得できるクライアント情報、そこからアクセス解析の仕組みを考えてみる
この記事に関連した過去記事一覧は画面下にあります。
Comments
しぇる wrote:
質問です。上記のサンプルを、自分のコンピュータ(Apache 1.33 PHP 4)の環境で実行してみたのですが、以下のように記述すると、うまく動作いたしません。src="http://localhost/jsphptest...."
ダウンロードしたものは、アドレスが http://www.res-system.com になっているので、動作するのですが。
php.iniに特別な設定など必要なのでしょうか?
ご教授いただければ幸いです。
2005年06月27日 23時21分05秒
ossi wrote:
しぇるさん特別な設定は要らないです。PHPの動作環境に問題があるのと思われます。
当サンプル以外のPHPは正常に動いていますでしょうか?
こちらで解る範囲ではお答えできますが、環境の詳細について明記されていないので判断しがたいです。。。
他の技術情報掲示板なのでもよく言われていますが、質問の際はOS等の詳細な情報を明記した方がいいと思います。
2005年06月28日 11時41分02秒
しぇる wrote:
そうですね、どうもすみません!Windows 2000 SP4 / Apache 1.3.33 / PHP 4.3.4 / IE 6 の環境です。
Apache2.0.54 と PHP5.0.4 の環境を構築したところ、設定ファイルは正しいはずなのですが、Apache から PHP が動作しなくなってしまったので、一度、Apache をアンインストールした上に削除して、PHP も削除した後で、上記の環境に戻したところなんです。現在は、他のPHPは動作しているので、元に戻ったと思ったのですが、まだ、動作環境に問題があるんですね。
ありがとうございました。
また、このサイトでお勉強しようと思います。
2005年06月29日 00時59分51秒
おちゃ wrote:
はじめましていつも興味深く読ませてもらっています。素朴な疑問なのですが、ソース(jsphptest.php)で、headerが一番したに記述されてますが、headerって上に書くものじゃないのでしょうか?何か意味があるのでしょうか?
2006年08月07日 16時40分10秒
ossi wrote:
おちゃさん確かに、この例ではdocument.writeの後でheader関数を呼んでいるので、順番が逆ですね。。
直しておきます。ご指摘ありがとうございました。
2006年08月08日 09時21分03秒
Add Comments
Trackback
トラックバックはありません
Trackback URL
http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=383