[PHP-users 28496] Re: header やreadfileを実行するとそのページが2〜3回実行される

FELLOW 大山 ohyama @ fellow-inc.co.jp
2006年 2月 20日 (月) 16:53:19 JST


nomoto、ゆむ様

ありがとうございます。
nomoto様、session_start()はあっても無くても結果は同じです。
先程以下のようなソースで試したところ、やはり3回のアクセスがありました。
<?php
/*session_start();
if (isset($_SESSION['count'])) {
  if ($_SESSION['count'] >= 99) {
    $_SESSION['count'] = 1;
  } else {
    $_SESSION['count'] ++;
  }
} else {
  $_SESSION['count'] = 1;
}
*/
$fname = "./tts.wav";   // このファイルは予め用意したもの。

if (file_exists($fname)) {
  header("Content-Type: audio/x-ms-wma");
  header("Content-Disposition: inline; filename=$fname");
  header ("Content-Length: " . filesize($fname));
  set_time_limit(0);
  @readfile($fname);
}
//unlink($file);
?>
上記のソースでもsession_start();はしてもしなくても3回のアクセスになっていました。
下記がそのログです。

1件目
2006-02-20 07:49:10 192.168.0.99 GET /php/sapi/ttstest.php - 80 - 
192.168.0.90 
Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322) 
200 0 64

2件目
2006-02-20 07:49:10 192.168.0.99 GET /php/sapi/ttstest.php - 80 - 
192.168.0.90 Windows-Media-Player/10.00.00.3802 200 0 64

3件目
2006-02-20 07:49:10 192.168.0.99 GET /php/sapi/ttstest.php - 80 - 
192.168.0.90 
Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1;+.NET+CLR+1.1.4322) 
200 0 0

先程、藤本様にお知らせした内容のようにここでも2件目のアクセスが
Windows-Media-Playerになっていました。
1件目と3件目はIE6.0です。

ゆむ様、ブラウザは上記の通り現在IEの6.0を使用しています。
サービスパックはSP2です。

以上です。
宜しくお願い致します。

----- Original Message ----- 
From: "nomoto" <shin-1 @ ca2.so-net.ne.jp>
To: "PHP-users ML" <php-users @ php.gr.jp>
Sent: Monday, February 20, 2006 4:06 PM
Subject: [PHP-users 28493] Re: header やreadfileを実行するとそのページが2〜3回実行される


  nomotoです。

>>> いろいろ試した結果、header関数やreadfile関数を一度でも実行すると
>>> 現象が発生します。
>>という現象と食い違っています。
>これはあくまで私の作成したソース内での結果です。
>すみません、説明不足で。。。

いいえ、大山様のソース内での結果というのは分かっています。

最初から「header関数とreadfile関数を使うと・・」と言われていますが
header関数とreadfile関数だけを使った最小ソースでは再現しないわけ
ですから、大山様のソースでもheader関数とreadfile関数以外を全て
コメントアウトしたら1回しか実行されないはずです。

私の言いたかったのは、そうなるとheader関数とreadfile関数が悪い
のではなく、それ以外の部分との兼ね合いではないでしょうかという
事です。
何かと何かを同時に使う事で複合的に発生した問題ではないでしょうか。

提示された中をみるとsession_start()がありますが、
これはセッションを開始すると同時にSet-Cookieヘッダを
吐き出していたと思います。
session_start()のあとにheaderもしくはreadfileを行うと
問題が出てるのではないのでしょうか。
session_startしなかった場合も2回実行されますか?

もしくは単純にsession_startしたあとheader関数だけ行ったら
どうなりますか?Window COMの部分もごっそり削って最小ソース
を作ってみてください。
何が原因か分かるのではないでしょうか。
_______________________________________________
PHP-users mailing list  PHP-users @ php.gr.jp
http://ns1.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://www.php.gr.jp/php/novice.php3





PHP-users メーリングリストの案内