WebWork Magazin - Webseiten erstellen lassen, Online Medien, html

Webhoster, Webhosting Provider und Domain registrieren

Home | Registrieren | Einloggen | Suchen | Aktuelles | GSL-Webservice | Suleitec Webhosting
Reparatur-Forum | Elektro forum | Ersatzteilshop Haushalt und Elektronik



Im Homepage und Webhosting-Forum --- Problem mit Server-Kommuniaktion

Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.

Forum » PHP & MySQL » Problem mit Server-Kommuniaktion - 29 März 2024 Antworten
im Forum für Webhosting Homepage gefunden:
Problem mit Server-Kommuniaktion
Wolf
Pixelschubser
Threadstarter




Beiträge: 4

Hi,
im Grudne bin ich Autodidakt und lernte PHP nur aus einem Buch ... aber "programmieren" lernte ich schon vor Jahrezehnten ;). Deshalkb bin ich auch mit so manchem "neuen Zeug" nicht vertraut.

Problem:

Ausgangslage: Daten aus einem Web-Formular werden per POST an ein cgi-script übergeben (perl) - kein Problem. (Alles wo “kein Problem” steht, funktioniert).

Zwischenstufe: Um eine Verfizierung der Einträge vorzunehmen, werden die Daten statt an das cgi-Script an ein (neu geschriebenes) Php-Script übergeben, welches diese (vorläufig) in einer DB speichert - kein Problem. Das selbe Script schickt eine Mail mit einem Verfikations-URL (ein weiteres php-Script) an den eintragenden Surfer - kein Problem.

Endstufe: Wenn die Verifikation (Anklicken des URL, besagtes weitere php-Script) kommt, wird der Datensatz in der DB lokalisiert, extrahiert und gelöscht - kein Problem.

Dann müssen die (im Datensatz befindlichen) Daten an das ursprüngliche Formular geschickt werden. Zur Zeit mache ich das mit ...

header("Location: http://www.domain/pfad/zum/script.cgi?$cgi_string", "r"); - wobei “$cgi_string” die Daten korrekt enthält aber ...

Problem: Jetzt werden die Daten offenbar per GET übergeben, und das originale cgi-Script läuft fehl, weil es diese per POST erwartet.

Frage: Wie kann ich die Daten aus einem PHP-Script heraus ohne Interaktion mit dem Formular per GET an das originale Script übergeben? Oder ... wie erzeuge ich im PHP-Script einen “GET”-Aufruf mit Datenübergabe, aber ohne Formular und User-Interaktion?
UND ... wie “fange ich ab” die http-Ausgabe des originalen Scripts (entweder OK und “Danke etc ...” oder “Error nnn etc...”) nach Übergabe der Daten, um sie im php-Script zu analysieren und entsprechende Aktionen abzuleiten?

Frage am Rande, die sich erst in der Folge stellen wird:

Wie stelle ich sicher, dass dieser “Mechanismus” “re-entrant” ist, das heißt, dass mehrere User “gleichzeitig” ihren Verifikations-URL anklicken können, ohne dass es zu Kollisionen kommt? (Es muss da so etwas wie eine “Lock”-Funktion geben, von der ich aber in meinem PHP-Buch bisher NULL Info finden konnte. Ggf. hilft mir auch ein Verweis auf entsprechende Literatur oder Website ...)

Bin für jede Hilfe dankbar!
Wolf

  Profil   E-Mail   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

Frage: Wie kann ich die Daten aus einem PHP-Script heraus ohne Interaktion mit dem Formular per GET an das originale Script übergeben? Oder ... wie erzeuge ich im PHP-Script einen “GET”-Aufruf mit Datenübergabe, aber ohne Formular und User-Interaktion?


Du meinst POST? GET hast du doch schon automatisch durch das anhängen des Query-Strings. Zum POSTen musst du eine Socket-Verbindung mit dem Ziel aufbauen. Näheres dazu steh hier: http://php.net/fsockopen Abfangen der Daten - vermute ich - geht dann über fgets.

Das ganze Gebastel mit dem anderen Script klingt auch nicht gerade schön. Wenn das CGI-Teil nicht zu umfangreich ist, solltest du vielleicht einfach alles auf PHP umstellen.

Zum Locking: Meinst du einen Mutex oder sowas für die Datenbank? Die regelt das schon selbst. Wenn du meinst, wie du verschiedene User voneinander unterscheiden kannst, musst du jedem Nutzer einfach eine eindeutige Kennung zuweisen. Das einfachste wäre ein auto_increment in deiner Datenbank. Das müsste der Nutzer dann halt per GET in seinem Verifikationslink angeben.

  Profil   Editieren   Zitieren
Wolf
Pixelschubser
Threadstarter




Beiträge: 4

Danke, languitar!

Ja klar, hab' mich vertippt mit dem Post/Get - zu dumm.

Danke Dir für den Hinweis auf fsockopen ... das werd' ich mir zu Gemüte führen und entsprechend einbauen! Zum vorhandenen cgi-Script: Es ist Teil einen größeren Software-Komplexes, den ich nicht austauschen möchte (Kosten!)

Zu den mehrern Usern ... eigentlich meinte ich das Script selbst, ja, Mutex: Es könnte ja sein, dass zwei User irgendwo in der Welt zur gleichen Zeit eine Verfikation abschicken ... und das könnte eine Kollision in der Datenbank geben. "Selbst regeln" wird sich vermutlich nur eine SQL-Datenbank - nicht aber eine "flat file"-Datenbank, die ich hier habe. Vermutlich wird es besser sein, das mit MySQL zu machen ... ist wirklich eine Überlegung wert! (Wollte ich ursprünglich nicht, weil es ja kaum Hunderte Datensätze (= Zeilen) werden.

Herzlichen Dank vorerst! Ich melde mich wieder, wenn ich Fortschritt vermelden kann!
Wolf


  Profil   E-Mail   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

Für Dateien gibt es eine Form von RW-Locks. flock heißt die entsprechende Funktion: http://php.net/flock

  Profil   Editieren   Zitieren
Wolf
Pixelschubser
Threadstarter




Beiträge: 4

Danke, languitar!
- prima, die Info zum Lock! ) - kann ich gut gebrauchen!

Noch eine Frage zum fsockopen ...

Ich habe folgenden Code gemacht:

#($cgi_string = wie vorher ... der korrekte Post-String);
$uri = "www.domain.tld/cgi-bin/pfad/zum/script.cgi";
$host = "www.domain.tld";

$da = fsockopen("www.domain.tld/cgi-bin/pfad/zum/script.cgi", 80, $errno, $errstr, 30);
if (!$da) {
echo "$errstr ($errno)
\n";
echo $da;
}
else {
$send_str = "POST $uri HTTP/1.1\r\n";
$send_str .= "Host: $host\r\n";
$send_str .= "User-Agent: PHP Script\r\n";
$send_str .= "Content-Type: application/x-www-form-urlencoded\r\n";
$send_str .= "Content-Length: ".strlen($cgi_string)."\r\n";
$send_str .= "Connection: close\r\n\r\n";
$send_str .= $cgi_string;
fwrite($da, $send_str);

echo $da, $uri, $send_str;
}

... und erhalte folgenden Fehler:

Warning: fsockopen() [function.fsockopen]: php_network_getaddresses: getaddrinfo failed: Name or service not known in /home/marketce/public_html/dopt/capture/verify.php on line 53

Warning: fsockopen() [function.fsockopen]: unable to connect to www.domain.tld/cgi-bin/pfad/zum/script.cgi:80 in /home/marketce/public_html/dopt/capture/verify.php on line 53
Permission denied (13)

- leider kann ich so gut wie nichts damit anfangen, weil ich nicht sehen kann, wo "getaddrinfo" herkommt, und weshalb plötzlich "Permission denied" sein sollte. :( - Hast Du dazu eine Idee, eine Erklärung? Möglicherweise ist an meinen Variablen was falsch ...
zum abschließenden "echo" kommt es offenbar nicht mehr, oder aber die Variablen sind da leer.

Übrigens: alles, was oben als "domain.tld/cgi-bin/pfad/zum/script.cgi" lautet, sind in Wahrheit die korrekten URIs, wie sie perfekt im Browser funktionieren.

Was ich noch nicht probiert habe, was mir aber jetzt beim Schreiben in den Sinn kam: Möglicherweise sollte "$host" der Netzwerkname der Maschine sein ... der ist lautet "host.domain.net" (dieselbe Adresse, die die Nameserver haben, aber eben "host" statt "ns#"; das Ganze ist auf einem "dedicated Server").

Übrigens: Ganz herzlichen Dank, dass Du Dich meiner Problemchen so nett annimmst! Finde ich ganz großartig.

Wolf


  Profil   E-Mail   Editieren   Zitieren
languitar
Foren-Team




Beiträge: 2795

So wie ich die Beispiele auf der Manual-Seite deute, musst du dich mit dem host, als www.domain.tld verbinden und dann halt in dem HTTP-Request die entsprechende Seite anfordern. Würd ich zumindest jetzt vermuten. Der Comment von bimal dot das at maxartists dot com am 07-Jun-2006 11:22 auf der Manual-Seite sollte dir weiterhelfen.

  Profil   Editieren   Zitieren
Wolf
Pixelschubser
Threadstarter




Beiträge: 4

Danke!

Das beginnt wirklich Spaß zu machen: - ich bin trotz knapper Zeit schon recht viel weiter gekommen! Sagenhaft.

Offenbar läuft der Aufruf jetzt schon prinzipiell richtig, aber der Server meldet mir jetzt ...

Bad Request
Your browser sent a request that this server could not understand.
Request header field is missing colon separator.

DIESE Fehlermeldung ist aber recht prominent im Web zu finden, also da werde ich mich schon allein durchkämpfen können - und mich deshalb für ein paar Tage hier "abmelden".

Herzlichen Dank für das freundliche "unter die Fittiche-Nehmen" - es hat mir viel geholfen! Und ich habe eine Menge gelernt aus den Verweisen! Dank.

Wolf

  Profil   E-Mail   Editieren   Zitieren
 

Antworten
Forum » PHP & MySQL » Problem mit Server-Kommuniaktion

Aktuelle Beiträge zur Hilfe im Forum für Homepage - Problem mit Server-Kommuniaktion im Forum Homepage Hosting AntwortenLetztes Posting
Best online slots
in "PHP & MySQL"
0 23.01.2023 22:40 von Sevetr
Rangliste (Ohne Mysql) (Kompliziertes Ordner System)
in "PHP & MySQL"
3 19.07.2021 06:00 von newtopblog
kleines problem mit phpadmin
in "PHP & MySQL"
5 11.04.2021 22:22 von Zavylon
Counter mit PHP
in "PHP & MySQL"
4 22.03.2021 16:29 von Robeni
Fehlermeldung beim Importieren der Datenbank in phpmyadmin
in "PHP & MySQL"
0 02.08.2019 22:14 von iFuchs
CMS für Online Shop
in "PHP & MySQL"
18 26.05.2019 13:29 von raiserle
Regestrierungproblem
in "PHP & MySQL"
3 28.11.2018 13:20 von norbertofahey
PHP Datum ausgeben?
in "PHP & MySQL"
1 19.10.2018 10:04 von Klaus1973
PHP befehl ausführen
in "PHP & MySQL"
11 16.08.2018 09:08 von Klaus1973
Visual Composer selber programmieren?
in "PHP & MySQL"
0 22.01.2017 23:45 von Redji
php preg_replace_callback für dynamischen Link
in "PHP & MySQL"
0 05.07.2016 11:02 von Rm21
PHP Code verschlüsseln
in "PHP & MySQL"
20 21.02.2016 21:25 von Kilian1
migrierter WP-Blog läuft nicht ...
in "PHP & MySQL"
0 04.02.2016 02:01 von Oxygon



Besucher : 7975225    Heute : 176     Gestern : 388     Online : 31     29.3.2024    13:22      1 Besucher in den letzten 60 Sekunden        
alle 60.00 Sekunden ein neuer Besucher
Nach oben