プロが教える店舗&オフィスのセキュリティ対策術

ASPをPHPに移植したいですが、よい方法があるでしょうか?
Set httpObj = Server.CreateObject("WinHttp.WinHttpRequest.5.1")
If Err.Number <> 0 Then 'error check for http
 Response.Write("エラー:" & Err.Description)
 response.redirect("/ga-ko/error.asp?error=999")
 response.end
End If

どうぞ、よろしくお願いします。

A 回答 (4件)

ApacheのモジュールとしてPHPが動作するだけですので、Apache標準のライブラリというものはありません。


PHP標準のライブラリとしても、オブジェクト指向のライブラリなどはありません。
一応PEARがPHPの標準ライブラリ(PerlでいうところのCPAN)になります。
pearコマンドなどでインストール擦る必要があります。

それ以外だと、それこそ標準でない、いわゆる「野良ライブラリ」といったものになってしまいます。

または、標準関数であるところの「fsockopen」関数などを使ってやる必要があります。
    • good
    • 0

ASPは、触ったこと無いのでわかりませんが、


少なくとも下記は、


If Err.Number <> 0 Then 'error check for http
 Response.Write("エラー:" & Err.Description)
 response.redirect("/ga-ko/error.asp?error=999")
 response.end
End If
If httpObj.Status = "400" Then
response.redirect("/ga-ko/error.asp?guid=ON&error=001")
response.end
End If

If httpObj.Status = "401" Then
response.redirect("/ga-ko/error.asp?guid=ON&error=002")
response.end
End If


エラーナンバーが0以外の何かだったら、/ga-ko/error.asp?error=999にリダイレクト
HTTPのステータスが400だったら、/ga-ko/error.asp?guid=ON&error=001にリダイレクト
HTTPのステータスが401だったら、/ga-ko/error.asp?guid=ON&error=002にリダイレクト

というように読めますが、それでいいんですよね。

同じようなことをPHPで書くとしたら

<?php
//何らかのライブラリを使って同じような挙動をするHTTPリクエスト用のライブラリがあって
//それが値を返してきたと仮定します。

//ちなみにPHPにはVBのようなエラートラップははれないので、try/catch構文を使います。
//ついでに、ライブラリがきちんとExceptionを吐かない場合はどうにもなりません。

try{
$http = new HttpHoge("http://example.com"); //ここらへんは
$response = $http->send(); //適当です。そういうライブラリがあると仮定してください。

if($response->status == 400){
header("Location: /ga-ko/error.asp?error=001");
exit();

}elseif($response->status == 401){
header("Location: /ga-ko/error.asp?error=002");
exit();

}


}catch(Exception $e){

header("Location: /ga-ko/error.asp?error=999");
exit();

}

?>

記述としてはこんな感じになるのではないでしょうか。

この回答への補足

大変参考になりました。Exceptionのキャッチが大事です。PEARはApacheが標準搭載ではないようですので、他に進めるライブラリがありますか?

補足日時:2010/08/07 20:54
    • good
    • 0

質問者さんは、PEARをご存知ですか。



PEARライブラリに、「HTTP_Request(またはHTTP_Request2)」といったものがあります。

それを使えば少なくともソケット通信で外部データを取得出来ます。
また、「response.redirect」の部分に該当するものは、標準ではないので、header関数で直接渡してしまうのが簡単です。

<?php

header("Location: /ga-ko/error.asp?error=999");

?>

また、#1の回答者さんが言っているようにPHPには標準関数で通信をする機能があります。
オブジェクト指向にとくにこだわっていないなら、fsockopen関数を調べてみてください。(最初にご案内したHTTP_Requestもfsockopen関数のラッパーです。)

この回答への補足

回答をありがとうございました。
「response.redirect」の部分をheader関数で直接渡すことですが、
下記のように複数の場合も可能でしょうか?

If Err.Number <> 0 Then 'error check for http
 Response.Write("エラー:" & Err.Description)
 response.redirect("/ga-ko/error.asp?error=999")
 response.end
End If
If httpObj.Status = "400" Then
response.redirect("/ga-ko/error.asp?guid=ON&error=001")
response.end
End If

If httpObj.Status = "401" Then
response.redirect("/ga-ko/error.asp?guid=ON&error=002")
response.end
End If
どうぞ、よろしくお願いします。

補足日時:2010/08/06 13:53
    • good
    • 0
この回答へのお礼

補助ですが、途中で何回もResponse.Writeを使う予定です。

お礼日時:2010/08/06 16:14

言語の部分では置換はできるとは思いますが、オブジェクトが出てくるともはやカバーしている範囲が違ってくるので、適宜みながら人が変換する方がいいでしょう。



上記のコード例でいえば、HTTPリクエストでどこかのWebサーバにGETやPOSTする機能はPHPの標準の機能でありますので、そのすべてが「必要ない」という移植になります。
    • good
    • 0
この回答へのお礼

回答をありがとうございました。

お礼日時:2010/08/06 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!