アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPでPCのローカル時刻は取得出来ますでしょうか?
現在、javascriptで取得しているのですが、これを
PHPの変数として取得出来ないか考えております。

javascriptでは下記のように取得して表示させています。

<script type="text/javascript">
var nowtime = new Date();
var hour = nowtime.getHours();
var minute = nowtime.getMinutes();
var second = nowtime.getSeconds();
if(hour < 10) { hour = "0" + hour; }
if(minute < 10) { minute = "0" + minute; }
if(second < 10) { second = "0" + second; }
document.write(hour,minute,second);
</script>

例えば現在が12時34分56秒だとしたら、javascriptで
「123456」という6ケタの数字を取得出来ます。

この「123456」を、PHPの変数として使いたいです。
($jikoku = 123456)

どなたかお知恵を拝借出来ませんでしょうか?
何卒宜しくお願い致します。

A 回答 (9件)

<!---


> フォームのメソッドをPOSTからGETに変える事で出現しなくなりました。

その発想はありませんでした。
そんな感じに作り直してみました。

> 現在はGoogle chromeだと表示が出来ないトラブルに見舞われております。

そちらの書いたソースが分かりませんので、何とも言えませんが、
以下に こちらのソースを使って 調べた結果を列記します。

・Lunascape 2.9.3
Tue Feb 23 18:29:40 UTC+0900 2010

・Chrome 4.0.249.89 (38071)
Tue Feb 23 2010 18:25:17 GMT+0900 (Japan Standard Time)

・Opera 10.10
Tue Feb 23 2010 18:25:53 GMT+0900

・IE 7
Tue Feb 23 18:25:59 UTC+0900 2010

・FireFox 3.6
Tue Feb 23 2010 18:27:07 GMT+0900

・Safari 4.0
Tue Feb 23 2010 18:27:46 GMT+0900 (“??? (?W????))

ブラウザによって、若干、返す文字列が違っているようです。
JavaScriptは ブラウザによって実装されている仕様が異なる場合がありますので、差分の吸収が面倒な事になることが多々あります。

ご参考になれば幸いです。

--->
<?
$now = $_GET[now];
$me = $_SERVER[PHP_SELF];

if ($now) {
$outD = "PC LocalTime is $now";
$time = 10000;
} else {
$time = 1;// 最初の一回目だけ1m秒でリロード
}
//----------------------------------------------------------
?>
<html>
<head>
<script type='text/javascript'>
setTimeout(load, <?= $time ?>);
function load() {
var nowtime = new Date();
document.Form02.now.value = nowtime;
document.Form02.submit();
}
</script>
</head>
<body>
<?= $outD ?>
<form name=Form02 action=<?= $me ?> method=get>
<input type=hidden name=now Value=''>
</form>
</body>
</html>
    • good
    • 0
この回答へのお礼

お返事が遅くなり申し訳ありません、
頂いたスクリプトを利用して、見事に全ての問題が解決致しました。
このスクリプトはきっと色々なシーンで利用する機会があると思うので
大事に保管しておきます。本当にありがとうございました。

お礼日時:2010/03/04 19:27

#7です。



> setTimeout(load , 5000);

5秒になってました。^^;;
10000 に 脳内変換してお読みください。

この回答への補足

ご連絡が遅くなり申し訳ございません。試行錯誤の末、何とか解決致しました。自動リロードでフォーム再送信のメッセージが出てしまう件については、フォームのメソッドをPOSTからGETに変える事で出現しなくなりました。ただ、現在はGoogle chromeだと表示が出来ないトラブルに見舞われております。何が原因か分からないのですが…

補足日時:2010/02/23 15:58
    • good
    • 1

<?/*


自動リロードって事ですので、おおかた 以下のやり方をしたと思われますが、
----- ----- ----- ----- ----- -----
setTimeout(Reload, 10000);
function Reload(){
window.location.reload();
}
----- ----- ----- ----- ----- -----
これだと、#6 のお礼に書かれている状況になります。
と言う事で、書き直してみました。

ただし、これだと、最初の10秒は 時刻は表示されず ぼーっと待つ事になります。
ちなみに、これもブラウザ閉じるまで、エンドレスです。

あと #6の補足にかかれた事は、今の俺の熱を帯びた灰色の脳では、
具体的にどうやりたいのか分かりませんでした。
*/?>
<html>
<head>
<script type='text/javascript'>
setTimeout(load , 5000);

function load() {
var nowtime = new Date();
document.Form02.now.value = nowtime;
document.Form02.submit();
// alert(nowtime);
}
</script>
</head>
<?
$now = $_POST[now];
$me = $_SERVER[PHP_SELF];

if (!$now) { $now = "今 調べてるから 10秒お待ちください"; }
print "PCのローカル時刻は $now";
?>
<body>

<form name=Form02 action=<?= $me; ?> method=post>
<input type=hidden name=now Value=''>
</form>

</body>
</html>
    • good
    • 0

#5です。



#5 で 俺が書いたものは、そちらが言う所の index.php の全文です。

<html>~</html>をコピペしてもらって、index.php と言うファイル名つけて保存すれば、動きの確認が出来る程度のものです。

$_POST[now] がなければ、最初のアクセスと判断し、<html>から数えて8行目の「 } else { 」以降を実行し、
$_POST[now] があった場合は、form から PCのローカル時刻が submit されてきたものと判断し、5行目の「 if ($now) { 」以降を実行しています。

この回答への補足

ご連絡が遅くなり誠に申し訳ございません。
無事、1ファイルで変数の取得まで辿り着く事が出来ました。
確認なのですが、このやり方の場合、変数を取得したいページにrequire_onceなどで
変数を引っ張る事は出来ず、各ファイル毎にこのスクリプトを組んでおかなければ
働きませんでしょうか?(試しに別ファイルへ「index.php」をrequire_onceして
変数を引っ張ろうと挑戦してみましたが、変数は入っておりませんでした)

いずれにせよ、bm_hiro様や他の方のアドバイスのおかげで当初の目的を達成する事が
出来ました。ありがとうございます。

補足日時:2010/02/17 15:21
    • good
    • 0
この回答へのお礼

たびたび申し訳ございません、お礼の欄なのですが質問になります。
無事、変数がゲットできて嬉しかったのですが、新しい問題が出てきました。
index.phpにて、自動リロードが掛かると、その度に「フォームデータを再送信する必要が~~~」の
メッセージが流れてしまいます。サイトの性質上、自動リロードはそのまま使いたいのですが、
この「再送信~~」のエラーメッセージを出さなくする方法はございませんでしょうか。
(ブラウザは、IE8、Firefox3ともに出てしまいます。ユーザー設定で非表示に出来ましたが
それだとユーザーの設定に依存してしまう為、なんとかこちら側で非表示の処理を行いたいです)
不可能なお話でしょうか…??

お礼日時:2010/02/17 16:11

既に出ている情報を基に具体的に書くとこうですが、下手な書き方をすると無限ループの完成なので要注意です。


えぇ、もちろん 俺は 一度 無限ループをやりましたとも。(ぁ
alert入れてるのは 深い意味はありません。
JavaScriptが返す時間も、パースするのが面倒だったので そのままにしてます。

結局、これだとリロードしてしまってるようなもんなので、重いページには向きません。

<html>
<?
$now = $_POST[now];
$me = $_SERVER[PHP_SELF];

if ($now) {
print "<body>PCのローカル時刻は $now";
} else {
print "
<head>
<script type='text/javascript'>
function load() {
var nowtime = new Date();
document.Form02.now.value = nowtime;
document.Form02.submit();
alert('test');
}
</script>
</head>
<body onLoad='load()'>
<form name=Form02 action=$me method=post>
<input type=hidden name=now Value=''>
</form>";
}
?>
</body>
</html>

この回答への補足

ご回答ありがとうございます。
ただいま、No4さんへの補足回答をさせて頂いたばかりなのですが、
私がNo4さんへコメントした補足欄の方法が、今書いて頂いたこちらの構文で
叶いますでしょうか?書いて頂いたタグは私のページの「どこに」書けば
良いものなのかが分からず…申し訳ございません…「form.html」でしょうか。

ちなみに私も先ほど無限ループに陥りました。

form.htmlにアクセスすると自動的に変数を持った状態でindex.phpを開いてくれたので、
試しに、「form.html」をrequire_onceしてみたところ、見事に無限ループへと誘われました。

補足日時:2010/02/16 22:25
    • good
    • 0

こんにちは。




いいえ。ボタンでsubmitするのをonloadイベントで行ってあげるだけです。
(ボタンをクリックするのを勝手にやるイメージ)

この回答への補足

何度もご回答ありがとうございます。
素人ながらの試行錯誤の末、「form.html」にアクセスすると、自動的に
index.phpへ飛び、index.php内で時刻データを変数として利用できるようになりました。

ただこの場合、index.phpに直接アクセスすると、form.htmlを経由していないので
当然変数を利用する事が出来ないのですが、なんとかindex.phpに直接アクセスで
変数が利用できる方法はございませんでしょうか。

根本的に、今回私が何をしたいのかと言うと、

「ユーザーのPC時計がX時10分の場合、index.phpの内容の一部を「10.txt」に書かれている
タグで表現したい」です。X時24分なら「24.txt」を、X時50分なら「50.txt」を
require_onceで引っ張ります。

ユーザーはまずindex.phpを一番最初にアクセスするので、
やはり今回は実現不可能なお話でしょうか…
やはりajaxを使わなければ無理ですかね…?

補足日時:2010/02/16 22:17
    • good
    • 0

こんにちは。



リロードしただけではsubmitかかりませんからダメだと思います。
何もして無いように見せるにはNo.2さんのAjaxってのが一番だと思います。

onloadでformをsubmitすればアクセスしてすぐに実行されると思います。

この回答への補足

ご回答ありがとうございます。
やはりajaxというのはとても便利なものなんですね…
ところで、
>onloadでformをsubmitすればアクセスしてすぐに実行されると思います。

これもajaxを使う方法でしょうか?

補足日時:2010/02/16 17:59
    • good
    • 0

場合によってはajaxで非同期に送ってしまうのも手かと。


PCのローカルタイムはセキュリティ的にはどうでもいいので
問題なく遅れるはずです

この回答への補足

ご回答誠にありがとうございます。現在、ajaxの知識は全く無い為、出来ればajax無しでの方法をお教え頂けませんでしょうか。

補足日時:2010/02/16 17:28
    • good
    • 0

こんにちは。



JavaScriptによって取得した値をサーバ上にあるphpにsubmitすれば取得できると思います。

PHPはあくまでクライアントに結果を出力するのでブラウザで実行されたJavaScriptの値には関知しません。

この回答への補足

ご回答ありがとうございます。
>JavaScriptによって取得した値をサーバ上にあるphpにsubmitすれば

これは、ユーザー側は特に何もせず、ページをリロードするだけでローカルのPC時間を
PHPを使って表示する事が可能、という事でしょうか?

補足日時:2010/02/16 17:32
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!