HTML页面调用CGI脚本无法执行 基于维基示例编写运行异常求排查
CGI表单提交后脚本无法执行问题排查方案
以下是基于提供的代码和场景整理的完整排查解决路径:
关联代码参考
HTML前端代码
<!DOCTYPE html> <html> <body> <form action="add.cgi" method="POST"> <fieldset> <legend>Enter two numbers to add</legend> <label>First Number: <input type="number" name="num1"></label><br/> <label>Second Number: <input type="number" name="num2"></label><br/> </fieldset> <button>Add</button> </form> </body> </html>
后端CGI(Python)代码
#!/usr/bin/env python3 import cgi, cgitb cgitb.enable() input_data = cgi.FieldStorage() print('Content-Type: text/html') # HTML is following print('') # Leave a blank line print('<h1>Addition Results</h1>') try: num1 = int(input_data["num1"].value) num2 = int(input_data["num2"].value) except: print('<output>Sorry, the script cannot turn your inputs into numbers (integers).</output>') raise SystemExit(1) print('<output>{0} + {1} = {2}</output>'.format(num1, num2, num1 + num2))
故障排查步骤
- 检查脚本权限:服务器端需给
add.cgi文件赋予可执行权限,执行命令chmod 755 add.cgi即可,同时确认文件所属用户和用户组与Apache运行用户匹配,避免权限不足无法调用。 - 验证Python解释器路径:脚本首行的
#!/usr/bin/env python3需要匹配服务器实际的Python3路径,可在服务器终端执行which python3获取绝对路径替换首行内容,比如如果返回结果是/usr/bin/python3,就把首行改为#!/usr/bin/python3。 - 确认Apache CGI模块已开启:终端执行
apache2ctl -M | grep cgi(CentOS系统替换为httpd -M | grep cgi),如果返回结果中没有cgi_module (shared),则执行a2enmod cgi开启模块,之后重启Apache服务生效。 - 核对Apache配置项:
- 存放
add.cgi的目录对应的配置段中必须添加Options +ExecCGI配置,允许该目录执行脚本 - 配置中需要添加
AddHandler cgi-script .cgi .py规则,将.cgi后缀文件关联到CGI处理程序 - 若使用了
ScriptAlias配置,需确保访问路径和脚本实际存放路径的映射关系正确
- 存放
- 本地测试脚本有效性:在服务器终端直接执行
python3 add.cgi,检查是否有语法报错、缩进错误或者依赖缺失,正常执行应当输出标准的HTTP头和HTML内容。 - 查看Apache错误日志定位问题:Apache错误日志默认存放路径为
/var/log/apache2/error.log(CentOS系统为/var/log/httpd/error.log),日志中的具体报错信息可以直接定位故障根源,比如路径不存在、权限不足、脚本执行异常等。
内容的提问来源于stack exchange,提问作者doomspacemarine
相关产品推荐
相关产品推荐

