PHP in Python Webserver integrieren

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
DerScriptGuru
User
Beiträge: 2
Registriert: Freitag 11. April 2014, 21:24

Hallöchen alle miteinander!

Ich bin noch neu hier im Forum und hoffe, dass ich hier das richtige Unterforum habe.

Also ich arbeite gerade an einem kleinen Python Webserver der als miniprojekt gedacht ist (um in Python wieder einzusteigen) und auch nicht den Umfang von Apache haben soll.
Er soll nicht mehr können als Dateien zum downloaden bereitzustellen (bereits implementiert) und HTML Dokumente mit eingebautem PHP
korrekt darzustellen.

Mein Problem
Wie schaffe ich es nun dem PHP Teil des Dokumentes diesen Code von php interpretieren zu lassen und anschließend dem user darzustellen?

Ich nutze übrigens Python 2.7.3
Leider bin ich in Python nicht so gut (und kenn mich auch in der Serverprogrammierung nicht aus :/

Hier ist der Server den ich soweit zusammengekratzt habe (aus diversen Internet Beispielen >.< )

Code: Alles auswählen

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from SocketServer import ThreadingMixIn
from mimetypes import MimeTypes
import urllib
import urlparse
import threading

class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
    """multithreading ftw!!"""

class HTTPHandler(BaseHTTPRequestHandler):

    def displayPage(self, name):
        root = 'C:/Users/PrideRage/Desktop/server'
        f = open(root + name, 'rb')
        self.send_response(200)
        mime = MimeTypes()
        url = urllib.pathname2url(name)
        mimetype = mime.guess_type(url)
        self.send_header('Content-Type', mimetype)
        self.end_headers()
        self.wfile.write(f.read())
        f.close() 
    
    def do_GET(self):
        try:
            if self.path == '/':
                self.displayPage('/index.html')
            else:
                self.displayPage(self.path)

        except IOError:
            self.send_error(404, 'File not found!')
        return

def runServer():
    try:
        print 'starting server'
        server_address = ('192.168.178.23', 80)
        server = ThreadedHTTPServer(server_address, HTTPHandler)
        print 'server is running.\nterminate server with Ctrl + C'
        server.serve_forever()
    except KeyboardInterrupt:
        server.socket.close()
        print 'server shut down sucessfully!'

if __name__ == '__main__':
    runServer()
BlackJack

@DerScriptGuru: Sich nicht gut in Python auskennen, und auch nicht in Serverprogrammierung, und sich den Code aus Beispielen zusammenkratzen, sind nicht wirklich gute Voraussetzungen um einen Webserver selber zu programmieren. So umfangreich ist der Apache letztendlich auch nicht. Wenn man einen schlankeren Webserver möchte, kann man sich nginx anschauen, da wird dann aber wieder mehr Wissen vorausgesetzt um dort PHP zu integrieren als beim Apache, wo das sehr einfach ist.

Wenn Du trotzdem unbedingt selber implementieren möchtest, musst Du die entsprechenden Dokumenten durch den PHP-Interpreter jagen und die Ausgabe an den Client ausliefern. Entweder direkt ``php``, oder das speziellere ``php-cgi``, oder Du setzt mit ``php-fpm`` einen FastCGI-Server auf und programmierst dazu einfach nur einen Proxy.
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@DerScriptGuru: php erwartet wie jedes andere CGI-Programm einige Environment-Variablen, die Informationen über den Server, den Client und den Seitenaufruf breitstellen. Wenn Du noch POST-Requests zulassen willst, auch noch die Daten über stdin. Das alles mußt Du beim Aufruf des php-Interpreters durch die Python-Funktion subprocess.popen setzen und dann einfach alles, was auf stdout wieder zurückkommt an den Client schicken.
DerScriptGuru
User
Beiträge: 2
Registriert: Freitag 11. April 2014, 21:24

Danke für eure Antworten. Ich konnte das Problem nun lösen :)
Antworten