【高ポイント】.htmlファイルでphpスクリプトを動作させるには?


.phpファイルにhtmlとphpを混在させるのではなく
.htmlファイルにアクセスすると別に設けられたphpスクリプトを動作させたいです。

aaa.htmlにアクセスするとbbb.phpが読み込まれて指定してあるアクセスを遮断する
という感じをイメージです。

phpスクリプトは別のサーバーに設置します。

※ <body>内のみで行えること
※ .htaccessは使えない。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/03/17 22:26:16
  • 終了:--

回答(4件)

id:typista No.1

typista回答回数359ベストアンサー獲得回数72005/03/18 11:03:30

ポイント10pt

<body onLoad=”location.href=’

’”>

ではダメでしょうか?

若しくは、参考URLのようにhttpd.confの設定で、

phpをhtmlに見せかける(隠蔽)ではダメですか?

※.htaccessは使えないとのことなので、設定関連は

 NGってことでしょうか?(自サーバでないなど?)

いずれにしても、主目的はIPアドレスでフィルタリングをしたいようですが、それをHTMLで実現するのは困難だと思います。

ので、何かの条件によって処理を分岐するのであれば、phpで実現するのが良いでしょう。

→ それでもヘッダの偽装は可能なので限界はあります。

以下参考URLの引用です。

---

# 全てのPHPコードをHTMLのように作成する

AddType application/x-httpd-php .htm .html

効率的にこれを使用するには、全てのPHPファイルの名前を上の拡張子に変更 する必要があります。これは、あいまいさに基づく形式のセキュリティですが、 欠点の少ない簡単な防衛策です。

id:tpichu No.2

tpichu回答回数304ベストアンサー獲得回数12005/03/17 22:33:01

ポイント10pt

<?php

include ’

’;

?>

これで、できます。

ただ.htmlファイルがPHPを認識しないとどうしようもありません。

id:dsa

拡張子が.phpの場合には問題ないですが

.htmlでそれを実行した場合できないようです。

2005/03/17 23:25:06
id:english No.3

english回答回数304ベストアンサー獲得回数02005/03/17 22:50:09

ポイント50pt

>指定してあるアクセスを遮断する

というのがよく分かりませんが、

<body>内で

<img src=”

” width=1 height=1>

とすれば、画像アイコンも表示されません。もしくは、example.php内の、最後の出力部分で、

<?php

//アクセスを遮断するとかいう処理

//****************************

//最後に画像ファイルをブラウザに表示

$image_path = ”blank.gif”;

header(”Content-type: image/gif”);

$fd = fopen( $image_path, ”r” );

$contents = fread( $fd, filesize( $image_path ) );

fclose( $fd );

?>

などとすれば良いのではないでしょうか?

print $contents;

などとすれば良いのではないでしょうか? PHPやCGIでアクセスログを取る際にも同様な手法が使われていますね。

id:dsa

もう少し詳しく伺っても良いでしょうか?

アクセスを遮断する処理というのは

特定のIPアドレスを別のサイトへ飛ばすというイメージです。

$akukin = array(”111.222.333.444”,”555.666.777.888”);

$jump =$_SERVER[”REMOTE_ADDR”];

foreach($akukin as $value){

if(eregi(”$value”,$jump)){

header(”Location: http://yahoo.co.jp”);}

}

という感じでしょうか。

aaa.html内でこの処理を行いたいのです。

<body>内にはイメージタグを呼び出すとして、phpスクリプトにはどこを追記すればいいのでしょうか。

2005/03/17 23:37:28
id:english No.4

english回答回数304ベストアンサー獲得回数02005/03/17 23:59:54

ポイント50pt

http://www.broadband-xp.com/hidesource/cgi.html

Javascriptソースを外部ファイル化する(CGI編)

なるほど、アクセス遮断の意味が分かりました。そうであれば、先ほど紹介したimgタグでは駄目です。Javascript+PHPの連携で可能です。

<body>内より<head>〜</head>内に設置すれば最適ですが、それが無理であれば、

<body>

<script type=”text/javascript” src=”

”></script>

</body>

とします。

その上で、example.php内では、

<?php

$akukin = array(”111.222.333.444”,”555.666.777.888”);

$jump =$_SERVER[”REMOTE_ADDR”];

foreach($akukin as $value){

if(eregi(”$value”,$jump)){

header (”Content-Type: application/x-javascript”);

print ”location.href=’

’;”;

exit;

} else {

header (”Content-Type: application/x-javascript”);

print ”var abc=’’”;

exit;

}

?>

などとします。

content-typeをPHP内のヘッダー関数で指定してあげれば、Javascriptの外部ファイルの拡張子は必ずしも.jsでなければならいことはなく、CGIやPHPでJavascriptの外部ファイルを書くこともできます。参照URLにはperlやPHPでのJavascriptファイルの書き方を説明しています。

jsファイル内に

location.href=’

’;

と書いてあれば、すべてのユーザーがYahoo! Japanトップページにリダイレクトされますが、

それをIPアドレスで判断して、特定のIPにだけ、この

location.href=’

’;

が書かれたJSファイルが読み込まれるように設定するわけです。

ただし、このやり方ですと、特に<head>〜</head>にJavascript(<script type=”text/javascript” src=”

”></script>)が使えない場合、とにかく一旦はページが一瞬でも表示された後、ページ遷移します。上のサンプルスクリプトで言えば、Yahoo! Japanのトップページ。

また、Javascriptをoffにされていると、Yahoo!には移動せず、アクセス制限の役割を果たせません。

また、PHPのin_array関数を使ったほうがスマートにできるかもしれません。

http://jp2.php.net/in_array

PHP: in_array - Manual

id:dsa

test.htmlを作成しボディータグ内に以下を埋め込み

<script type=”text/javascript” src=”http://aaa.aaa/test.php”></script>

以下本文

test.phpには

$akukin = array(”自分のIPアドレス”);

$jump =$_SERVER[”REMOTE_ADDR”];

foreach($akukin as $value){

if(eregi(”$value”,$jump)){

header (”Content-Type: application/x-javascript”);

print ”location.href=’http://www.yahoo.co.jp’;”;

exit;

} else {

header (”Content-Type: application/x-javascript”);

print ”var abc=’’”;

exit;

}

?>

としましたがtest.htmlでは

>「実行しましたがエラーが出ました」が表示。

test.phpでは何も表示されませんでした。

非常にわかりやすい説明で感謝なのですが、私の理解力が足りないのか上手く動作しないようです。

2005/03/18 12:28:18

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません