[PHP-users 21259]FLASH→PHP渡し後、ページreloadでPOSTデータが消える問題
SIGE
sige @ website.co.jp
2004年 4月 16日 (金) 12:01:02 JST
はじめまして。
FLASHからPHPへPOST渡しする場面での問題です。
-------------------------------------
var myLoadVars = new LoadVars();
myLoadVars.testdata = "testdata";
myLoadVars.send("http://xxxx.xx/xxx.php", "_self", "POST");
--------------------------------------
というFLASHのアクションスクリプトでCGIやPHPにデータを渡します。
受け取ったCGIやPHPはそのPOSTデータを取得して、その内容(値)を
HTML出力できます。
ここでブラウザの更新ボタンを押してリロードするとPOSTデータが消えて
しまいました。原因を調べてたら、リクエストヘッダ(環境変数)の
CONTENT_TYPE
がPOST送信時は「application/x-www-form-urlencoded」というデータが
入っているのですが、それがなくってしまってました。
CGI(Perl)の方は、フォームデータ受け取りにcgi-lib.plというライブラリ
を使っていて、
$ENV{'CONTENT_TYPE'} = 'application/x-www-form-urlencoded';
という一文を
&ReadParse(\%informs);
の前に入れれば回避できるとわかって、実際に回避できたのですが、
PHPの方は
$_SERVER['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
$_ENV['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
header("Content-type: application/x-www-form-urlencoded");
putenv("Content-type: application/x-www-form-urlencoded");
などを試してみたのですがPOSTデータは消えてしまいます。
この現象はIEだけでネスケ(ver7)では起きませんでした。
それでIEの
http://support.microsoft.com/default.aspx?scid=kb;ja-jp;831167
によるものかとも思って、「サーバー側で HTTP Keep-Alive 接続を無効」に
してみたのですが、やはりPOSTデータは消えてしまいました。
Perlの場合はフォームデータを
&ReadParse(\%informs);
をすることで初めて変数に格納されますが、PHPの場合ははじめから$_POSTという
グローバル変数に入っているのでやりかたがわかりません。
できれば、
$_SERVER['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
としてグローバル変数をスクリプト上で設定して環境を変えてから、$_POSTを再
設定したいのですが、そのようなことは可能でしょうか。
しげ
PHP-users メーリングリストの案内