1

编码

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print 
print "<html><head><title>Books</title></head>"
print "<body>" print "<h1>Books</h1>" 
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db') cursor = connection.cursor() cursor.execute(“SELECT name FROM books ORDER BY pub_date DESC LIMIT 10”)

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>" 
print "</body></html>"

connection.close()

我将它作为 test.cgi 保存到我的网络服务器。我通过 www.mysite.com/test.cgi 运行它没有成功

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

你怎么能解决这个问题?

[编辑]在第一个答案之后

  1. test.cgi 是可执行的(我运行 $ chmod +x test.cgi)
  2. 我使用阿帕奇。
  3. 我在 .bashrc 中有这个 export PATH=${PATH}:~/bin
  4. Python 模块 MySQLdb 已安装。
  5. 该代码没有智能引号。

[编辑]在第二个答案之后

您收到该错误是因为您尚未安装 Python 需要与 MySQL 数据库通信的 MySQLdb 模块

我将 MySQLdb 安装到我的系统中。该模块有效,因为我可以导入它们。但是,当我访问 www.[mysite].com/test.cgi 时,我仍然遇到同样的错误。

[编辑]

我不确定这些问题

connect() 参数是否正确?MySQL 是否在默认端口的 localhost 上运行?

我在我的服务器上运行 MySQL。关于 connect() 参数的问题在这里是否相关?

SELECT 语句是否正确?

你的意思是我的 SELECT 语句等 SQL 语句是否正确?我还没有使用任何 SQL 查询。我在这里需要它们吗?

4

4 回答 4

2

我通过在必要时插入换行符并用 and 替换智能引号来稍微整理了"代码'。你还有以下运气吗?您可以通过键入从终端运行它python test.cgi吗?

#!/usr/bin/env python

import MySQLdb

print "Content-Type: text/html"
print
print "<html><head><title>Books</title></head>"
print "<body>"
print "<h1>Books</h1>"
print "<ul>"

connection = MySQLdb.connect(user='me', passwd='letmein', db='my_db')
cursor = connection.cursor()
cursor.execute("SELECT name FROM books ORDER BY pub_date DESC LIMIT 10")

for row in cursor.fetchall():
    print "<li>%s</li>" % row[0]

print "</ul>"
print "</body></html>"

connection.close()
于 2009-03-07T14:12:58.353 回答
2

任何数量的问题都可能导致您看到的错误:

  1. 服务器上是否test.cgi可执行(chmod 755)?
  2. 您放置的目录是否被test.cgi指定为ScriptAlias位置或启用了ExecCGI选项(如果您不使用 Apache,则为等效)?
  3. python在系统PATH中还是在PATHWeb服务器的启动环境中?
  4. 是否安装了MySQLdb Python 库?
  5. 参数是否connect()正确?MySQL 是否在默认端口的 localhost 上运行?
  6. SELECT陈述是否正确?

如果您确定python找到了(使用最简单的脚本进行测试,或者如果可以的话,通过登录到 Web 服务器并键入which python),那么您可以通过将以下内容添加到脚本顶部的 shebang 下方来获得更好的调试输出:

import cgitb
cgitb.enable()

更多细节:http ://docs.python.org/library/cgitb.html

此外,如果您对 Web 服务器具有 shell 访问权限,请尝试运行 python 并输入:

>>> import MySQLdb

如果命令返回没有错误,那么您就有了上面 #4 的答案。如果打印错误,则需要将 MySQLdb 安装到 Web 服务器的 Python 安装中。

编辑:更仔细地查看您问题的顶部,我发现代码是从 Django Book 开头的说明性示例中抓取的。因此,我可能会扩展上面的#5 以包含警告,当然,需要在 Web 服务器可用的 MySQL 安装上设置必要的数据库、表、用户和权限。

于 2009-03-07T14:49:48.793 回答
1

发生http://dpaste.com/8866/中的错误是因为您使用的是“弯引号”而不是标准的 ASCII 引号。

您需要将“和”替换为“。只需在文本编辑器中使用查找和替换即可。

于 2009-03-07T16:30:45.993 回答
0

确保以正确的行结尾保存文件。即 LF 仅适用于 unix,或 CR/LF 适用于 Windows。我最近遇到了完全相同的问题...

于 2009-03-07T18:50:47.560 回答