Web Artisan Blog - ウェブ アルチザン ブログ

PHP:JS(JavaScript)からPHPを呼び出しHTML上に出力する方法

PHP (55 items)

2004年12月22日

”アクセス解析”や”RSS Feed(ブラウザ上のRSSリーダー)”、
これらを提供するサービスサイトに行けば、大体が下記のような、
生成されるJS(JavaScript)のコードをHTMLに埋め込んでと言われます。

<script type="text/javascript" src="〜"></script>



このscriptタグのsrc属性の部分には、
各サービスサイト上のjsファイルが指定されている事が多いです。
仕組み的には、そのjsファイル内で、
更に各サービスサイトのcgiやphp等のサーバープログラムを呼び出しています。
こうする事は、そのサービス処理の仕組みを隠蔽する意味合いもありますが、
大きな意味は、
”ユーザーがJSコードを埋め込むだけで、各サービスを導入する事が出来る”
ここにあると思います。

また、”RSS Feed”のようなサービスについて考えると、
”ユーザーがJSコードを埋め込むだけで、その部分が動的に変わる事が出来る”
のです。

さて、そのjsファイルですが、
先に述べたように、そこから更にサーバープログラムを呼んでいる訳で、
「ほな、JSとサーバープログラムってどう関わってんねん?」
っていう事になります。。
では、これらの事をサーバープログラムをPHPに特化して簡単に考えてみます。
まず、scriptタグのsrc属性ですが、
これには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