open(FP, "exec ./authcheck at=11000 cp=00120 sc=40001 tu=http://xxxxxxxx/xxtest1/cgi-bin/membertop.cgi
nu=http://xxxxxxxx/xxtest1/entrace.html lt=300 |");
$input=<FP>;
if( (index $input, "Location:") == 0 ) {
close(FP);
print "$input¥n";
exit;
} elsif( (index $input, "uid" ) == 0 ) {
close(FP);
$param = $ENV{'QUERY_STRING'};
@input = split(/&/, $input);
foreach $i (0 .. $#input) {
$input[$i] =~ s/¥+/ /g;
$input[$i] =~ s/%(..)/pack("c", hex($1))/ge;
($key1, $value1) = split(/=/, $input[$i], 2);
$input{$key1} = $value1;
}
$uid = $input{'uid'};
$isp = $input{'isp'};
$asts = $input{'asts'};
print "Content-type: text/html;charset=Shift_JIS¥n¥n";
print "<html>¥n";
print "<head><meta http-equiv=Cache-Control content=no-cache />¥n";
print "<title>会員認証</title></head>¥n";
print "<body bgcolor=ffffff link=ff0000 alink=00ff00 vlink=0000ff>¥n";
print "認証種別:11000<br>¥n";
print "端末: 対応端末 <br>¥n";
print "認証パターン:会員認証<br>¥n";
print "退会時処理:提供不可<br>¥n";
print "課金ログ:なし<br>¥n";
print "告知画面:なし<br>¥n";
print "<a href=http://xxxxxxxx/xxtest1/cgi-bin/member01.cgi?$param>次へ¥n";
print "</body>¥n";
print "</html>¥n";
exit;
}
print
一番参考になる回答をいただけた方に200ポイント差し上げます
動作未確認のものですが、よろしければ・・・
if (FALSE === $last_line = system("./authcheck at=11000 cp=00120 sc=40001 tu=http://xxxxxxxx/xxtest1/cgi-bin/membertop.cgi nu=http://xxxxxxxx/xxtest1/entrace.html lt=300", $input)){ echo "Error!! 外部プログラムから値が返ってこない。 または、外部プログラムの呼び出し失敗。<br />\n"; }else{ if(strpos($input,"Location:") == 0){ echo "$input\n"; exit; }elseif(strpos($input,"uid") == 0){ $param = $_SERVER["QUERY_STRING"]; $input_array = explode("&", $input); $param_array = array(); $c = count($_array) - 1; foreach $i (0 .. $c) { list($key,$value) = explode('=',$input_array[$i],2); }elseif($key=="uid"){ $uid = urldecode($value); }elseif($key=="isp"){ $isp = urldecode($value); }elseif($key=="asts"){ $asts = urldecode($value); } } echo "Content-type: text/html;charset=Shift_JIS\n\n"; echo "<html>\n"; echo "<head><meta http-equiv=Cache-Control content=no-cache />\n"; echo "<title>会員認証</title></head>\n"; echo "<body bgcolor=ffffff link=ff0000 alink=00ff00 vlink=0000ff>\n"; echo "認証種別:11000<br>\n"; echo "端末: 対応端末 <br>\n"; echo "認証パターン:会員認証<br>\n"; echo "退会時処理:提供不可<br>\n"; echo "課金ログ:なし<br>\n"; echo "告知画面:なし<br>\n"; echo "<a href=http://xxxxxxxx/xxtest1/cgi-bin/member01.cgi?$param>次へ\n"; echo "</body>\n"; echo "</html>\n"; exit; } }
違うんですね。
PHPってPerlのコードそのまま通ると思ってたけど、違うんですね。
最近のご活躍頼もしい限りで、楽しく拝見させていただいてますが
このような文を見ると貴殿のスキルを疑いたくなるのは私だけでは無いはず・・・
質問者さんの立場を考える事ができて、良い回答もできる方だと思いますので
もう少し発言にお気をつけになったほうがよろしいかと思います。
Perlとphp、ステートメントは似通ってますが関数は違うし、
何より変数の記述が違うという最大の違いがありますので
今回のように非常にシンプルな構造でも
時には全面書き直しに近い状態になる場合もあります。
(今回分はさほど大きな変更はありませんけどね)
■jayz様へ
回答は拒否られている(回答数の多い者はほぼ全滅でしょう)し
authcheck という別プログラムの挙動が判らないので
ヒントだけ書いておきますが
・変数の書き方が違う
・関数の引数が一部違う。
・環境変数の取得方法が違う
といった点を見直せば修正は簡単でしょう。
質問文は「perlで書かれたスクリプトをphpで書き直す」のかとも読み取れますけど
素直に、perlで書かれたスクリプトをphpに焼きなおすって意味で良いのですよね?
ご返答ありがとうございます、なにぶん勉強不足なためいただいたヒントですぐに解決・・・というわけにはいきませんが道標を示していただいてありがとうございます。
私の質問の意図としては上記のperlのスクリプトと同じことをphpで表現するにはどう記載したらよいのかということです
あと気になる点がひとつ・・・kn1967さんのおっしゃる「回答が拒否られている」というのは私の質問に対して回答ができなくなっているということでしょうか?もしそうであれば修正したいと思います。(回答できないようにしているつもりはないのですが・・・何か設定が間違ってる?!)
動作未確認のもので申し訳ありませんがphpで書いてみましたので
よろしければご確認ください。
ただ、一部欠き間違えてるかもしれません。
$param_array = array();
という行があれば無視してください。
}elseif($key=="uid"){ $uid = urldecode($value);
}elseif($key=="isp"){ $isp = urldecode($value);
}elseif($key=="asts"){ $asts = urldecode($value);
}
は
if($key=="uid"){ $uid = urldecode($value);
}elseif($key=="isp"){ $isp = urldecode($value);
}elseif($key=="asts"){ $asts = urldecode($value);
}
との間違いです。
連想配列に格納しようかと思ったのですが3つくらいならこれでいいかって書き直したのが原因でゴミが残りました。
「動作未確認などいらんわ!!」って事ならば空けずに他の方の回答をお待ちください。
以上、とりいそぎ訂正まで。。。
$c = count($_array) - 1;
foreach $i (0 .. $c) {
は
$c = count($input_array);
for($i=0;$i<$c;$i++){
です。
あと心配なのは3行目
lt=300"
の部分でパイプを外してあること。
もしかしたら必要だったかも???