前回までのあらすじ
どういうわけか、自鯖にFTPアップロードできない。
おそらく、設定がおかしい。
出先では、自鯖のターミナルを動かせない(まだSSHを搭載していないのです)。
やるべきことはCGIの実験。
ならば、XAMPPでCGIできる方法を探すほかない。

WindowsのXAMPPでCGIを実装する設定
というわけで、Windowsで、XAMPPのApacheを使って、CGIを動かせるようにします。
完全にローカルで動かします。

設定については、ここに書かれていること、そのまんまなので、
CGI(Perl)を利用するためのApacheの設定(JavaDrive)
その他の引っかかる部分をやっておきます。

PerlとRubyとPython
今どきは、ActivePerlなんてなかなか手に入らないから、
StrawberryPerlをインストールします。
XAMPPにあるから、やっぱりいいです(strawberry perlをインストールしてもいいです)。
Rubyも、インストールです。
インストールが終わったら、1か3を選択して、コマンドプロンプトに設定してもらいます。
Pythonは、Thonnyよりも、本家のほうが安定です。たぶん。
それぞれ、インストーラーをダウンロードして、インストールします。

asp.netやクラシックaspと呼ばれるものは、よくわからないので、
参考までに、こんなのも見ています。VBで動くらしい。
クラシックASPとは。どのような技術で、移行は必要なのか(Winserverのススメ)
https://www.winserver.ne.jp/column/about_classic-asp/
aspは、たぶんLinuxでは動かせないと思います。だから、飛ばします。

シバン
cgiスクリプトの一番上に書かれている、
#!/usr/bin/perl
こんなの、実は、ただのコメントアウトではなくて、「シバン」と呼ばれる、
プログラムを実行するための実行装置(インタプリター)の場所を示すものなのです。
Windowsでは、実行装置の位置が、Linuxの場合と違ってきます。

お目当てのファイルは、エクスプローラーで検索かけるしかないので、長い時間かけて調べると、
Perl
#!C:/xampp/perl/bin/perl.exe
または
#!C:/strawberryperl/perl/bin/perl.exe
Ruby
#!C:/Ruby32-x64/bin/ruby.exe
Python
#!C:/Python312/python.exe
バージョンにより、フォルダ名は変わるようです。
だから、ここにいちいち書いても、あまりあてにはできないかもしれません。
(32bit用か64bit用か、はたまたバージョンアップ具合でも変わってくる・・・はず)。

cgiスクリプトを試す場合(運用する場合も)、先頭のシバンを変えます。

CGIが動かない場合の対策
たいていは、Internal Server Error、俗にいう「エラー500」が出ると思います。
Apacheの場合、何の間違いだったとしても、エラー500なので、ややこしい。
多くの場合は、
・改行のコードが、Windows独特の「LFCR」である場合(LFに直す)。
・パーミッションの設定がおかしくてスクリプトを実行できない場合(755か777なら大丈夫だけどWindowsで使う場合は特に気にしなくていい)
・Apacheの設定がおかしい(根気よく直していく、再起動することが大事)。
・CGIスクリプトのエラー(どこがおかしいのか根気よく直す)
などなど、いろいろ原因になるものがあります。

CGIのモジュール
最近だと、標準ライブラリに含まれなくなるということが、よくあります。
時代遅れだとかなんとか。
Perlの場合
モジュールを手動で追加します
やり方は、ここに書かれています。
CGI.pm を使ってみよう(futomi's CGI Cafe)
https://www.futomi.com/lecture/form/cgi-pm.html#gsc.tab=0
Rubyの場合
CGIのモジュールは消された様子はないみたいです。
Python
legacy-cgiをインストールします。pipでインストールできます。
pip install legacy-cgi

実験
実はCGIのモジュールそのものは、なくてもCGIは作れるのです。
ただし、いろんなものを実装するのに、ありえないぐらいの手間がかかるだけ。
実験用のCGIスクリプトをここに載っけます。

Perl

#!C:/xampp/perl/bin/perl.exe
print("Content-Type: text/html\n\n");
print("<!DOCTYPE html>\n<html>\n");
print("<head>\n<meta charset=utf-8>\n");
print("</head>\n<body>\n");
print("<p> パン、おいしいです(^ q ^)</p>\n");
print("</body>\n</html>");

Ruby

#!C:/Ruby32-x64/bin/ruby.exe
print("Content-Type: text/html\n\n")
print("<!DOCTYPE html>\n<html>\n")
print("<head>\n<meta charset=utf-8>\n")
print("</head>\n<body>\n")
print("<p> パン、おいしいです(^ q ^)</p>\n")
print("</body>\n</html>")

Python3

#!C:/Python312/python.exe
print("Content-Type: text/html\n\n")
print("<!DOCTYPE html>\n<html>\n")
print("<head>\n<meta charset=utf-8>\n")
print("</head>\n<body>\n")
print("<p> パン、おいしいです(^ q ^)</p>\n")
print("</body>\n</html>")

これらが動けば、CGIは動く設定ということで。
文字化けは、metaタグにcharsetをつけていないから、多分起こります。

2023/12/17 追記(Pythonの緊急措置的な文字化け対策)
文字化けの問題が、意外と深刻で根強いので、対策を考えていました。
最近のXAMPP(に搭載されているApache)では、AddDefaultCharset(文字コードの設定をするパラメーター)は、
特には指定されていません。

どういうわけか、Pythonで作ったCGIだけで起きる問題として、
UFT-8の通りに読み込んでくれない問題があります。
緊急措置的な対策として、Pythonでは、これをmetaタグとして使うようにprintすることです。
<meta charset=Shift-JIS>
この方法は、WindowsのXAMPPの、Python専用です。
そして、あくまでも緊急措置です。
UTF-8のファイルを、Shift-JISで読むように指示するなんて、普通におかしいことなので。
試してみたところ、PerlやRubyでは、UTF-8をちゃんと認識してくれたので、
この変更は必要ありません。
XAMPPに搭載されているApache2のバージョンにより、状況がすごく変わるようなので、
過去の記事が間違っているかどうかまでは、わかりませんでした。
もしかしたら、古いXAMPPでは、古い記事に書かれているとおりのことをしなければならないかもしれません。

当然、実際のサーバーは、おそらくLinuxサーバーだから、それ用に直します。
(Windowsサーバーだったとしても、一部修正するところは出てくると思います。たぶん)。
LinuxはUTF-8をメインで使うOS。
Shift-JISのところはUTF-8に直して、
(本来UTF-8のフォーマットで書かれているテキストだから。最初からShift-JISで書かれているものなら問題ありません)。
改行コードもLFCRではなく、LFに直します。





参考資料

legacy-cgi 2.6(pypi)
https://pypi.org/project/legacy-cgi/