Classic ASPで作られたWebサイトを運用してるけど今後の機能拡張はPHPで行っていきたい!
みたいな人のために(いるかわかんないけど…)。
ASPの環境構築はこちらを参考にしてください。
Windows10でClassic ASP(レガシーASP)実行環境を構築する
IISでPHPを動かせるようにする
CGI機能の有効化
コンパネの「プログラムと機能」から「Windows機能の有効化または無効化」を選択。
「インターネット インフォメーション サービス」->「World Wide Webサービス」->「アプリケーション開発機能」->「CGI」にチェックを入れる。
OKを押すとCGI機能が有効になる。
PHPのインストール
PHPのサイトからNon Thread Safe版のZipをダウンロード。
お使いの環境に合わせて64bitか32bitを選んでください。
展開したら適当な場所に置く。
今回はフォルダ名をphpにしてCドライブ直下に置いた。
phpフォルダに入るとphp.ini-development
というファイルがあるので、これをコピーしてphp.ini
にリネームする。
同階層にphp-cgi.exe
があるのでこれをダブルクリックで実行、DOS窓が開いて何も表示されなければOK。
IISの設定
IISマネージャーを開き、拡張子とPHPファイルの関連付けを行う。
対象のサイトを選択し、「ハンドラーマッピング」を選択する
「モジュール マップの追加」をクリック。
次のように入力。
PHPのパスは実際の環境に合わせて変更する。
要求の宣言を次のように設定。
「OK」を押すと次のようにダイアログが上がるので「はい」を選択。
PHP実行環境の設定はこれで完了。
PHPの動作確認
ドキュメントルートに適当なPHPファイルを作る。
<?php
phpinfo();
?>
「http://localhost/index.php」にアクセス。
IISでPHPの動作が確認できた。
共存させてみる
PHPとASPで互いを呼び合うフォームを作ってみる。
両方ともファイルエンコーディングはUTF-8で保存すること。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<?php
if(filter_input(INPUT_GET, 'val')){
echo filter_input(INPUT_GET, 'val') . ' -> ';
}
?>
PHP
</p>
<form action="/form.asp?val=PHP" method="post">
<div>
<label for="msg">message:</label>
<input type="text" name="msg" value="<?= filter_input(INPUT_POST, 'msg') ?>">
</div>
<div class="button">
<button type="submit">Send your message.</button>
</div>
</form>
</body>
</html>
<%@ CODEPAGE=65001 %>
<% Session.CodePage=65001 %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<p>
<%
If Request.QueryString("val") <> "" Then
Response.Write Request.QueryString("val") & " -> "
End If
%>
ASP
</p>
<form action="/form.php?val=ASP" method="post">
<div>
<label for="msg">message:</label>
<input type="text" name="msg" value="<%= Request.Form("msg") %>">
</div>
<div class="button">
<button type="submit">Send your message.</button>
</div>
</form>
</body>
</html>
まずはPHPのページ「http://localhost/form.php」にアクセス。
ボタンを押してASPのページに遷移する。
またボタンを押してPHPのページに遷移する。
PHPとASPでパラメータを渡しつつ、互いのページが行き来しあえることが確認できた。
というわけで同一サイトでPHPとASPを動かすことはできましたが、お察しの通りステートレスなWebサイトにしかこれでは対応できません。
セッションを利用するステートフルなWebサイトでは、互いの言語がセッションを共有できないため、結局はPHPかASPかのどちらかでセッションを管理し、片方はステートレスな処理を担当することになると思います。
以上でした。