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 として Web サーバーに保存しました。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. コードにはスマート クォートがありません。

[編集] 2番目の回答の後

PythonがMySQLデータベースと通信するために必要なMySQLdbモジュールをインストールしていないため、そのエラーが発生しています

システムに MySQLdb をインストールしました。それらをインポートできるので、モジュールは機能します。しかし、www.[mysite].com/test.cgi にアクセスしても同じエラーが表示されます。

[編集]

質問がよくわからない

connect() パラメータは正しいですか? MySQL は localhost のデフォルト ポートで実行されていますか?

サーバーでMySQLを実行しています。connect() パラメーターに関する質問はここで関連していますか?

SELECT文は正しいですか?

SELECT ステートメントなどの SQL ステートメントが正しいかどうかということですか? まだ SQL クエリを使用したことがありません。ここでそれらが必要ですか?

4

4 に答える 4

2

表示されているエラーは、いくつでも発生する可能性があります。

  1. test.cgiサーバー上で実行可能 (chmod 755) ですか?
  2. 配置したディレクトリは、 ScriptAliasの場所test.cgiとして指定されていますか、またはExecCGIオプションが有効になっていますか (または、Apache を使用していない場合は同等です)?
  3. pythonシステムPATHまたはPATHWeb サーバーの起動環境にありますか?
  4. MySQLdb Python ライブラリはインストールされていますか?
  5. connect()パラメータは正しいですか?MySQL は localhost のデフォルト ポートで実行されていますか?
  6. SELECT発言は正しいですか?

それが確実にpython見つかった場合 (最も単純なスクリプトを使用してテストするか、可能であれば Web サーバーにログインして と入力してテストしますwhich python)、スクリプトの先頭のシバンのすぐ下に以下を追加することで、より優れたデバッグ出力を得ることができます。 :

import cgitb
cgitb.enable()

詳細: http://docs.python.org/library/cgitb.html

さらに、Web サーバーへのシェル アクセス権がある場合は、python を実行して、次のように入力してみてください。

>>> import MySQLdb

コマンドがエラーなしで返された場合は、上記の #4 に対する回答が得られています。エラーが表示された場合は、MySQLdb を Web サーバーの Python インストールにインストールする必要があります。

編集:質問の上部を詳しく見ると、コードは Django Book の冒頭にある実例から削り取られたことがわかります。そのため、上記の #5 を拡張して、当然のことながら、必要なデータベース、テーブル、ユーザー、およびアクセス許可を、Web サーバーで利用可能な MySQL インストールでセットアップする必要があるという警告を含めることができます。

于 2009-03-07T14:49:48.793 に答える
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 に答える