• 締切済み

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 どうぞ、よろしくお願いします。

  • PHP
  • 回答数4
  • ありがとう数6

みんなの回答

回答No.4

ApacheのモジュールとしてPHPが動作するだけですので、Apache標準のライブラリというものはありません。 PHP標準のライブラリとしても、オブジェクト指向のライブラリなどはありません。 一応PEARがPHPの標準ライブラリ(PerlでいうところのCPAN)になります。 pearコマンドなどでインストール擦る必要があります。 それ以外だと、それこそ標準でない、いわゆる「野良ライブラリ」といったものになってしまいます。 または、標準関数であるところの「fsockopen」関数などを使ってやる必要があります。

回答No.3

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(); } ?> 記述としてはこんな感じになるのではないでしょうか。

lliu123456
質問者

補足

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

回答No.2

質問者さんは、PEARをご存知ですか。 PEARライブラリに、「HTTP_Request(またはHTTP_Request2)」といったものがあります。 それを使えば少なくともソケット通信で外部データを取得出来ます。 また、「response.redirect」の部分に該当するものは、標準ではないので、header関数で直接渡してしまうのが簡単です。 <?php header("Location: /ga-ko/error.asp?error=999"); ?> また、#1の回答者さんが言っているようにPHPには標準関数で通信をする機能があります。 オブジェクト指向にとくにこだわっていないなら、fsockopen関数を調べてみてください。(最初にご案内したHTTP_Requestもfsockopen関数のラッパーです。)

lliu123456
質問者

お礼

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

lliu123456
質問者

補足

回答をありがとうございました。 「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)
回答No.1

言語の部分では置換はできるとは思いますが、オブジェクトが出てくるともはやカバーしている範囲が違ってくるので、適宜みながら人が変換する方がいいでしょう。 上記のコード例でいえば、HTTPリクエストでどこかのWebサーバにGETやPOSTする機能はPHPの標準の機能でありますので、そのすべてが「必要ない」という移植になります。

lliu123456
質問者

お礼

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

関連するQ&A

  • ASP内で他のASPファイルを読み込む方法

    ASP内で別ファイル(A.html)を読み込みました。下記の通りです。 <% Set objA = Server.CreateObject("Scripting.FileSystemObject") Set objFile = objA.OpenTextFile("A.html", 1, False) If Err.Number > 0 Then Response.Write "Open Error" Else Do Until objFile.AtEndOfStream Response.Write objFile.ReadAll Loop End If objFile.Close %> 読み込みはできたのですが、問題なのはA.htmlにもASPの処理が書かれてて、その部分がそのままテキストとして表示されたのです。 このように表示されました↓ <% ASP %> 読み込んだ際に、A.htmlに書かれたASP処理も実行させるにはどうすればよいのでしょうか?

  • ページを一度更新しないとSession値が渡らない。

    ASPで初めてプログラムしています。 A.asp → Err.inc → Err.asp というように、エラーがあったらErr.aspに 遷移するようにしているのですが、 Err.aspで更新ボタンを押さないとSession値が表示されません。 具体的に *** Err.inc *** <% Sub COMM_USER_ERROR(strMsg)   session("ErrMsg") = strMsg   'システムエラー表示   Response.Redirect("Err.asp")   Response.End End Sub %> *** A.asp *** If Request.ServerVariables("REQUEST_METHOD") <> "POST" Then   Call COMM_USER_ERROR("不正なアクセスをしました") End If *** Err.asp *** <HTML>   (中略)   <%=session("ErrMsg")%> どうしたらよいか全くわかりません。 どなたか教えていただけないでしょうか? よろしくお願いいたします。

  • ASPでエクセル書き込み

    ASPでサーバのエクセル(a.xls)に書き込み後保存テストしています。 エラー表示はされないのですが、 エクセルが更新されません。 どこに原因があるかお教え下さい。 (クライアントの画面に”作成”は表示されます) Prog <%@ LANGUAGE = VBSCRIPT %> <html> <body> <% On Error Resume Next Set objExcelApp = CreateObject("Excel.Application") If Err <> 0 Then ' エラー処理 response.write "Excelを起動できませんでした" response.write "エラー:" & Err.Description & "" Else On Error Resume Next '確認ダイアログ非表示 objExcelApp.DisplayAlerts = False 'エクセルのオープン Set objExcelBook = objExcelApp.Workbooks.Open("C:\Inetpub\wwwroot\test2\a.xls",,True) Set objExcelSheet = objExcelBook.Sheets(1) Set Sheet = Book.Worksheets(1) Sheet.Range("B5").Value = "Hello!" objExcelBook.Save Set objExcelSheet = Nothing objExcelBook.Close Set objExcelBook = Nothing objExcelApp.Quit Set objExcelApp = Nothing Response.Write("作成。") End If %> </body> </html> 環境 Windows XP,IIS,ASP,vbscript

  • 言語判別

    いつもお世話になっております。 早速ですが、Webページを開いたときに、各言語ごとに 開くページの飛び先を変更したいのです。 ASPを使って <% Dim lang lang=Request.ServerVariables("HTTP_ACCEPT_LANGUAGE") If inStr(lang,"ja")>0 then Response.Redirect("http://aaa.co.jp/") elseIf inStr(lang,"zh-tw")>0 then Response.Redirect("http://bbb.co.jp/") elseIf inStr(lang,"zh")>0 then Response.Redirect("http://ccc.co.jp/") else Response.Redirect("http://top/co.jp/") end if %> のようにして一応は出来たのですが、これをSelect文で実現できますでしょうか? また、一般的にこのような手法は正しいですか? 宜しくお願いします。

  • VBScript

    現在ASPをもとにWebサイトを作成しています。 「Microsoft VBScript コンパイラーエラー(0X800A03F6) 'End'がありません。」と出るのですが、どこが原因なのでしょうか? <%@ LANGUAGE="VBSCRIPT" %> <% ' #################### ' ### データ送信用 ### ' #################### StrUsername = Request.Form("username") StrUruby = Request.Form("uruby") StrDatofbirth = Request.Form("dayofbirth") StrEmail1 = Request.Form("email1") StrEmail2 = Request.Form("email2") StrGender = Request.Form("gender") StrPostnumber = Request.Form("postnumber") StrAddress = Request.Form("address") StrTel1 = Request.Form("tel1") StrTel2 = Request.Form("tel2") StrSchool = Request.Form("school") StrFaculty = Request.Form("faculty") StrDepartment = Request.Form("department") StrSurvey = Request.Form("survey") StrComment = Request.Form("comment") StrDesiredjobtype = Request.Form("desiredjobtype") if username = "" then username = "未入力" end if if uruby = "" then uruby = "未入力" end if if dayofbirth = "" then dayofbirth = "未入力" end if if email1 = "" then email1 = "未入力" end if if email2 = "" then email2 = "未入力" end if if gender = "" then gender = "未入力" end if if postnumber = "" then postnumber = "未入力" end if if address = "" then address = "未入力" end if if tel1 = "" then tel1 = "未入力" end if if tel2 = "" then tel2 = "未入力" end if if faculty = "" then faculty = "未入力" end if if department = "" then department = "未入力" end if if survey = "" then survey = "未入力" end if if comment = "" then comment = "未入力" end if if desiredjobtype = "" then desiredjobtype = "未入力" <!-- ERRORカウンタの初期化 errnum = "" ' ### ' ### sqlインジェクション対策 ### ' ###] if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- パラメータ LIST = Array(username,uruby,dayofbirth,email1,email2,gender,postnumber,address,tel1,tel2,school,faculty,department,survey,comment,desiredjobtype) <!-- 検出項目(SQLコマンドで使用される特殊記号の検出) CHECK_1 = Array("<",">","&","'","+","-","*","/","%",";","--","(",")","\","""",",") <!-- ハンドリング要素 ERROR = Array("A","B","C","D") For j = 0 to UBound(LIST) tmpData = UCase(LIST(j)) For i = 0 to UBound(CHECK_1) If Instr(tmpData,CHECK_1(i)) > 0 Then errnum = errnum + ERROR(j) Exit For End If Next Next if errnum <> "" Then Response.Redirect "http://localhost/tesut/chkerr.asp?errnum="+ errnum End If <!-- POSTで遅れないのでセションに保存 Session.Contents("username") = username Session.Contents("uruby") = uruby Session.Contents("dayofbirth") = dayofbirth Session.Contents("email1") = email1 Session.Contents("email2") = email2 Session.Contents("gender") = gender Session.Contents("postnumber") = postnumber Session.Contents("address") = address Session.Contents("tel1") = tel1 Session.Contents("tel2") = tel2 Session.Contents("school") = school Session.Contents("faculty") = faculty Session.Contents("department") = deaprtment Session.Contents("survey") = survey Session.Contents("comment") = comment Session.Contents("desiredjobtype") = deairedjobtype Response.Redirect "http://localhost/tesut/check.asp" <!-- xssの記号検出処理 Function XssChk(Str) err = 0 If Instr(Str,"<") > 0 Then err = err + 1 End If If Instr(Str,">") > 0 Then err = err + 1 End If If Instr(Str,"&") > 0 Then err = err + 1 End If If Instr(Str,"'") > 0 Then err = err + 1 End If If Instr(Str,"""") > 0 Then err = err + 1 End If XssChk = err End Function %>

  • [asp/vbs]FileExistsのパスの指定方法について教えて下

    [asp/vbs]FileExistsのパスの指定方法について教えて下さい。 下記のような記述をした場合、インターネット上にファイルは存在しているのに 「無し」と判断されてしまいます。("ファイルがありません"と表示される) 表示されるという事はasp自体は動いているのでしょうが、肝心のパスの設定が わからない状態です。 <%@ Language=VBScript %> -------中略------- <% Set objFso = Server.CreateObject("Scripting.FileSystemObject") If objFso.FileExists("image/test.jpg") Then Response.Write "ファイルが存在します" End If Response.Write "ファイルがありません" %> このaspファイルが置かれているディレクトリ上にtest.jpgを置き、 If objFso.FileExists("test.jpg") Then と記述しても、やはり"ファイルがありません"と表示されてしまいます…。 また、フルパス(http://www~~test.jpg)と表示しても駄目でした。 おそらく根本的な問題だとは思うのですが、 どのように表記したら良いか、教えて頂けると助かります。

  • [ODBC]Oracle接続時のエラー

    初めて投稿させて頂きます。 客先システム(ASPサービス)の保守をすることになり社内に環境を構築したのですが、以下の「※」の行で エラーが発生してしまいます。(エラー内容を確認するため、On Error Resume Nextを一時的にコメントにしてあります) インデントが効かないようなので見辛いと思いますが... [ソース] ------------------------------------------------------------------------------- 'オブジェクトの生成 Set wkdbCnct = Server.CreateObject("ADODB.Connection") 'On Error Resume Next ※→wkdbCnct.Open "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" If Err.Number <> 0 Then Set wkdbCnct = Nothing On Error Goto 0 Response.Redirect DBERROR_URL Exit Function End If -------------------------------------------------------------------------------- [エラー内容] Microsoft OLE DB Provider for ODBC Drivers エラー '80040e4d' [Microsoft][ODBC driver for Oracle][Oracle]ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 DSN等の設定値を確認するため以下のようなデバッグコードを仕込んで、変数「vPara」を画面に表示させてみました。 [デバッグコード入りソース] ------------------------------------------------------------------------------- Set wkdbCnct = Server.CreateObject("ADODB.Connection") On Error Resume Next wkdbCnct.Open "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" If Err.Number <> 0 Then '↓デバッグ用コード val1 = Err.Number val2 = Err.Description vPara = "" vPara = "DSN=" & DBCNN_DSN & "; UID=" & DBCNN_UID & "; PWD=" & DBCNN_PWD & ";" & " | " & "Err.Number = " & val1 & " | Err.Description = " & val2 Exit Function '↑デバッグ用コード Set wkdbCnct = Nothing On Error Goto 0 Response.Redirect DBERROR_URL Exit Function End If -------------------------------------------------------------------------------- [画面に表示したvParaの内容] DSN=HOGE; UID=USER123; PWD=PASS123; | Err.Number = -2147217843 | Err.Description = [Microsoft][ODBC driver for Oracle][Oracle]ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。 SQL*Plusで「USER123/PASS123@HOGE」でログインを試みたところ、問題なく接続出来ました。 どういった事が原因として考えられるでしょうか? [AP&DBサーバ] Windows Server2016 Standard IIS Version 10.0.14393.0 OracleDatabase12c(12.2.0.1) + OracleClient12c(12.2.0.1-32bit) 不足している情報等ありましたらご指摘お願いします。

  • サーバーからクライアントのMACアドレスを取得

    ASPを使用して、サーバーからクライアント側の ネット情報などを取得したいのですが、できるのでしょうか? 今現在WMIを使用してクライアントからサーバーのMACアドレスを 取得できているのですが、逆の事もできるのではと考えました。 <HTML> <HEAD> <TITLE>MACアドレスの表示</TITLE> </HEAD> <BODY> <Form method="post" name="form1"> <input type="hidden" name="h_MACaddress" value="<%= MACA %>"> <% Dim MACA ConnectString = "winmgmts:{impersonationLevel=impersonate}!root\cimv2" Query = "SELECT MACaddress " Query = Query & " FROM Win32_NetworkAdapterConfiguration" Query = Query & " WHERE IPEnabled=TRUE" On Error Resume Next Set IPConfigSet = GetObject( ConnectString ).ExecQuery( Query ) if Err <> 0 Then 'エラー発生表示 if Err.Number = -2147217405 then Response.Write "Error 0x80041003: Access Denied: " Response.Write "Check permissions and file security for this ASP file." Response.Write "<BR>" else Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if end if For each IPConfig in IPConfigSet 'MACアドレス取得処理 Response.Write("MACADDRESS: ") Response.Write(IPConfig.MACaddress & "<br>") MACA = IPConfig.MACaddress Next 'Response.write("aaa:" & MACA & "<BR>") 'MACアドレスの変数 Response.Write "<BR>" if Err <> 0 Then 'エラー発生表示 Response.Write "エラー説明: " Response.Write Err.Description Response.Write "エラー番号: " Response.Write Err.Number Response.Write "<BR>" end if %> </BODY> </HTML> プログラムはこのようなものを使用しております。 できるできないだけでも知りたいので、 分かる方いらっしゃいましたら教えていただけますでしょうか? 宜しく御願い致します。

  • ASPのログイン制限に関する質問です

    現在ログイン制限のページを作成しているのですがユーザーIDとパスワードを入力した情報を現在作成している関数に渡すとエラーがおきてしまいます。原因がわからないので助言をお願いします。 SQLの定義ですがすべてvarcharです。 以下コード ---------------------------------------------------------- 'ログイン画面からのデータを取得 user_id = Request.form("user_id") password = Request.form("password") function user_check(user_id, password) set objCon = Server.CreateObject("ADODB.Connection") set objRS = Server.CreateObject("ADODB.Recordset") objCon.ConnectionString = "DSN=・・・・;"& _ "UID=root;" & _ "PWD=・・・・・;" objCon.Open '入力した情報と一致するものを探す strSQL = "select person_code, password from person_master" & _ "where code = '" &user_id& "' and password = '" &password& "'" objRS.Open strSQL, objCon, 3 If objRS.EOF or objRS.BOF then user_check = "NG" else user_check = "OK" end If objRS.close set objRS = nothing objRS.close set objCon = nothing end function if user_check(user_id, password) <> "OK" then response.redirect "index.asp" else response.redirect "main.asp" end if

  • aspで別ドメインにあるXMLの読込み方

    質問させてください。 aspで下記のようなコードを書きXMLを別ドメインから読込もうとしたのですが読み込み出来ません。 これをサーバーマップパスで書いた同一ドメインから読込むと読み込む事が出来ます。 VBScriptではなくJScriptで同じような内容の呼び出しを試してみたのですが別ドメイン上にあるXMLの読込みは出来ませんでした。 色々ググってみたりしたのですが、これに関する記事が見つからなかりませんでした。 aspでは基本的に別ドメイン上にあるものは読込めないのでしょうか? 情報的に足りない事があれば出来るだけ書きますのでどうか解答していただければ助かります。 <% Set xmlDoc = Server.CreateObject("Microsoft.XMLDOM") xmlDoc.async = false If xmlDoc.Load("http://www.xxx/xxx/xxx.xml") Then Response.Write("ドキュメントの読み込みに成功しました。") temp = xmlDoc.text Else Response.Write("ドキュメントに読み込みに失敗しました。") End If Set xDoc = Nothing %>

専門家に質問してみよう