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

satoshi@try-square.co.jp satoshi @ try-square.co.jp
2006年 2月 20日 (月) 10:02:37 JST


藤本です。

PHPで排他制御することは出来そうですが。
回避方法の前に、原因を特定するのが先じゃないでしょうか。

以上

FELLOW 大山 <ohyama @ fellow-inc.co.jp>さん:
> 大山と申します。
> 
> header関数やreadfile関数を実行するとその実行したページが
> 2〜3回実行されてしまいます。
> 回避方法をどなたかご存知ありませんか?
> 
> サーバーの構成
> Windows 2003 Server
> IIS 6.0
> PHP 4.4.2
> 
> パラメータを含むtest.phpを実行しています。
> 例)test.php?para1=xx&para2=xx&para3=xx
> test.phpの中でcomプログラムを実行して、WAVファイルを出力し、
> それをダウンロードさせて再生させるようなプログラムを
> 作成しています。
> その時、クライアントから一度、test.php?para1=xx&para2=xx&para3=xxを
> 実行しても実際は、サーバー側で2〜3回実行されてしまいます。
> 
> 以下ソースを抜粋
> 
> <?php
> session_start();
> if (isset($_SESSION['count'])) {
>   if ($_SESSION['count'] >= 99) {
>     $_SESSION['count'] = 1;
>   } else {
>     $_SESSION['count'] ++;
>   }
> } else {
>   $_SESSION['count'] = 1;
> }
> 
> $fname = "./tts_" . $_SESSION['count'] . ".wav";
> 
> // ここからWindows COMのプログラム
> // ここで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($fname);
> }
> ?>
> 
> このソースを一度実行すると$_SESSION['count'] が2〜3増えています。
> また当然ですがunlink($fname);しないとWAVファイルも2〜3出来ています。
> いろいろ試した結果、header関数やreadfile関数を一度でも実行すると
> 現象が発生します。
> 良く似た現象が[PHP-jp 11886]にありましたがこちらの方は
> $_SESSIONを使用すると同様の現象になっていたようですが
> 私の場合は$_SESSIONは問題ありませんでした。
> 
> 分かりづらいメールではありますが、
> 宜しくお願い致します。
> 
> 
> 
> _______________________________________________
> 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



----
藤本 悟司

株式会社トライスクエア
〒104-0045 東京都中央区築地3-5-13北村ビル2F
TEL: 03-5148-3345 / FAX: 03-5148-3346
Mobile: 070-6668-4644
E-Mail: satoshi @ try-square.co.jp
WEB: http://www.try-square.co.jp/

Key fingerprint = 95F2 6B3D 0B8C 374A 5E67  CA02 F28F 703A C1A9 8346


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