ある、100ページくらいあるウェブサイトにPHPソースを組み込んだとします。(例 http://www.testtest.com/ahoaho_001.html)
そのHTMLソース内になにかPHPソースを組み込んで、外部のデータベースのデータを読み込むようにしたい。
長いソースを置きたくないのでとりあえずrequireを使い、別のPHPを作動させたいと思います。
その際に、そのページURLと関係したデータをDBから引っ張りたいので、requireはこう書いた方がいいと思いました
<?php require('http://www.testdb.com/db.php?url=http://www.testtest.com/ahoaho_001.html'); ?>
これで、「http://www.testdb.com/db.php」が動き出した時にurlのパラメータを受け取ることができると考えました。
しかし、ここである一つの問題がでてきました。
なんせ、100ページもあるのです。100ページすべて一つ一つに、「url=」のパラメータを変えつつ
<?php require('http://www.testdb.com/db.php?url=http://www.testtest.com/ahoaho_002.html'); ?>
を100回おいていくのは非常に困難ですし、面倒です。
何かよい方法はないでしょうか?そのページのURLが受け取れればいいのですが、、、。
■そのページのURL
http://iwamode.net/etc/cgi_env_param.html
PATH_INFOとかそのあたりで、環境変数から自ページの
URLを取り出せばどうでしょうか?
■スクリプトを書く
を100回おいていくのは非常に困難ですし、面倒です。
この作業をするスクリプトを書く。
http://www.php.net/manual/ja/reserved.variables.php#reserved.var...
URLはただの参考です。
<?php require('http://www.testdb.com/db.php'); ?>
で普通に呼び出して、db.phpの中で$_SERVER['SCRIPT_NAME']とか参照すれば、呼び出し元のパスが取得できると思います。(念のため手元の4.3.11で確認しました)
別に、ページごとに別の呼び出し方をする必要はないような。
100ページすべてにURLを指定するのも大変ですが、100ページあるHTMLすべてにPHPを埋め込むほうが大変じゃないでしょうか?
ページのURLを丸ごと指定しなければ関係したデータを取り出せないという仕様はやめて、URLの識別子から、ユーザが表示させたいページを判断し、その値をdbを扱う関数に引渡し、HTMLで出力するという考え方に切り替えたほうが効率がいいはずです。
例えば
利用者のリクエストが
http://www.nanntoka.com/index.php?page=ahoaho&num=002
だった場合、PHPで page と num を$_GET['page'] $_GET['num']から取得し、それらを使ってDBに接続する関数に渡し、帰ってきたデータを表示用のHTMLテンプレートファイルと組み合わせて表示するというやり方です。
こういったWebアプリケーションを作成するときに使われるデザインパターン(設計パターン)は数多くありますが、先人達がより多くの人に使いやすいようにと、まとめてくれたものがPHPには沢山存在します。これを「フレームワーク」といいます。できれば何らかのフレームワークを導入したほうが良さそうです。
http://codezine.jp/a/article/aid/704.aspx
コチラなどを参考にしてみると良いかもしれません。
PHPのフレームワークは色々と乱立していて、選択に迷うかもしれません。
そのときは言語が違いますが、Ruby on Railsなどを検討されてみるのも悪くないと思います。
PATH_INFO があるなんて知りませんでした!さっそく使ってみます。
スクリプトを書く方法も併せてつかってみたいと思います。(どのみち、書かなければいけないので。)
ありがとうございました