• ベストアンサー

Javascriptの変数をPHPに渡したい

環境  サーバLinux、Apache2.0.47、PHP4.3.2で使用しています 質問  リンク元の取得のためgetenv("HTTP_REFERER")を使っていますが情報が取得できません。  クライアント側のファイアウォール(ノートンなど)が無効になっているときにしか情報が取得できませんでした。  Javascriptのdocument.referrerを使ったところ、ファイアウォール関係なく情報が取得できました。  ログ保存のためにPHPの変数にdocument.referrerを渡したいのですがどのようにすればよいのでしょうか?  下のように書いたところブラウザには正常に表示されましたが、  ログはJavascriptの制御文そのものが保存されました。  $link="<SCRIPT language='JavaScript'><!--    document.write(document.referrer);    --></SCRIPT>"; よろしくお願いします。

  • wipe
  • お礼率81% (100/122)
  • PHP
  • 回答数6
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
回答No.6

#2です。 「どこからトップページに来たか(逆アクセスログ?)」 ということをログに残したいということでしょうか。 外部サイトから来た場合もどこから来たかを 特定したいのであれば、セッションではなく、 ほかの方がおっしゃっているような方法になると思います。 もし、外部サイトを特定する必要がなく、 ひとまとまりで「外部サイト」などの代名詞を ログに残すのであれば、セッションでもできます。 ------------------------------------------------------ 初期アクセス時にはセッションに値が保持されないので、   セッションに値がない=「外部サイト」 といった考え方です。 ------------------------------------------------------

wipe
質問者

お礼

度重なる回答ありがとうございます。 ログに残したい内容は回答いただいたとおりです。 google検索結果からきたとか、関連リンクからきたとか、そのような使い方です。 サイト内からのアクセスは考えていません。 (また同じブラウザでは1回しかログを取らないようにしています) やはりトップページでdocument.referrerを使いログ書き込みページにジャンプ、 ログを書いた後トップページにジャンプということになるのでしょうか。 現在の取得ログは日時、IP(ホスト名)、ブラウザ種類、リンク元の5つです。 リンク元以外はすべて取得できています。 PHPの関数で取得できず、Javascriptの関数で取得できるので、 Javascriptで取得したデータをPHPの変数として渡せないかと考えたまでです。 また同一ページでログを保存した方が良いということと、 トップページ→ログページ→トップページでは動作が不安定かなと考えていました。 CGIを使わないアクセスカウンターでは通常どのようになっているのでしょうか。 リンク元にこだわるのであればオールJavascriptにした方がようのでしょうか。 もう少し検討してみます。 回答ありがとうございました。

その他の回答 (5)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.5

というか、javascriptで解釈されるほうが、PHPで データを送り出すよりあとだから、とれないのでは? 副次的にやるのであればajaxで別途データを送らせる など考えられないことはないですが・・・

wipe
質問者

お礼

おはようございます。 回答いただいた件が気になり Javascript文を削除しPHPのみ確認しましたが同じでした。 Nortonファイアウォールで情報が取得できない理由・セキュリティルールは分かりません。 Ajaxを使わなければ出来ないというのであればすぐに対応しなければなりませんが、 Web1.0でも出来そうなので変更は難しいです。 Ajaxにつきましては、私の知識も環境も整っていませんので すぐに対応ということはできなそうです。 回答ありがとうございました。

  • Ikonos00
  • ベストアンサー率28% (86/302)
回答No.4

反則かもしれませんが。 document.referrer用のフォームを作って、 TARGETを指定して、 BODYのonloadでログ書出しphpに飛ばす。(別ウインドウが開く) で、開いたウインドウは、onloadで閉じる。 …見た目が汚くなります。

wipe
質問者

お礼

おはようございます。 別ページで処理をするのであれば、回答いただいた方法で出来そうですね。 別ウィンドウを開いた方が良いのか、index→ログ書き出し→indexに戻るのが良いのかは 体裁的な問題なので... リンク元の取得以外はうまくいっているのでdocument.referrerだけに index.php→access.php→index.phpとするのが納得いかないでいました。 ページ1つで処理をしようとこだわっていましたが、 出来なそうなことが分かったので納得しました。 1ページで処理したかったので、PHPのgetenv[HTTP_REFERER]で情報を取得できるようにするか Javascriptで処理するかを悩んでいたのですが、回答を見る限りその考え方が柔軟でないことがわかりました。 他にも方法がないか検討してみます。 回答ありがとうございました。

回答No.3

$_SERVER['HTTP_REFERER']では駄目でしたか。 PHPに渡す場合にはいくつかの方法が考えられますが、JavaScriptはクライアント側で初めて実行されるので、同じスクリプトを使ってサーバサイドで取得するのは無理だと思います。 JavaScriptのアクセスカウンターのようにJavaScriptを設置し、別スクリプトで取得すれば良いと思います。 例えば <script language="JavaScript"> <!-- document.write("<img src='http://www.hogehoge.com/access.php?ref="); document.write(document.referrer+"&pname="); document.write(document.title+"&puri="); document.write(document.URL+"' />"); // --> </script> としておいて、access.phpで $referer = $_GET[ref]; $page_title = $_GET[pname]; $page_uri = $_GET[puri]; で取得出来ると思います。 この場合、JavaScriptを書き込んだ全てのページをaccess.phpで一括管理が出来るメリットもあります。

wipe
質問者

お礼

おはようございます。 回答ありがとうございます。 回答いただいた方法で出来そうです。 やはりページを2つにしないといけなそうですね。 リンク元の取得以外はうまくいっているのでdocument.referrerだけに index.php→access.php→index.phpとするのが納得いかないでいました。 ページ1つで処理をしようとこだわっていましたが、 出来なそうなことが分かったので納得しました。 他にも方法がないか検討してみますが、こちらの案を参考にさせてもらいます。。 ありがとうございました。

回答No.2

wipeさん、こんにちは。 $_SERVER[HTTP_REFERER]により、前ページのアドレスを取得できます。 ただし、マニュアルにもあるとおり、信用できる情報ではありません。 http://jp.php.net/manual/ja/reserved.variables.php#reserved.variables.server ログ保存というのが実際どのようなものなのかが分かりませんが、 私ならセッションを使います。 例えば・・・ 1.Aページ   現在のページのアドレスをセッションに保存 2.AページからBページに遷移 3.Bページ   セッションに保存されたアドレス(Aページ)をログに書き込む といった方法です。

wipe
質問者

補足

回答ありがとうございます。 下の方と同じ返答になりますが、下の4つで確認し取得できないという状況でした。  getenv[HTTP_REFERER]  getenv[QUERY_STRING ]  $_SERVER[HTTP_REFERER]  $_SERVER[QUERY_STRING ] ログの保存は、アドレス、時間、リンクURLなどをデータベースもしくはテキストファイルに保存するというものです。 サイトのトップページのログを保存したいと思っています。説明でいうAページは外部のサイトになってしまいます。 現在のトップページがBページになるように、変更すればできそうですが、あまり一般的ではない感じがするのでトップベージアドレスは変えたくないという気持ちがあります。このような変更はよく行われることなのでしょうか。 経験の未熟なものですが、ご指導お願いいたします。 よろしくお願いします。

  • Ikonos00
  • ベストアンサー率28% (86/302)
回答No.1

ご要望には添えないですが…。 $_SERVER[HTTP_REFERER] では、取得できませんか?

wipe
質問者

補足

回答ありがとうございます。 下の4つで確認したのですが、同じ状況でした。  getenv[HTTP_REFERER]  getenv[QUERY_STRING ]  $_SERVER[HTTP_REFERER]  $_SERVER[QUERY_STRING ] またファイアウォールOFF(ノートン)ですべて見えました。 原因は分かりません。 そこから調べるべきでしょうか? 解決の指針がありましたら、よろしくお願いいたします。

関連するQ&A

  • JavaScriptの値をPHPで取得

    こんにちわ。よろしくお願いします。 いま、JavaScriptで取得した値を同一ページ内でPHPの変数に入れることはできないでしょうか? 例えば <SCRIPT language="JavaScript"> <!-- document.write(document.referrer); // --> </SCRIPT> というのがあったとして これの値をPHPの変数に入れることができればなぁっと考えています。 自分的にには無理っぽいかなって思っているのですが、 もしかしたらなにか方法があるかもしれないと思い 質問させていただきました。 なにか方法がわかる方がいらっしゃいましたらアドバイスお願いします。

    • ベストアンサー
    • PHP
  • javascriptとPHPを用いた自作アクセス解析について

    表題の件について教えて下さい。 まず、概要を申しますと、販売サイトにおいて コンバージョン(注文メール)した際に、 1.どこから来たのか(リスティング・検索エンジン・他サイトからのリンク等) 2.注文した金額 3.その他ユーザー変数 を記録したく、自作アクセス解析を作ろうと考えております。 方法としてはjavascriptとPHPを使用してユーザー変数やアクセス履歴を データベースに格納する事を考えております。 ここで試した方法なのですが、 まず、HTMLファイル内(index.htmlとします)には下記記述を書きます。 <script type="text/javascript" src="test.php"></script> このページにアクセスが合った場合、test.phpが実行されますが 動きとしては$_SERVER["~"]にて取得できるサーバー環境変数を MySQLのDBに格納するようにしております。 しかしながら、test.php内にてリファラ値が格納された $_SERVER["HTTP_REFERER"]を参照すると、 本来であれば、リンク元のURLが拾えるはずですが なぜかtest.phpの実行元であるHTMLファイルのパス(index.html) を拾ってしまいます。 またどこからindex.htmlにリンクしても、やはりindex.htmlを 拾ってしまいます。 恐らく、$_SERVER["HTTP_REFERER"]にリファラ値が記録される タイミングの問題だと考えておりますが、 例えばここで、index.htmlで読み込むプログラムをPHPではなく javascript(.jsファイル)を用いて、 リファラ値(document.referer)を拾うと、正常にリンク元の値が拾えました。 scriptタグにて読み込むプログラムにおいて PHP・javascriptでは取得できる情報に差があるのでしょうか? また、目的の事を達成する場合は具体的にどのような手法が 望ましいでしょうか。

    • ベストアンサー
    • PHP
  • PHPの変数をJavaScriptに渡したい

    PHPの中にJavaScritの確認ダイアログを表示しています。 PHPの変数をJavaScript内でも使いたいのですが、どのようにすればよいのでしょうか? <?php $number=$_POST["number"]; if(isset($_POST["delete"])) { //選択したデータの削除 //削除の確認 print("<script language='JavaScript'>"); print("res=confirm('削除してもよいですか');"); print("if(res==false) location.href='delete.php?number=$number';"); print("</script>"); ?> また、<?php  ?>内でJavaScriptを使っているのでprint文でJavaScript文を書いていますが、あまりスマートではありません。 これ以外の記述方法はあるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • JavaScriptのwindow.openでリファラーが取得できない。

    <SCRIPT language="JavaScript"> <!-- function OpenWin(){ window.open("sample.cgi,"new","width=500,height=250"); } // --> <A href="#" onClick="OpenWin()">オープン</a> 上のようにsample.htmlのページ内にwindow.openのJavaScriptを書いています。 sample.cgi内に$ENV{'HTTP_REFERER'}を埋め込んでいるのですがリファラーが取得できません。 window.openの場合はリファラーは取得できないのでしょうか?

    • ベストアンサー
    • CGI
  • javascriptとphpの変数のやり取り

    ある該当ページ(mtの検索結果ページ)が拡張子をphpにできず、 <script src=hogehoge.php></script>でphpファイルを読み込んで、 実行したいと思います。 phpを使用している理由はある変数を取得したいのですが、 今回は関係ないので割愛します。 ■以下ソース ・該当ページ(mt-search.cgi) <html> <head> <title>hoge</title> <script type="text/javascript" src="/hogehoge.php"></script> </head> <body> <script> document.write("<p>"+str+"</p>"); </script> </body> </html> ・phpファイル(hogehoge.php) <?php if(test == test){ $str = "成功" }else{ $str = "失敗"; } ?> <script type="text/javascript"> <!-- var str= "<?php echo $str?>"; --> </script> このようにしているのですが、 うまく出力されません。 php側の出力はうまくいっているようなのですが、 ブラウザ側の方でちゃんと変数がわたっていないようです。 画面は真っ白です。 ご教授お願いいたします。

  • PHPの文字列変数をJavaScriptのalertで表示させたい

    <?php  $mes = 123; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> ↑のコードを実行すると123というメッセージボックスが表示されます。 <?php  $mes = "aaa"; print<<<EOF  <script Language="JavaScript">  <!--   JavaScript:alert( $mes );  //-->  </script> EOF; ?> しかしこのように数値変数でははく文字列変数を渡すと表示できません。 JavaScriptにPHPの文字列変数を受け渡すことはできるのでしょうか?

    • ベストアンサー
    • PHP
  • javascriptの変数をPHPの変数で受ける

    下記のようなjavascript において、グローバル変数clicked の値を PHPの変数$clickedで受けたいのですが、どうすれば受け取れるでしょうか? var_dump()してみると、undefinedや、NULLと表示されます。 要は、カレンダーの<td>要素をクリックしたときの日にちの番号を PHPの変数で受けたいのです。 echo '<tr id="calheader" bgcolor="#ffffcc">'; for($i=1; $i<=7; $i++){ echo '<td valign="top" align="center" class="smallText" id="'.$i.'" onclick="pusharea(this);">'.$i.'</td>'; <script language="javascript"> <!-- var clicked; // グローバル変数 function pusharea(obj){ clicked = obj.id; } // --> </script> </head> ----------------------------------------------- <script language="javascript"> alert(clicked); // <?php echo $clicked;?>=clicked; </script> <?php var_dump($clicked); echo '<tr>'; for($i=1; $i<=7; $i++){ /*if($i===$clicked)*/ echo '<td valign="top" height="50" align="center" class="smallText">'.$user.'</td>'; //else echo '<td valign="top" class="smallText">&nbsp;</td>'; } echo '</tr>';

  • javascriptで取得したurlの情報をGETで送る方法がわかりません。

    現在のURLをjavascriptで取得し、その取得した情報を送る方法を教えてください。 以下のソースでURLを取得しgetで送るにはどのようにすればよいのでしょうか? <scripttype="text/javascript"language="javascript"> var url = document.write(document.URL); </script> <a href="./submit.php?document.write(url)">新規登録</a> 以上よろしくお願いします。

  • javascriptからphpの呼び出し

    javascriptの初心者です。宜しくお願い致します。 php5で、開発していますが、javascriptからphpを呼んで、 結果をリアルタイムに画面に表示させる方法が分かりません。 【やりたい事】 1.画面上に、現在の日時を表示させる。 2.5秒毎に、phpを呼び出し(DB接続し結果を取得)して、   その結果を、画面上に表示させる。   ※DBへの接続は、javascript内ではやりたくありません。 下記に、現在時刻を表示するjavascriptがありますが、 この中で、5秒毎に、phpを呼び出したいのですが、 出来るのでしょうか? </head> <script language="Javascript"> <!-- function time_disp() { d = new Date(); document.all.nowdate.value = d.toLocaleString(); window.setTimeout("time_disp()", 1000); } --> </script> <body onload="time_disp();"> <input type="text" name="nowdate" size="30" readonly> <input type="text" name="data1" readonly> ←phpから取得した値1 <input type="text" name="data2" readonly> ←phpから取得した値2 </body>

  • PHPの配列をjavascriptへ渡したい

    PHPの配列をjavascriptの配列に渡したいのですがやり方がわかりません。 変数の渡し方ならわかるのですが配列はどう渡せばいいのでしょうか? for文を使って渡せばいいと思うんですがどうやればいいか分かりません。 <?php $filedata=file("data.txt");//javascriptに渡したい配列 ?> <script language="javascript"> var a=new Array();//PHPの配列をこの配列に入れたい </script> 何方か教えてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう