CGIHTTPRequestHandler запустить PHP или Python скрипт в Python

Я пишу простой Python веб-сервер на Windows..

это работает, но теперь я хочу запускать динамические скрипты (php или py), а не только HTML-страницы..

вот мой код:

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, я получаю страницу, но код не интерпретируется

что мне нужно сделать? Спасибо

3 ответа

Ваш первый веб-сайт CGI на Python

Для тех, кто создает свой первый веб-сервер, я сопоставил этот простой пример со всеми необходимыми шагами, чтобы заставить его работать. Необходимо создать два файла. Первый, server.py, - это сценарий, запускающий веб-сервер. Второй - это сценарий 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, чтобы сделать его исполняемым - иначе веб-сервер не сможет запустить его для генерации вывода веб-страницы. Если у вас Linux или MacOS, введите в командной оболочке:

$ chmod +x cgi-bin/my_cgi_script.py

В Windows найдите файл с помощью проводника, щелкните его правой кнопкой мыши и убедитесь, что его разрешения разрешают выполнение.

Откройте командную оболочку и cdв папку simple_server и выполните скрипт server.py:

$ cd simple_server
$ python server.py

Он должен работать без вывода сообщений. Затем в новой вкладке в вашем любимом браузере перейдите по этому URL-адресу:

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

"Привет мир!" должен отображаться в браузере с большим количеством пробелов в качестве веб-страницы (ищите его в верхнем левом углу, если вы не видите его сразу). Вот и все! Вы создали свой первый веб-сайт с Python CGI!

server.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 настроен и работает на веб-сервере. Он настроен на запуск скриптов с использованиемCGIHTTPRequestHandler. Этот обработчик запросов будет запускать файлы в папке cgi-bin как сценарии. Для этого используется командная оболочка.

В верхней части my_cgi_script.py, в#!/usr/bin/env python Строка указывает командной оболочке выполнить код в файле с помощью интерпретатора Python.

URL-адрес, введенный вами в браузере, воспринимается сервером как путь к файлу - в данном случае сценарий CGI, my_cgi_script.py, в папке cgi-bin:http://localhost:8000/cgi-bin/my_cgi_script.py

Если вы посмотрите на командную оболочку, в которой работает сервер, вы увидите сообщения с подробным описанием обрабатываемого веб-трафика. Каждый раз, когда вы обращаетесь к этому серверному процессу, он будет выводить больше сообщений - попробуйте обновить в браузере и посмотреть.

Теперь вы можете изменить my_cgi_script.py, чтобы выводить больше текста, или вы можете настроить вывод HTML-тегов и создать более интересную веб-страницу.

Чтобы создать веб-страницу, включающую сценарий CGI, создайте файл с именем 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 - это специальное имя файла, которое веб-серверы используют в качестве страницы по умолчанию для своих URL-адресов. Теперь у вас есть все необходимое для создания отличного веб-сайта!

В дальнейшем существуют различные мнения о том, какой должна быть лучшая среда веб-разработки для обучения или серьезной разработки. Из этого примера вы должны получить представление об очень простой конфигурации, настройке и взаимодействии браузера / сервера.

Итак, теперь вопрос в том, что делать дальше? Вы можете продолжить следовать указанной выше модели и узнать, как добавить больше функций в основной сайт с помощью скриптов Python CGI и связать их для формирования действий на странице HTML. Это был бы совершенно правильный путь, и вы, вероятно, многому научитесь.

Кто-то порекомендовал мне хороший сайт, который использует качественный веб-сервер под названием Django. Насколько я понимаю, в нем есть очень хорошие руководства и другие ресурсы, которые помогут начать веб-разработку.

Этот сайт называется Django Girls Tutorial. Не обращайте внимания на название сайта, любой может извлечь выгоду из этого учебника, и он дает очень хорошее введение в инструменты и технологии, которые вам понадобятся для продвижения в веб-разработке с Django.

Django Girls - активное сообщество разработчиков для женщин, которое проводит мероприятия по всему миру и связывает их с другими людьми, которые могут помочь в их прогрессе.

Учебник для девочек Django: 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.

Я думаю, что вы закончили разработку.

#!/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()

Вы сделали исполняемый файл php?? chmod +x spam.php (для Linux я понятия не имею, как сделать файлы исполняемыми на windows)

Вам также понадобится установить интерпретатор PHP на вашем ПК

источник из ответа ЗДЕСЬ

Вам также следует рассмотреть возможность использования ЭТОГО в качестве косвенной альтернативы.

Проблема с классом CGIHTTPServer. Он не устанавливает переменные CGI env. Это было исправлено здесь:
https://github.com/gabrielgrant/tonto/blob/master/tonto.py

Другие вопросы по тегам