- 締切済み
ASPをPHPに移植したいですが、よい方法があるでしょうか?
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 どうぞ、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- hogehoge78
- ベストアンサー率80% (433/539)
ApacheのモジュールとしてPHPが動作するだけですので、Apache標準のライブラリというものはありません。 PHP標準のライブラリとしても、オブジェクト指向のライブラリなどはありません。 一応PEARがPHPの標準ライブラリ(PerlでいうところのCPAN)になります。 pearコマンドなどでインストール擦る必要があります。 それ以外だと、それこそ標準でない、いわゆる「野良ライブラリ」といったものになってしまいます。 または、標準関数であるところの「fsockopen」関数などを使ってやる必要があります。
- hogehoge78
- ベストアンサー率80% (433/539)
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(); } ?> 記述としてはこんな感じになるのではないでしょうか。
- hogehoge78
- ベストアンサー率80% (433/539)
質問者さんは、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.Writeを使う予定です。
補足
回答をありがとうございました。 「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 どうぞ、よろしくお願いします。
- cobe
- ベストアンサー率23% (54/227)
言語の部分では置換はできるとは思いますが、オブジェクトが出てくるともはやカバーしている範囲が違ってくるので、適宜みながら人が変換する方がいいでしょう。 上記のコード例でいえば、HTTPリクエストでどこかのWebサーバにGETやPOSTする機能はPHPの標準の機能でありますので、そのすべてが「必要ない」という移植になります。
お礼
回答をありがとうございました。
補足
大変参考になりました。Exceptionのキャッチが大事です。PEARはApacheが標準搭載ではないようですので、他に進めるライブラリがありますか?