PHP: Gesplittete SOAP daten zusammensetzen?



  • hallo zusammen

    ich würde gerne wissen wie ich mit php, gesplittete datenpackete zusammenführen kann. wie genau muss man da vorgehen und woher weiss ich welcher datenteil gesplittet ist?

    folgendes: ich übertrage ein objekt array an den server. das objekt beinhaltet verschiedene klassenatrribute, unteranderem ein String mit einem base64 kodierten inhalt für dateien.

    das problem ist nun, das clientseitig automatisch die base64 daten auf 32 KB aufgeteilt werden und ich dies leider nicht verhindern kann. ich müsste nun unter php wissen, wie ich die gesplitteten dateien, welche ja in base64 kodierter form ankommen, zusammenführen kann. weil sobald eine datei grösser als 32 KB ist wird eben aufgeteilt und ich erhalte dann später clientseitig die fehlermeldung:

    mehrere dateien werden gesendet, bei denen mindestens eine grösser ist als 32 KB
    "The server returned an invalid or unrecognized response..."

    nur eine datei wird gesendet, die 2 MB grösse hat
    "XML document must have a top level element."

    wenn alle dateien unter 32 KB grösse haben, funktioniert alles bestens.



  • SOAP ist ja eigentlich Webservice.
    Hatte es eigentlich noch nie das die Daten im Webservice aufgeteilt ankommen.
    Auch Base64-Daten nicht.
    Solltest mal schauen ob dein WSDL richtig ist.



  • ich setze auf beiden seiten keine WSDL datei ein. ich werde irgendwie grad nicht schlau draus. wenn ich mit einem packet sniffer das ganze szenario mal betrachte, sieht es so aus, als wäre alles in einem rutsch am senden. es gibt zumindest nur ein eintrag mit mehr als 1000 KB und 4132 packeten. 😕

    weiss nun leider nicht wo ich den ansatz machen soll. der anfang ist zumindest das es mit kleinen dateien tadellos funktioniert. mit grösseren nicht mehr. hat SOAPServer ein limit was man evl. aufheben muss?



  • also, neuste erkenntnis: es wird scheinbar nicht gesplittet. eine bild datei mit 800 KB funktioniert auch noch. aber eben, eine bild datei mit über 2 MB nicht mehr. da kommt die fehlermeldung:

    "XML document must have a top level element."

    ich tendiere stark dazu, dass das XML element nicht mit > abgeschlossen wird. das sagt mir in erster linie das es server seitig ein limit geben muss. 🙄



  • AUf beiden Seiten gibt sowieso keine WSDL. WSDL ist nur die Beschreibung der WebserviceSchnittstelle.

    Mach dir eine und gut ist es.



  • ich benutze den C++ Builder 6 der sollte glaube ich alles automatisch implementieren. wenn ich eine 8 MB grosse datei nehme, kommt ein "Operation timeout". sind dir keine limits für SOAP und php bekannt?



  • Das könnte aber auch eine Limitation des php-Systems unter dem Webserver sein. Schau mal in der php-Konfiguration (php.ini) nach begrenzenden Attributen.



  • endlich! man muss die folgenden optionen ändern:

    file_uploads
    upload_max_filesize
    max_input_time
    memory_limit
    max_execution_time
    post_max_size

    danke jungs!



  • bei mir war max_input_time ausschalggebend. :xmas2: :xmas1:



  • ich muss trotzdem schnell nachfragen:

    was ist wenn jemand eine sehr langsame verbindung hat, dann hat dies ja einfluss auf den max_execution_time wert oder nicht? so gesehen müsste ich ja einen globalen extrem hohen wert setzen, damit es "ungefähr" für jeden stimmt, aber das ist ja nicht wirklich die lösung. was tun?

    und was davon ist für den SOAP wirklich relevant?
    - max_execution_time
    - max_input_time

    eigentlich beides oder? aber max_input_time sollte glaube ich eher relevant sein weil wenn ich richtig schätze, bezieht sich die max_execution_time auf das script ansich, also das ausführen des codes. da aber ein receive nicht wirklich viel mit empfangen zu tun hat, das script zwar läuft, tendiere ich eher zu max_input_time.



  • Ich bilde mir ein,, dass Du diese Werte auch in einem Skript setzen kannst die dann nur für dieses Skript gelten. Dann mußt Du eben die Limitationen im SAOP-Empfänger-Skript abschalten.



  • leider habe ich erneut probleme. zu früh gefreut 😞

    ich glaube ich brauche eine generelle aufklärung des mechanismus. gehe ich richtig der annahme, dass das senden an den SOAP server in erster linie mit php garnichts zu tun hat? sondern erst die verarbeitung der bereits gesendeten daten durch die methode handle() ist der php teil? wenn dem so ist, dann brauche ich doch die ganzen php ini settings garnicht oder? sondern vielmehr direkte apache settings, die mir erlauben, grösse POST daten zu zu lassen. stimmt das? wenn auch hier richtig, wie genau muss ich das dann einstellen?





  • danke dort war ich schon. leider finde ich nichts passendes ausser:

    LimitXMLRequestBody

    doch das funktioniert leider nicht. und:

    KeepAliveTimeout
    MaxKeepAliveRequests

    macht keinen sinn.



  • es muss auf jedenfall irgendwo ein limit geben welches ich einfach nicht finde. das daten packet ist erneut abgeschnitten. das sagt mir definitiv das irgendwann einfach nicht mehr empfangen wird.

    bloss wo ist das limit und wie nennt es sich 🤡


Anmelden zum Antworten