Das mag etwas seltsam klingen, aber ich brauche das aus einem bestimmten Grund.

Ich brauche Python, um Daten in eine lokale PHP-Datei auf einem Linux-Server posten zu können und dann eine Antwort von PHP zu erhalten.

Ich habe das versucht:

p = subprocess.Popen("curl --data 'param1=value1&param2=value2' /home/hbmukwm/temp/receive.php", shell=True, stdout=subprocess.PIPE)
reply = p.stdout.read()

Aber wenn ich das mache, da es sich um eine lokale Datei handelt, erhalte ich den folgenden Curl-Fehler: curl: (3) fehlerhaft

Ich habe es auch so versucht (gefunden auf einer Stackoverflow-Antwort)

mydata=[('one','1'),('two','2')]
mydata=urllib.urlencode(mydata)
path='file:/home/hbmukwm/temp/receive.php'
req=urllib2.Request(path, mydata)
req.add_header("Content-type", "application/x-www-form-urlencoded")
reply=urllib2.urlopen(req).read()

Aber in diesem Fall bekomme ich die PHP-Antwort als einfachen Text, als würde ich nur versuchen, die PHP-Datei zu lesen. Ich denke wieder, dass dies geschieht, weil die PHP-Datei lokal ist, wie folgt:

<?php echo "test"; ?>

Anstatt nur

test

Hoffe das macht bisher Sinn. Alles was ich tun muss, ist die Daten in die lokale PHP-Datei zu POSTEN und dann die PHP-Antwort zurück an Python zu senden ... Ist das möglich ...

Jede Antwort wird sehr geschätzt, entschuldigen Sie meine Unwissenheit!

1
Zephni 4 Dez. 2013 im 20:29

4 Antworten

Beste Antwort

Vielen Dank an alle für Ihre Antworten, ich habe zumindest etwas gelernt! Der Grund, warum ich es als lokale Datei haben wollte, war, dass ich nicht wollte, dass die PHP-Dateien öffentlich zugänglich sind, obwohl Daten von jedem Ort, an dem die Anwendung ausgeführt wurde, an sie gesendet werden mussten. Meine Idee war es also, eine kleine Python-Anwendung zu erstellen, die auf einem Port auf dem Linux-Server ausgeführt wird, der Befehle entgegennimmt und diese an die lokalen PHP-Dateien auf dem Server übergibt.

Wie auch immer, ich habe diese Funktion mithilfe einer Befehlszeile (wie in meinem ersten Beispiel), außer mit:

p = subprocess.Popen("php /path/to/file 'data=this'", shell=True, stdout=subprocess.PIPE)

Und dann in den PHP-Dateien das Argument so greifen

$data = $argv[1];

Dadurch werden die Daten nicht wie ursprünglich gewünscht in die PHP-Dateien gepostet, aber ich glaube, ich habe falsch verstanden, was ich tun musste. Vielen Dank für all Ihre Hilfe! Ich kann nicht wirklich herausfinden, welche Ihrer Antworten die endgültige Antwort war, weil Sie alle richtig waren, was Sie gesagt haben, aber die Antwort, die ich jetzt poste, ist, wie ich das Problem überwinde.

Nochmals vielen Dank Jungs, Stack Overflow ist das Beste :)

2
user3061073 4 Dez. 2013 im 20:54

Sie benötigen einen Webserver, um PHP-Code auszuführen. Sie können es nicht einfach als Dateisystemspeicherort bezeichnen. Ich empfehle, dass Sie das [WML] AMP Webserver-Bundle auf Ihrem Computer installieren, das Apache , PHP , MySQL und es ist einfach für Anfänger einzurichten und zu konfigurieren. Hier sind die Links für die AMP-Familie. Verwenden Sie die, die

0
deadlock 4 Dez. 2013 im 16:41

Sie benötigen einen Webserver, um die PHP-Skripte tatsächlich zu analysieren und zu interpretieren. Falls Sie dies jedoch über die Befehlszeile tun möchten, sollten Sie auf dieser Seite einige Details finden: Verwendung der PHP-Befehlszeile. Sie haben nicht erwähnt, welche Version von PHP Sie verwenden, dies scheint jedoch seit PHP 4.3.0 unterstützt zu werden

0
Prahalad Deshpande 4 Dez. 2013 im 16:45

Ich denke, es ist Geschmackssache, aber ich verwende "xammp" von www.apachefriends.org. Von dort aus können Sie ganz einfach einen Webserver mit PHP5, SQL usw. einrichten. Mit BitNami können Sie auch Joomla und andere Dinge einfach installieren.

0
CrisBee21 4 Dez. 2013 im 16:48