[PHP-users 2228] Re: phpからcgiに処理を渡す方法

Osamu Shigematsu php-users@php.gr.jp
Tue, 25 Sep 2001 14:25:23 +0900


重松です。

一言二言のほとんど内容のないやりとりを繰り返すと、だらだらとスレッドが続いて
しまいます。今回の質問は、単なる typo とか、勘違いとか、そういう次元の問題で
はないかと推測され、まこさんのデバッグにつきあわされている割に、本人の自助努
力が全く足りない、「うまく動かないからバグとってよ」という感じが強くします。

みなさん、再三、おっしゃっているように、もう少しご自身でご自身の問題を整理し
てみてはいかがですか? 送信する前に、せめてもう一度読み返して、十分情報が記載
されているのか確認してみてください。

良い回答を得るには、良い質問をしなければなりません。

とりあえず、

> まこ@はままつです。ブラウザから試したところ、Internal Server Errorが表
> 示されました。phpからやっていたときは、なにも処理を行わず終了してしまっ
> ていました。

では、情報量は限りなく 0 に近いですから。

たとえば、

<?php
if($a == $b){
    header("Location:../cgi-bin/testdrv.cgi?total=$gokei&tori_id=$tori_id");
}
?>

というコードですが、まずは、ちゃんとリダイレクトしているのか、調べる必要があ
ります。
# : -- endif という書き方は好きでないので書き換えました。:-P

たとえば、http:// から始まるものに換えてみたら、という提案は、
もともと絶対パスで指定する必要があるので、ちゃんとリダイレクトできているか、
試してみてください、という意味でもあるんです。

それ以前に、論理式が真かどうか、真であることを期待するならば、

<?php
if($a == $b){
    header("Location:../cgi-bin/testdrv.cgi?total=$gokei&tori_id=$tori_id");
}else{
    die("a = $a b = $b");
}
?>

のようにして、確実に header() が実行されているか調べるべきですし、
実行されないならば、何故 $a と $b が == で等しくないのか、
値を調べてみるコードを挟むべきです。
つまり、どういう順番でコードが実行されているか、トレースして欲しいのです。

また、header() に渡す内容も、

<?php
if($a == $b){
    $url = "../cgi-bin/testdrv.cgi?total=$gokei&tori_id=$tori_id";
    header("Location: $url");
    //               ^ ここのスペースって要らないの?
}else{
    die("a = $a b = $b");
}
?>

のように変数に入れ、表示してみるなどして、期待の値が確かに渡されているか、
確認してみるべきでしょう。

また、TCP ストリーム (サーバとブラウザのやりとりの様子) をキャプチャ (ダン
プ) することができるソフトもあります。具体的にどういうデータが流れているのか、
追いかけることができれば、http だとかの理解も深まります。
また、今回はこういう場での質問を行う際にも、実際にデータの流れを示すことがで
きるようになり、問題解決が容易になります。
こちらも挑戦してみてください。
# 私は MacOS ですので、Interarchy というソフトを使っています。

いずれにしても、状況を他人にキチンと説明できるように整理してみてください。
案外整理していると、解決することも多々あると思いますから。

このとき、

    http://www.geocities.co.jp/SiliconValley/5656/

にある、巻末豪華付録の質問の仕方ひな形でも使ってみてください。
便利ですよ。私も、時々使います。:-)

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp