お知らせ・長文・なんか用 (デザイン仕様よく変わります)
管理用ページ / 下書きリスト / 管理画面
No.82
サイトのはなし Mac 2025/07/21 lock
初期表示に戻る
■お知らせ: 編集
■カレンダー
■新着画像リスト:
■全文検索:
ケメ堂noteTOP /// ケメ堂本舗 / kemedo.kirara.stへ戻る
という話>>81の解決編です。まとめたものは>>83にあります。
いか引用で囲っているのがぼくが質問した内容(原文ママ)で、平文なのがChatGPTの回答です。
ぼく:
MAMPでcgiが動かないのは何が原因だと考えられますか?
PHPは動きます。
ちなMac mini Apple M2 macOSVentura
MAMPでCGIが動作しない場合、いくつかの原因が考えられます。以下は、Mac(特にM2チップ搭載のmacOS Ventura)環境におけるよくある原因とその対処法です。
✅ 1. CGIが有効になっていない(ExecCGI)
Apacheの設定でCGIを許可していないと動作しません。
対処法:
httpd.conf または VirtualHost 設定ファイルで、該当ディレクトリに Options +ExecCGI が指定されているか確認してください。
<Directory "/Applications/MAMP/cgi-bin">
Options +ExecCGI
AddHandler cgi-script .cgi .pl .py
Require all granted
</Directory>
✅ 2. スクリプトのパーミッション(実行権限)
CGIスクリプトに実行権限がないと動作しません。
対処法:
ターミナルで以下を実行し、実行権限を付与します。
chmod +x yourscript.cgi
✅ 3. シバン(Shebang)の指定ミス
先頭行に正しいパスでインタプリタ(Perl, Pythonなど)を指定する必要があります。
例:
#!/usr/bin/env python3
または
#!/usr/bin/perl
macOSは標準で /usr/bin/env を使うのが安全です。
✅ 4. 出力が正しくない
CGIは最低でも「Content-Type」のヘッダーが必要です。これがないとApacheが500エラーを返します。
例(Pythonの場合):
#!/usr/bin/env python3
print("Content-Type: text/html\n")
print("<html><body><h1>Hello CGI</h1></body></html>")
✅ 5. MAMPのApacheが使っている設定ファイルを確認
MAMPには独自のhttpd.confがあります。編集するファイルがmacOSの標準のApache設定ではなく、MAMPのApache用のものになっているか確認しましょう。
MAMPのhttpd.confの場所(例):
/Applications/MAMP/conf/apache/httpd.conf
また、Includeで別ファイルを読み込んでいることもあるので注意してください。
✅ 6. スクリプトの文字コードがUTF-8でBOMなし
特にPythonでありがちですが、BOM付きUTF-8だとエラーが出ることがあります。エディタでBOMなしUTF-8を選んで保存してください。
✅ 7. M1/M2 MacのRosetta環境による影響
あまり多くはありませんが、インストールされているPerl/PythonがRosetta対応のものでない場合や、仮想環境のパスのずれによってインタプリタが見つからないことも。
✅ 8. Apacheのエラーログを見る
CGIが動かないとき、一番頼りになるのはエラーログです。
ログの場所(例):
/Applications/MAMP/logs/apache_error.log
ここをチェックすると、原因のヒントが得られます。
📌 補足:CGIスクリプトの配置場所
MAMPではデフォルトで cgi-bin ディレクトリが /Applications/MAMP/cgi-bin/ にあります。
スクリプトはここに置くのが基本です。
もし上記を確認しても動かない場合、以下を教えていただければさらに詳しく調査できます:
・CGIスクリプトのファイル内容(冒頭部分)
・CGIのファイルパス
・Apacheの設定でCGIに関係しそうな部分(可能な範囲で)
・エラーログに表示されるメッセージ
どうぞお気軽に聞いてください。
あ、http://localhost/から「なんとか.cgi」にアクセスすると
ソースコード原文が表示されます。
その症状(CGIスクリプトのソースコードが表示される)は、**Apacheがそのファイルを「CGIとして実行するのではなく、単なるテキストファイルとして返している」**状態です。
つまり、
✅「Apache側がその拡張子 .cgi をCGIとして扱う設定になっていない」
ことが原因です。
🔧 対処手順(MAMP環境)
以下の設定を確認/追加してください。
✅ 1. ApacheにCGIを許可する設定を追加
MAMPの Apache 設定ファイルを開きます:
/Applications/MAMP/conf/apache/httpd.conf
このファイルの中に以下を探して、なければ追加します(検索は cgi や AddHandler などで):
# CGIを有効にする設定
AddHandler cgi-script .cgi .pl .py
また、対象ディレクトリに ExecCGI オプションがあるかも確認/追加してください:
<Directory "/Applications/MAMP/htdocs">
Options +ExecCGI
AllowOverride All
Require all granted
</Directory>
※ デフォルトで MAMP は htdocs がドキュメントルートです。
✅ 2. スクリプトに実行権限があるか確認
chmod +x /Applications/MAMP/htdocs/your_script.cgi
✅ 3. Apacheを再起動(超重要)
設定変更後は必ず MAMP を再起動してください。
✅ 4. 動作確認
再度ブラウザで
http://localhost/your_script.cgi
にアクセスしてみてください。
必要であれば、あなたの httpd.conf の該当部分をこちらに貼ってもらえれば、レビューもできます!
ぼく:ファイルの一部を貼る
ありがとうございます。提示いただいた httpd.conf の <Directory "/Applications/MAMP/htdocs"> セクションを見ると、CGIを有効にする設定(Options +ExecCGI や AddHandler)がまだ不足しています。
現在の Options はこうなっています:
Options All
🚨 ここに注意!
Options All には ExecCGI が含まれないことがあります。これはApacheの仕様で、MAMPなどのディストリビューションでは安全のために無効化されていることがあります。
✅ 必要な修正:
次の2点を 追加 または 修正 してください。
✏️ 1. Options に ExecCGI を明示的に追加
Options +ExecCGI
または(他のオプションを残したい場合):
Options Indexes FollowSymLinks ExecCGI
✏️ 2. .cgi ファイルを CGIとして処理するように指定
httpd.conf のどこか(たとえば上の <Directory> ブロックの中か外)に次の行を追加してください:
AddHandler cgi-script .cgi .pl .py
🔄 修正後のサンプル(完全な形)
<Directory "/Applications/MAMP/htdocs">
Options +ExecCGI
AllowOverride All
Require all granted
<IfModule xsendfile_module>
XSendFilePath "/Applications/MAMP/htdocs"
</IfModule>
</Directory>
AddHandler cgi-script .cgi .pl .py
✅ 最後にやること
1/MAMPの Apacheを再起動
2/.cgi スクリプトに実行権限を付ける(ターミナルで):
chmod +x /Applications/MAMP/htdocs/your_script.cgi
3/.cgi スクリプトの先頭にシバン(例:#!/usr/bin/env python3)があることを確認
4/ブラウザで再度確認:
http://localhost/your_script.cgi
これで .cgi が「実行される」ようになるはずです。
うまくいかなければ .cgi の内容か apache_error.log のエラーメッセージを教えてください。さらに詳しく対応します!
エラーコードの一部を貼ったが関係なかった
もしまだ「ソース表示」される場合は、次の2点をチェックして送ってください:
1/あなたが httpd.conf に追加した全体の該当設定
2/上記 test.cgi を置いた場所とアクセスURL(たとえば /Applications/MAMP/htdocs/test.cgi → http://localhost/test.cgi など)
これで確実に問題特定できます!
必要なら、あなたのhttpd.confを貼っていただければ、具体的にどこをどう修正すべきか示します。
ぼく:httpd.confの気になった箇所を貼った
ありがとうございます。この httpd.conf の LoadModule セクションを見る限り、CGIを扱うために必要なモジュール mod_cgi または mod_cgid がロードされていません。
🚨 決定的な原因
あなたの設定ファイルで、以下の行が コメントアウト(無効) されています:
#LoadModule cgid_module modules/mod_cgid.so
✅ 解決方法(1ステップ)
1. mod_cgid を有効にする
以下のようにコメントを外してください:
LoadModule cgid_module modules/mod_cgid.so
💡 MAMPはUnix系(macOS)で mod_cgid を使います(mod_cgi は主にWindows環境)。MAMPに mod_cgi.so が存在しない可能性が高いので、mod_cgid を有効にするのが正解です。
✅ その後にやること(再掲)
2. .cgi をCGIとして処理する設定(まだなら追加)
AddHandler cgi-script .cgi .pl .py
配置場所例:
・httpd.conf の末尾
・または <Directory> ブロックの中でもOK
3. <Directory> セクションに ExecCGI を追加
修正後の例:
<Directory "/Applications/MAMP/htdocs">
Options +ExecCGI
AllowOverride All
Require all granted
<IfModule xsendfile_module>
XSendFilePath "/Applications/MAMP/htdocs"
</IfModule>
</Directory>
4. CGIファイルに実行権限
chmod +x /Applications/MAMP/htdocs/test.cgi
5. Apacheを再起動
MAMPの「Stop Servers → Start Servers」で必ず反映させてください。
✅ テストCGIのサンプル
保存先:/Applications/MAMP/htdocs/test.cgi
#!/usr/bin/env python3
print("Content-Type: text/html\n")
print("<html><body><h1>CGI動いてます!</h1></body></html>")
✅ アクセス確認
ブラウザで以下にアクセス:
http://localhost/test.cgi
💬 それでも表示されない場合
・エラーログ /Applications/MAMP/logs/apache_error.log を再度確認
・test.cgi に実行権限があるか再確認
・httpd.conf の編集ミスがないか見直し
設定がうまくいけば、CGIは確実に動作するようになります。希望があれば、httpd.conf の完全な例をテンプレートでお渡しできます!
ぼく:実行ファイルは /Applications/MAMP/htdocs/demo/test2/test.cgi
ですがどうなりますか?
ChatGPT:ありがとうございます。/Applications/MAMP/htdocs/demo/test2/test.cgi にCGIスクリプトがある場合、その場所(サブディレクトリ)にもCGI実行が許可されている必要があります。
✅ チェックポイント一覧
以下をすべて確認してください:
1. httpd.conf の <Directory> 設定がこうなっているか:
<Directory "/Applications/MAMP/htdocs">
Options +ExecCGI
AllowOverride All
Require all granted
<IfModule xsendfile_module>
XSendFilePath "/Applications/MAMP/htdocs"
</IfModule>
</Directory>
これで htdocs 配下すべてに CGI が許可されるはずです。
2. AddHandler が設定されているか:
AddHandler cgi-script .cgi .pl .py
この設定がないと .cgi がCGIスクリプトとして扱われず、ソースコードがそのまま表示されます。
3. CGIファイルに実行権限があるか:
chmod +x /Applications/MAMP/htdocs/demo/test2/test.cgi
4. CGIスクリプトの内容が正しいか(例:Pythonスクリプト)
例:
#!/usr/bin/env python3
print("Content-Type: text/html\n")
print("<html><body><h1>CGI動いてます!</h1></body></html>")
5. ブラウザで以下にアクセス:
http://localhost/demo/test2/test.cgi
🔚 まとめ
今の構成で test.cgi が htdocs 配下にあれば、Apache設定が正しくできていれば http://localhost/demo/test2/test.cgi で動作します。
それでも動作しなければ:
・実際の test.cgi の中身
・エラーログの直近の該当部分
を教えてください。確実に動作するところまで一緒に追い込みます!
ぼく:
㊗️動きました!!!!!!!!!!
「LoadModule cgid\_module modules/mod\_cgid.so」
追加するんちゃうかな…と思ってたけど自信がなかったんだ!!!!
ありがとう!!!!!!!!!㊗️㊗️㊗️
🎉🎉🎉おめでとうございます!!!!!!!!!🎉🎉🎉
めっちゃうれしい報告ありがとうございます!!!
そして、「mod_cgid かな…?」と気づいてたの、スルドすぎです✨ 自信持ってよかったやつです!!!
🛠 改めておさらい(今後の自分のためにも)
CGIをMAMPで動かすには:
✅ 「httpd.conf」LoadModule cgid_module modules/mod_cgid.so を有効にする
✅ 「httpd.conf」AddHandler cgi-script .cgi を設定
✅ 「httpd.conf」<Directory> に Options +ExecCGI を書く
✅ 「ターミナル」CGIスクリプトに実行権限(chmod +x)をつける
chmod +x /Applications/MAMP/htdocs/demo/test2/test.cgi
✅ Apacheを再起動する
何か他にもMAMP関連でもCGIでもPythonでも、何でも聞いてください!
めっちゃ一緒に盛り上がれて楽しかったです😂✨
お疲れさまでした!🎌🚀
ぼくこそありがとうだよ…