【问题标题】:internal server error (500) in simple cgi script简单 cgi 脚本中的内部服务器错误 (500)
【发布时间】:2010-11-30 16:28:41
【问题描述】:

我在配置我的服务器后尝试运行一个简单的 cgi 脚本。

我的脚本如下所示:

print "Content-type: text/html"
print
print "<html><head><title>CGI</title></head>"
print "<body>"
print "hello cgi"
print "</body>"
print "</html>"

当我转到我的脚本 url http://127.0.0.1/~flybywire/cgi-bin/main.py 我得到:

内部服务器错误

服务器遇到内部错误或配置错误,无法完成您的请求。

error.log 我得到以下信息:

[error] (8)Exec format error: exec of '/home/flybywire/www/cgi-bin/main.py' failed [error] [client 127.0.0.1] Premature end of script headers: main.py

其他信息: Apache/2.2.8 (Ubuntu) DAV/2 SVN/1.4.6 Server at 127.0.0.1 Port 80

【问题讨论】:

    标签: python apache cgi


    【解决方案1】:

    如果是python 3,你可以在程序顶部添加#!/usr/bin/python3而不是#!/usr/bin/python(因为我是法国人,所以我认为我的英语并不完全正确)

    【讨论】:

      【解决方案2】:

      Apache 不知道在您的 PC 上哪里可以找到 python 来执行该文件。 尝试将 #!C:/python 添加为 .py 文件(或 PC 上安装 Python 的任何位置)的第一行。

      【讨论】:

        【解决方案3】:

        删除程序中的第二行(打印) 我在我的 apache 服务器(mac os x)上试过它工作正常。 不要忘记 chmod 755 并使用 sudo apachectl restart 重新启动 这适用于 python 2.7

        print "Content-type: text/html"
        print "<html><head><title>CGI</title></head>"
        print "<body>"
        print "hello cgi"
        print "</body>"
        print "</html>"
        

        【讨论】:

          【解决方案4】:

          也许您的问题是新的 python 版本需要括号 ( )。

          所以你的:

          print "<body>"
          

          现在应该是:

          print ("<body>")
          

          【讨论】:

          • 他们使用的是 Python2 而不是 Python3。
          【解决方案5】:

          另外,使用 Unix 行结尾保存文件(如果这是 Linux 服务器)。您确实使用chmod +x 使其可执行,不是吗?

          如果您在各种环境中运行,您可以使用 #!/usr/bin/env python 覆盖当前运行的 Python 版本(因此是 env 部分)。

          【讨论】:

          • 当我在没有chmod +x 的情况下尝试它时,出现了一个不同的错误:(13)Permission denied: exec of '/home/flybywire/www/cgi-bin/main.py' failed
          • 这仅仅是因为 chmod +x 使文件权限可执行 - 使文件可执行是一个先决条件,真的。
          【解决方案6】:

          投入

          #!/usr/bin/env python
          

          脚本顶部的工作正常。我把它放在最上面,但是 Netbeans 自己在页面顶部放置了额外的代码(导入命令),这让我抓狂:(

          【讨论】:

            【解决方案7】:

            看起来 Apache 在执行它时遇到了问题。通常对于 unix 脚本,您还需要在脚本顶部指定解释器。

            尝试将其添加到顶部:

            #!/usr/bin/python
            

            【讨论】:

              【解决方案8】:

              您可能需要在脚本顶部使用#!/usr/bin/python 来告诉 Apache 使用 Python 来执行它。至少,我做到了,它对我有用:-)。

              【讨论】:

              • 我认为在所有 cgi 脚本中添加 #!/usr/bin/python 很可怕。如何通过 apache SetEnv PYTHONPATH 进行设置?
              猜你喜欢
              • 1970-01-01
              • 2011-10-09
              • 2013-11-13
              • 2016-04-24
              • 1970-01-01
              • 2014-09-12
              • 2016-12-22
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多