4

Windows上で単純なpython Webサーバーを書いています..

それは機能しますが、htmlページだけでなく動的スクリプト(phpまたはpy)を実行したい..

ここに私のコードがあります:

from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler

class RequestsHandler(CGIHTTPRequestHandler):
    cgi_directories = ["/www"] #to run all scripts in '/www' folder
    def do_GET(self):
        try:
            f = open(curdir + sep + '/www' + self.path)
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(f.read())
            f.close()
        except IOError:
            self.send_error(404, "Page '%s' not found" % self.path)

def main():
    try:
        server = HTTPServer(('', 80), RequestsHandler)
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()

if __name__ == '__main__':
    main()

PHPコードをwwwフォルダーに配置すると、ページは表示されますが、コードは解釈されません

私がしなければならないこと?ありがとう

4

4 に答える 4

4

あなたはエンジニアリングを超えていると思います。

#!/usr/bin/env python
import CGIHTTPServer

def main():

    server_address = ('', 8000)
    handler = CGIHTTPServer.CGIHTTPRequestHandler
    handler.cgi_directories = ['/cgi']
    server = CGIHTTPServer.BaseHTTPServer.HTTPServer(server_address, handler)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()

if __name__ == '__main__':
    main()
于 2011-03-19T22:28:53.467 に答える
4

初めての Python CGI Web サイト

初めて Web サーバーを作成する人のために、この簡単な例を、それを機能させるために必要なすべてのステップと一緒にまとめました。作成する必要があるファイルは 2 つあります。最初のserver.pyは、Web サーバーを実行するスクリプトです。2 つ目は、サーバーが実行し、その出力を「Web ページ」としてブラウザーに送信する Python CGI スクリプトです。

最初に、ホーム ディレクトリにsimple_serverのようなサーバー用のプロジェクト フォルダーを作成するか、プロジェクトを置きたい場所に置きます。

そのフォルダーにcgi-binというサブフォルダーを作成します。次に、最初のスクリプトをファイルserver.pyにコピーし、それをsimple_serverに配置します。次に、ファイルmy_cgi_script.pyを作成し、cgi-binフォルダーに配置します。これらのファイルは、このハウツーの本文の下にあります。

ディレクトリ構造は次のようになります。

|
-- [simple_server]
      |
      -- server.py
      |
      -- [cgi-bin]
            |
            -- my_cgi_script.py

my_cgi_script.pyにパーミッションを設定して実行可能にする必要があります。そうしないと、Web サーバーはそれを実行して Web ページの出力を生成できません。Linux または MacOS を使用している場合は、コマンド シェルで次のように入力します。

$ chmod +x cgi-bin/my_cgi_script.py

Windows では、ファイル エクスプローラーでファイルを見つけて右クリックし、そのアクセス許可で実行が許可されていることを確認します。

コマンド シェルを開き、cdsimple_serverフォルダーに移動して、server.pyスクリプトを実行します。

$ cd simple_server
$ python server.py

これまでのところ、何も出力せずに静かに実行する必要があります。次に、お気に入りのブラウザーの新しいタブで、次の URL を参照します。

http://localhost:8000/cgi-bin/my_cgi_script.py

"こんにちは世界!" Web ページとして空白の多いブラウザに表示されるはずです (すぐに表示されない場合は、左上隅を探してください)。やったね!Python CGI を使用して最初の Web サイトを作成しました。

サーバー.py

from http.server import HTTPServer, CGIHTTPRequestHandler

if __name__ == '__main__':
    try:
        CGIHTTPRequestHandler.cgi_directories = ['/cgi-bin']

        httpd = HTTPServer(('', 8000),             # localhost:8000
                           CGIHTTPRequestHandler)  # CGI support.

        print(f"Running server. Use [ctrl]-c to terminate.")

        httpd.serve_forever()

    except KeyboardInterrupt:
        print(f"\nReceived keyboard interrupt. Shutting down server.")
        httpd.socket.close()

cgi-bin/my_cgi_script.py

#!/usr/bin/env python
# The line above ^ is important. Don't leave it out. It should be at the
# top of the file.

import cgi, cgitb # Not used, but will be needed later.

print("Content-type: text/html\n\n")
print("hello world!")

実行した場合、「何が起こったのか?」と疑問に思うかもしれません。server.pyがセットアップされ、Web サーバーが実行されています。を使用してスクリプトを実行するように構成されていますCGIHTTPRequestHandler。このリクエスト ハンドラは、cgi-binフォルダ内のファイルをスクリプトとして実行します。コマンド シェルを使用してこれを行います。

my_cgi_script.pyの上部にある#!/usr/bin/env python行は、Python インタープリターを使用してファイル内のコードを実行するようにコマンド シェルに指示します。

ブラウザーに入力した URL は、サーバーによってファイルへのパスとして認識されます。この場合、cgi-binフォルダーの下にある CGI スクリプトmy_cgi_script.pyです。http://localhost:8000/cgi-bin/my_cgi_script.py

サーバーが実行されているコマンド シェルを見ると、処理された Web トラフィックの詳細を示すメッセージが表示されます。このサーバー プロセスにアクセスするたびに、さらに多くのメッセージが出力されます。ブラウザを更新して確認してください。

my_cgi_script.pyを変更してより多くのテキストを出力したり、HTML タグを出力してより興味深い Web ページを生成したりできます。

CGI スクリプトを組み込んだ Web ページを作成するには、index.htmlという名前のファイルを作成し、それをserver.pyのあるフォルダーに配置します。index.htmlの内容は以下のとおりです。

index.html

<!DOCTYPE html>
<html>
  <body>

    <h1>My First Heading</h1>
    <p>My first paragraph.</p>

    <!-- Simple example to include text from the CGI script in this web page. -->

    <object type="text/html" data="/cgi-bin/my_cgi_script.py"></object>

  </body>
</html>

ディレクトリ構造は次のようになります。

|
-- [simple_server]
      |
      -- server.py
      |
      -- index.html
      |
      -- [cgi-bin]
            |
            -- my_cgi_script.py

それが完了したら、サーバー プロセスを停止した場合は、もう一度起動してhttp://localhost:8000参照し、「hello world!」が表示されることを確認します。「私の最初の段落」の下。index.htmlは、Web サーバーが URL のデフォルト ページとして使用する特別なファイル名です。これで、優れた Web サイトを作成するための基本がすべて揃いました。

今後、学習や本格的な開発に最適な Web 開発フレームワークはどうあるべきかについては、さまざまな意見があります。この例から、非常に基本的な構成、セットアップ、およびブラウザーとサーバーの対話について感覚をつかむことができます。

さて、問題はここからどこへ行くかです。上記のモデルを引き続き追求し、Python CGI スクリプトを使用してより多くの機能を基本サイトに組み込み、それらを HTML ページのフォーム アクションにバインドする方法を学ぶことができます。それは完全に有効な道であり、多くのことを学べるでしょう。

Django と呼ばれる製品品質の Web サーバーを使用する優れたサイトを誰かが勧めてくれました。私が集めたものによると、Web 開発を始めるのに役立つ非常に優れたチュートリアルやその他のリソースがあります。

そのサイトは Django Girls Tutorial です。このサイトの名前に惑わされないでください。誰もがこのチュートリアルから利益を得ることができ、Django を使用した Web 開発を進めるために必要なツールとテクノロジの非常に優れた紹介を提供します。

Django Girls は、世界中でイベントを主催する女性向けのアクティブな開発者コミュニティであり、女性の進歩を支援できる他のユーザーとつながります。

Django Girls チュートリアル: https://tutorial.djangogirls.org/en/

より詳細な Python CGI の例: https://www.tutorialspoint.com/python/python_cgi_programming.htm

HTML を学習するには、このサイトに優れたチュートリアルがあります: https://www.w3schools.com/html/default.asp

CGI サポート モジュールcgiのリファレンス: https://docs.python.org/3/library/cgi.html

この例で使用されているクラスを含むドキュメントは、https ://docs.python.org/2/library/internet.html にあります。

于 2020-04-11T08:14:51.737 に答える
1

phpファイルを実行可能にしましたか?? chmod +x spam.php (Linux の場合、Windows でファイルを実行可能にする方法がわかりません)

PCにPHPインタープリターもインストールする必要があります

返信のソースはこちら

THISを間接的な代替手段として使用することも検討する必要があります。

于 2011-03-19T06:56:37.560 に答える
0

問題は CGIHTTPServer クラスにあります。CGI 環境変数を設定しません。これはここで修正されました:
https://github.com/gabrielgrant/tonto/blob/master/tonto.py

于 2016-10-10T03:36:37.917 に答える