• 締切済み

headerに乱数を仕込みたい

ランダムに画像を出力するプログラムを書いています。 <img src='test.php' border=0 /> test.php header("Content-Type: image/gif"); header("Expires: Thu, 01 Dec 1994 16:00:00 GMT"); header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); 現在は上記のようにheaderが書いてあり、1秒ズレれば別ページとして判断されるようになっているようです。 しかし、 <img src='test.php' border=0 /> <img src='test.php' border=0 /> <img src='test.php' border=0 /> このように、3つHTML上に記述した場合、1秒以内で読み込みが来てしまい同一ファイルと判断される為なのか、全て同じ画像が出てしまいます。 phpが回ればログを書くようにしてみましたが やはり1回しか回っていないようです。 そこで、headerに乱数など必ず変わる値を差し込んで、 別物として読み込ませるような方法はないでしょうか。 もちろん、 <img src='test.php?i=1' border=0 /> <img src='test.php?i=2' border=0 /> <img src='test.php?i=3' border=0 /> このように、HTML側でURLを変えれば別物として読まれますが、この方法はNGです。 あくまでtest.phpのプログラム側でなんとかしたいのです。 宜しくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数0

みんなの回答

  • thezen5
  • ベストアンサー率84% (27/32)
回答No.3

2です。 test.phpのまま3回読み込めば同じ内容が出る可能性が高いですね。すいません。 ヘッダを300番台で転送すればtest.phpだけで行けるかもしれませんね。 本来は1さんも言ってるようにajax等javascriptで処理すべきだと思いますが。

  • thezen5
  • ベストアンサー率84% (27/32)
回答No.2

test.phpの方で何からソースを出力してるのかわかりませんが、ファイル名の配列を作ってrandom()など使って出力すればいい事じゃないでしょうか?

  • t_ohta
  • ベストアンサー率38% (5085/13293)
回答No.1

ブラウザが行う処理の問題なのでtest.phpのプログラム側だけではどうにもなりません。 ブラウザは同じURLなので同一のものと判断して、新たに読み込みを行いません。 test.php?i=1 のようなURLにすることの問題は何でしょうか? ソースの表現上の問題であればAjaxを使って読み込むなど対処方法は考えられると思います。

関連するQ&A

  • headerのマニュアルを見ると

    <?php // 日付が過去 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 常に修正されている header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // HTTP/1.1 header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); // HTTP/1.0 header("Pragma: no-cache"); ?> という記述がありますが http1.0とhttp1.0の両方の記述をしなければならないのでしょうか? またPHPページの記述にはすべてこのヘッダをつけるべきなのでしょうか?

    • ベストアンサー
    • PHP
  • ブラウザのページキャッシュ機能を抑制したい。

    いつもお世話になっております。 PHP5.2.5 Firefox3.5.2 ブラウザのページキャッシュをPHPスクリプトにて抑制したいのですが、 PHPマニュアルに書かれていた方法ではダメでした。 その方法は以下の通り。 ---------------- <?php // 日付が過去 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // 常に修正されている header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // HTTP/1.1 header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); // HTTP/1.0 header("Pragma: no-cache"); ?> -------------------------- これではダメでしたので、 毎回、Firefoxの 「ツール」→「オプション」→「ネットワーク(タブ)」 →「今すぐ消去(ボタン)」 という方法で、キャッシュされてしまっているデータを消去して、 最新の状態(変更が反映されたかどうか)を確認しています。 毎回、キャッシュをブラウザ側で消すのは面倒なので、 できれば、PHPスクリプト側で、キャッシュを無効とするような設定に したいと思っています。 PHPマニュアルの方法では無理だったのは、 私の使用しているブラウザに原因があると考えられますでしょうか? ページキャッシュ抑制を、 できればファイル単位で行いたいと考えています。 どなたかアドバイスをお願いいたします。

    • ベストアンサー
    • PHP
  • header("Location: ")でページ移動しない;

    <?php $image_no = $_GET['image_no']; if($image_no == ""){ $image_no = 0; } if($image_no == 10){ header("Location: http://www.test/i/"); } ?> <img src="../img/test<?php echo $image_no;?>.jpg"> <?php echo $image_no;?> <br/> <a href="test.php?image_no=<?php echo $image_no + 1;?>">次へ</a> こんなカンジで、『次へ』のリンクをクリックすると、画像が切り替わるものを書いたんですが、$image_no == 10になったら、別のページへジャンプしたいんですが、うまくいきません。 10回目でエラーになってしまいます。 どうやったらうまく違うページへジャンプできるのでしょうか?

    • ベストアンサー
    • PHP
  • PHPとAPACHEのエラー「Warning: Cannot modify header information」について

    こんばんわ、 現在APACHEとPHPを使用してWEBを作成しています。 PHPLIBを使用して認証頁を作成しようとしているのですが、そのさいに下記のエラーがでます。 Warning: Cannot modify header information - headers already sent by (output started at /home/XXXXXXXXXX/include/login.inc:14) in /usr/local/apache/phplib-7.4/php/session.inc on line 479, 480, 481, 482, 483 です。 ちなみに/home/XXXXXXXXXX/include/login.inc:14には、 1 <?php 2 include ("prepend.php"); 3 page_open( 4 array("sess" => "Example_Session", 5 "auth" => "Example_auth", 6 "perm" => "Example_Perm", 7 "user" => "Example_User")); 8 ?> 9 10 11 12 13 としかなく、14行目はありません。 prepend.phpとsession.incはデータベースをpgslにかえた以外はなにもしておりません。 478 default: 479 header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 480 header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 481 header("Cache-Control: no-cache"); 482 header("Cache-Control: post-check=0, pre-check=0", false); 483 header("Pragma: no-cache"); 484 break; となっています。 以前までは、prepend.phpのみを.htaccessのauto_prepend_fileに指定していましたが、その部分をこのlogin.incに指定しなおしただけでこのエラーがでました。 なにがわるいのかよく解りません。なにの設定がわるいのでしょうか。 初歩的な質問ですが、宜しくお願いします。

  • キャッシュ(?)の消去について。

    <?php //$aはurlの配列です。 foreach($a as $v){ $imgNum = str_pad($count, 5, '0', STR_PAD_LEFT); $imgURL = "img/$imgNum.jpg"; if ( false == @file($imgURL) ){ printf("<a href=\"%s\"><img src=\"img/none.jpg\" /></a>\n", chop($v, "\n")); } else { printf("<a href=\"%s\"><img src=\"$imgURL\" /></a></li>\n", chop($v, "\n")); } //以下のようなものを含めたり。 $imgURL = NULL; @unlink($imgURL); clearstatcache(); } /* php header("pragma: no-cache"); header("cache-control: no-cache"); header("expires: 0"); html <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> .htaccess <Files ~ "\.(html|php|jpe?g|gif|png)$"> Header set Pragma no-cache Header set Cache-Control no-cache </Files> 上記3つも含めていますが、イメージの出力にあたるif文で分岐してくれません。 あきらかにfile関数に対応するjpgはないのですが。 ブラウザにキャッシュは記憶しないよう設定しています。 色々考えましたが、停止してしまいました。 ご回答お待ちしております。 */

    • 締切済み
    • PHP
  • Headerが送信されない!?

    Apache/php初心者です。 GDを使った携帯用phpを作っています。 phpで出力したHTML側で次のような記述をしています。 <img src="PutImg.php?ImgID=35051" width="100" height="100"> PutImg.phpで header( "Content-type: image/jpeg" ); imagejpeg ( $img ); と処理しています。 携帯シミュレータで確認すると ローカルの「Ap2+php4.4.2/win版」では Content-Type: image/gif となり画像が表示されます。 レンタル・サーバの「Ap+php4.4.2/Linux版」では Content-Type: text/html となり画像が表示されません。 まるでheader()が無視された感じです。 同様なトラブルを経験された方は居ませんか? どこら辺をチェックしたら解決するのでしょうか? 宜しくご教授ください。

    • ベストアンサー
    • PHP
  • PHPのheaderの「一度に複数のヘッダを送信」とは?

    VBAやフォートランは我流で経験してますが、PHP初心者です。 ご教示願います。 「PHP マニュアル」のサイトでheader関数の説明で、 http://jp.php.net/manual/ja/function.header.php 次のような説明を見つけました。 「4.4.2 および 5.1.2 この関数は一度に複数のヘッダを送信できないようになりました。 これは、ヘッダインジェクション攻撃への対策です。」 とありますが、 「一度に複数のヘッダを送信」とはどういうことでしょうか? 同じページの例に、 <?php $last_modified_time = filemtime($file); $etag = md5_file($file); header("Last-Modified: ".gmdate("D, d M Y H:i:s", $last_modified_time)." GMT"); header("Etag: $etag"); if・・・中略・・・} ?> とありますが、 この2つの「header」は「一度に複数のヘッダを送信」にはあたらないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ブラウザの戻るができないようにしたい

    ページ内はHTMLファイルですが、そのページのiframe内にperlで動的ページを表示させています。 クリック自体はifream内の動的ページですが、ページのキャッシュが残っているらしく、ブラウザの戻るが有効になります。 戻るができないようにしたいのですが何か良い方法はありますか? 以下、効果はありませんでした。 ファイル1 test.html <html> <head> <title>HTML</title> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="Fri, 31 Dec 2004 23:59:59 GMT"> </head> <body> <ifream src="test.cgi"></ifream> </body> </html> ファイル2 test.cgi print "Content-type: text/html\n"; print "Pragma: no-cache\n"; print "Cache-Control: no-cache\n"; print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n"; print <<EOT; <html> <head> <title>CGI</title> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Expires" content="Fri, 31 Dec 2004 23:59:59 GMT"> </head> <body> <a href="test.cgi">sample</a> </body> </html> EOT exit;

    • ベストアンサー
    • Perl
  • キャッシュ無効の状態で、セッション変数への影響は?

    こんにちわ。いつもお世話になってます。 現在会員制のホームページをPHPで制作中です。 IDやPASS等の情報をDB(MySQL)に格納し、ログイン時にDBにアクセスして、照合が出来たら会員である情報をセッション変数に保存して会員用ページを渡り歩く、といったものをイメージしています。 ですが、一つ困ったことが。 会員用コンテンツの中に、掲示板のようなものがあるのですが、投稿した直後に限り、自分の書き込みが反映されてないように表示されるのです。 (form actionは$_SERVER['PHP_SELF']を指定。同じページ内の上部の方で$_POSTを受け取って処理。処理した後はそのまま記事表示処理に移行。) 多分、キャッシュされているからこの様な動作になると思うのですが・・・。 投稿した後に、サイドに用意されているメニューバーから同じページにアクセスすると投稿が反映されて表示されます。 そこで、キャッシュさせない様に、PHPファイルの最上部で header("Content-Type: text/html; charset=Shift_JIS"); header("Expires: Thu, 01 Dec 1994 16:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-cache,must-revalidate"); header("Cache-Control: post-check=0,pre-check=0",false); header("Pragma: no-cache"); を加え、キャッシュさせないように?しました。 実行してみたところ、投稿した直後でも無事に最新の状態を表示してくれるようになりました。 ここで本題です(冗長でゴメンナサイ・・・) 上記のコードでキャッシュを無効にした状態にしても、セッション変数は無事に動作してくれるのでしょうか? ローカルテストではセッション変数は無事に保持してくれるのですが、キャッシュやセッションに関して造詣が浅く、「キャッシュは無効にしてるけどセッション変数はキャッシュする」という矛盾した動作を指定している事に不安を感じます。 ルール上問題があるところがあれば指摘お願いいたします。 php.iniは以下の様に指定しています。 session.cache_limiter private_no_expire session.cache_expire 9999 session.auto_start off

    • 締切済み
    • PHP
  • HEADERについて

    無知でお恥ずかしいのですが、PHPで出力する際 header("Content-Type: text/html;charset=EUC-JP"); などと最初にヘッダーを出力すると思うのですが、例えばtest.phpが以下のようになっていた場合でもPHPでヘッダーを出力する必要があるのでしょうか? test.php ※1<?php header("Content-Type: text/html;charset=EUC-JP"); ?> <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> <TITLE></TITLE></HEAD> <BODY> TEST <?php echo $test; ?> </BODY> </HTML> 参考書などを見てみると「全ての出力の前に記述する必要がある」と書いてあるだけで、書かずとも正常に表示されますし、仮に文字化けしても <META HTTP-EQUIV="Content-Type" CONTENT="TEXT/HTML; CHARSET=EUC-JP"> と追加すれば文字化けも解決するので、疑問は感じつつも思い出したときにPHPにもヘッダを記述するようにしていたのですが、少しづつPHPを勉強しやれる事が増えてくる内に、記述してあるものと記述して無いものが混在してきて気持ち悪く感じてきました。 皆さんはどのようにされていますか? ※他サイトで配布されているPHPスクリプトなども見てみたのですが、毎回記述している方、一切記述していない方それぞれでした。 あと、全く違う質問ですが、MYSQL接続中にエラー処理でexit;する場合、exit;する前にMYSQL接続を切断する必要ってあるのでしょうか?

    • ベストアンサー
    • PHP