Mischen mehrerer Werte für den gleichen Upload von Schlüsseln und Dateien mit cURL und PHP

8

Ich bin auf eine Beschränkung der cURL-Bindungen für PHP gestoßen. Es scheint, dass es keine einfache Möglichkeit gibt, dieselben Mehrfachwerte für denselben Schlüssel für Postfelder zu senden. Die meisten der Workarounds, die ich dafür gefunden habe, beinhalteten das Erstellen der URL-codierten Post-Felder durch Hand-Tag = foo & amp; tag = bar & amp; tag = baz) anstelle der assoziativen Array-Version von CURLOPT_POSTFIELDS.

Es scheint, als wäre es eine ziemlich häufige Sache, Unterstützung zu brauchen, so dass ich das Gefühl habe, etwas verpasst zu haben. Ist das wirklich die einzige Möglichkeit, mehrere Werte für den gleichen Schlüssel zu behandeln?

Obwohl diese Problemumgehung als praktikabel betrachtet werden kann (wenn auch nicht wirklich störend), ist mein Hauptproblem, dass ich mehrere Werte für den gleichen Schlüssel ausführen und auch den Datei-Upload unterstützen kann. Soweit ich das beurteilen kann, benötigt der Datei-Upload mehr oder weniger die Verwendung der Arravy-Version von CURLOPT_POSTFIELDS. So fühle ich mich wie ich feststecke.

Ich habe zu diesem Problem ausführlich in der cURL PHP-Mailingliste gepostet in der Hoffnung, dass da jemand ein paar Ideen dazu hat.

Vorschläge oder Hinweise, wo ich weitere Informationen dazu finden kann, werden sehr geschätzt!

    
Beau Simensen 31.12.2008, 10:26
quelle

7 Antworten

10

Ich habe schließlich meine eigene Funktion geschrieben, um eine benutzerdefinierte CURLOPT_POSTFIELDS-Zeichenfolge mit multipart / form-data zu erstellen. Was für ein Schmerz.

%Vor%

Ich konnte diese Methode folgendermaßen verwenden:

%Vor%

Ich bin mir der CURLOPT_HTTPHEADER-Stapel nicht sicher. Da diese Methode sie aufruft, habe ich sichergestellt, dass die Funktion es dem Benutzer ermöglicht, bei Bedarf zusätzliche Kopfzeilen anzugeben.

Ich habe den vollständigen Code verfügbar in diesem Blogbeitrag .

    
Beau Simensen 01.01.2009, 05:07
quelle
3

Wenn Sie tag[] anstelle von tag für den Namen verwenden, PHP erzeugt ein Array für Sie, mit anderen Worten

%Vor%

Sie brauchen

%Vor%

Beachten Sie, dass wenn es für die Übertragung urlencodiert wird, sollte es

werden %Vor%     
Paul Dixon 31.12.2008 11:03
quelle
2

Ich stieß auf das gleiche Problem. Aber ich konnte es auf diese Weise lösen.

%Vor%

Funktioniert auch für Dateien:

%Vor%     
berg 10.01.2010 00:14
quelle
1

Ich denke, der etablierte Standard für mehrere Werte in einem Schlüssel (oder dem gleichen Schlüssel) besteht darin, ihn mit einem Trennzeichen verketten zu lassen, beispielsweise für Mehrfachauswahlen von Optionslisten in Formularelementen. Ich glaube, dass dieses Trennzeichen das Tab-Zeichen ( \t ) oder das Pipe-Symbol ( | ) ist.

Wenn der Schlüsselname mit [] (wie tag[] ) beendet wird, konvertiert PHP die Werte automatisch in ein Array.

    
lImbus 31.12.2008 11:49
quelle
1

lImmus und Paul, danke für Ihre Eingabe.

Wenn ich die Kontrolle über das Formular hätte, auf dem ich poste, könnte ich wahrscheinlich eine alternative Lösung für dieses Problem finden. Ich habe jedoch keine Kontrolle über das Formular. Und ich bin fast sicher, dass die Software, die den Beitrag liest, kein PHP ist und nicht den Standards des Tags [] folgt.

Selbst wenn dies der Fall ist, scheint cURL auch nicht der Syntax tag [] zu folgen. Grundsätzlich habe ich folgendes versucht und keines von beiden funktioniert ...

%Vor%

Und noch einmal, ich denke nicht, dass passing tag [] trotzdem funktionieren würde, da das Formular, auf das ich poste, tatsächlich nach 'tag' und nicht nach 'tag []' sucht.

Ich bekomme wirklich das Gefühl, dass die cURL-PHP-Bindings wirklich keine Unterstützung dafür haben. Was mir so überraschend erscheint. Es scheint, als ob es buchstäblich alles andere tun kann, aber es ist nicht in der Lage, etwas so einfaches zu tun?

    
Beau Simensen 31.12.2008 21:36
quelle
1

Ich habe es funktioniert mit:

%Vor%

dann $_POST ergibt: $_POST['tag'][0] = 'val0' und $_POST['tag'][1] = 'val1'

    
Sandro 05.11.2009 21:03
quelle
0

Ich habe diese Antwort online gefunden und möchte sie hier posten, bevor sie verschwindet:

Ссылка

%Vor%

Und um es zu benutzen:

%Vor%     
OCDev 04.10.2013 02:45
quelle

Tags und Links