Daten per Python anPHP übergeben

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
lordmyder

Hallo,
ich habe ein Problem: Ich muss Daten (in Form von langen Texten) an PHP übergeben.
Ich weiß das ich per url in PHP Variablen definieren kann, aber meine Daten sind dafür zu viel.
Deshalb würde ich das ganze gerne mit Mysql lösen, da ich meine Daten sowieso in Tabellen brauch.
Es ist kein Problem die Tabellen per Python zu füllen, das funktioniert einwandfrei.
Mein Problem ist nun, dass ich die Zugangsdaten für die Datenbank in dem Script speichern muss. Ich möchte das Programm später öffentlich zugänglich machen, und kann es mir natürlich nicht erlauben, dass jemand dieses Passwort sieht. Auch wenn das Programm nur als .exe verfügbar sein wird, ist es doch bestimmt möglich es auszulesen, oder?

Kann mir jemand sagen, wie man sowas am besten löst?

Danke schonmal!!
Gruß
LordMyder
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Warum verschickst du die Daten nicht einfach per POST?
lordmyder

Damit kann ich erstmal nix anfangen...=)
Wie meinst du das?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Installier dir phpserialize: http://pypi.python.org/pypi/phpserialize/1.0

Dann kannst du sowas machen:

Code: Alles auswählen

from phpserialize import dumps
from urllib import urlopen, urlencode

urlopen('http://example.com/yourscript.php', urlencode({
    'data': dumps(deine_variable)
}))
Und in PHP

Code: Alles auswählen

$deine_variable = unserialize($_POST['data']);
TUFKAB – the user formerly known as blackbird
lordmyder

Danke für den Tipp. Das Modul ist ganz cool.
Aber ich will ja größere Datenmengen "transportieren" und da die Länge einer URL begrenz ist, kann ich nicht so vorgehen um die Daten zu übermitteln.
Oder geht das doch?
Zuletzt geändert von lordmyder am Freitag 13. Juni 2008, 15:50, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sollte man dann nicht langsam anfangen über eine temporäre Datei nachzudenken?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Wenn du die Daten mit POST verschickst, dann werden sie nicht in der URL codiert, dass ist ja gerade einer der Vorteile.
lordmyder

Ich habe alles genauso gemacht wie es mitsuhiko beschrieben hat, aber irgendwie klappt das garnicht...
Es scheint als kommt nichts auf meiner Website an.

Code: Alles auswählen

from phpserialize import dumps 
from urllib import urlopen, urlencode 

urlopen('http://lordmyder.de/test.php', urlencode({'data': dumps("test1234")}))
Auf meiner Website in php:

Code: Alles auswählen

<?
$data = unserialize($_POST['data']);
setcookie("data", $data);
?>
Den Cookie kann ich dann zur Überprüfung auf einer anderen Seite auslesen, aber er ist stets leer...
Kann mir jemand sagen, was ich falsch mache?
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

lordmyder hat geschrieben:Den Cookie kann ich dann zur Überprüfung auf einer anderen Seite auslesen, aber er ist stets leer...
Kann mir jemand sagen, was ich falsch mache?
Aber das Cookie gilt nur für das Python script, das die Daten dort hinschaufelt. Um das zu debuggen mach ein "echo" statt setcookie und mach in python "print urlopen(...).read()"
Dann müsste im Python script wieder das ankommen, was du in PHP auch empfangen hast.
TUFKAB – the user formerly known as blackbird
lordmyder

Also ich weiß auch nicht, irgendwie scheine ich mich total doof anzustellen, aber ich kriege es ums verrecken nicht hin.
Ich habe jetzt alles so gemacht wie du gesagt hast:

Code: Alles auswählen

from phpserialize import dumps 
from urllib import urlopen, urlencode 

print urlopen('http://lordmyder.de/test.php', urlencode({'data': dumps("test1234")})).read()

Code: Alles auswählen

<?
$data = unserialize($_POST['data']);
echo $data;
?>
Aber das Python Script gibt nichts aus...

Was mache ich noch falsch?[/code]
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Hint: Magic Quotes.
lordmyder

Den Hint verstehe ich nicht.
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Ein Feature von PHP, das wohl der Dummheit des Entwicklers entgegen kommen soll.
http://php.net/magic_quotes hat geschrieben:What are Magic Quotes
When on, all ' (single-quote), " (double quote), \ (backslash) and NULL characters are escaped with a backslash automatically. This is identical to what addslashes() does.
Da deine Daten, die du sendest, aber solche Zeichen enthalten, werden diese maskiert und ``unserialize`` kann mit den Daten dann nichts mehr anfangen.
lordmyder

Also bedeutet das für mich, dass ich so auch nicht vorgehen kann, oder?

Dann stellt sich für mich die Frage, wie kann ich meine Daten an PHP übergeben?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

Du musst die Slashes eben wieder entfernen.

Code: Alles auswählen

<?PHP
$data = unserialize&#40;stripslashes&#40;$_POST['data']&#41;&#41;;
echo $data;
?>
sollte es eigtl tun. Evtl noch prüfen, ob Magic Quotes aktiviert sind. Aber jemand, der PHP kann, kann dir das sicher besser sagen als ich.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst Magic Quotes ausschalten, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

lordmyder

Danke euch allen! Es funktioniert...=)
Antworten