Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit XML-Schnittstelle

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit XML-Schnittstelle

    Hallo,

    ich habe ein script, das liest über $HTTP_RAW_POST_DATA XML-Artikeldaten.
    Das ganze funtkioniert mit 15000 Artikeln wunderbar.
    Bei 100000 Artikeln bekomme ich nur im log die Fehlermeldung
    Code:
    [Thu May 22 07:35:30 2008] [notice] child pid 32700 exit signal segmentation fault (11)
    Schätze mal die Anfrage hat ne Größe von 2 - 3MB.

    Als nächstes hab ich versucht nur mal die Abfrage zu speichern:

    PHP-Code:
    <?
    $file=fopen("test.txt","w");
    fputs($file,file_get_contents("php://input"));
    fclose($file);
    ?>
    Auch da kommt die gleiche Fehlermeldung.
    php.ini Einstellungen:

    Code:
    post_max_size = 8M
    OS: SuSe 10.0 mit Apache 2.0
    PHP-Version: 5.1.2

    Kennt jemand das Problem??

    Danke im voraus.


  • #2
    1. Was passiert, wenn Du genau diese Daten an ein Skript schickst, das überhaupt nichts damit tut? Einfach nur
      PHP-Code:
      <?php echo microtime(true); ?>
    2. Tritt der Fehler auch mit
      PHP-Code:
      <?php
      error_reporting
      (E_ALL);
      ini_set('display_errors'1);
      ini_set('implicit_flush'1);

      $out=fopen('test.txt''w') or die('$out failed');
      fwrite($out"1 \n"); fflush($out);
      $infopen('php://input''r') or die('$in failed');
      fwrite($out"2 \n"); fflush($out);
      stream_copy_to_stream($in$out);
      fclose($out);
      flcose($in);
      auf? Was steht dann in der Datei?

    Kommentar


    • #3
      Der Fehler tritt auch beim ersten Versuch auf.
      In der Datei steht:
      Code:
      1
      2
      Könnte das mit irgendwelchen Apache-Einstellungen zusammenhängen??

      Kommentar


      • #4
        Naja, segmentation fault heißt nicht, dass der Apache mal eben PHP wegen eines Konfigurationsparameters beendet, sondern dass das Betriebssystem den Prozess abräumt, weil auf Speicher zugegriffen wird, der nicht dem Prozess gehört (oder beschrieben werden darf). Das ist also die rote Karte.

        Beim ersten Versuch stand wirklich nur diese eine Zeile in der Datei? Und wurde das Ergebnis von microtime() noch im Browser ausgegeben?

        Hast Du mal nach Updates für die Apache + PHP Pakete gesucht?

        Kommentar


        • #5
          Erstmal vielen Dank für deine Hilfe.
          Habs jetzt hinbekommen, dass der Stream vollständig auf dem Server landet.
          Und jetzt bricht dieses elende Skript mitten in der Antwort ab - ohne Error, ohne alles.

          Hier mal ne vereinfachte Form:

          PHP-Code:
           
          error_reporting
          (E_ALL);
          ini_set('display_errors'1);
          ini_set('implicit_flush'1);
          $out=fopen('input_stream.log''w') or die('$out failed');
          fwrite($out"1 \n".strftime("%H:%M:%S")); fflush($out);
          $infopen('php://input''r') or die('$in failed');
          fwrite($out"\n2 \n"); fflush($out);
          while (
          true)
          {
           
          $strin=fgets($in,1024);
           
          fwrite($out,$strin);
           
          fflush($out);
           if (
          strpos($strin,"</soap:Envelope>")!==false) break;
          }
          fclose($in);
          fputs($out,'\nClosing...\n');
          fclose($out);
          $file=fopen("generated_answer.txt","r");
          $out2=fopen("sent.data","w");
          fputs($out2,"Starting...\n");
          header('Content-Type: text/xml; charset=utf-8');
          while(!
          feof($file))
          {
           try
           {
            
          $str=fgets($file,1024);
            echo 
          $str;
            
          flush();
            
          fputs($out2,$str);
            
          fflush();
           }
          }
          fclose($file);
          fclose($out2); 
          In sent.data stehen jetzt 2300 Byte es müßten aber 57MB sein.
          Tja, wird Zeit fürs Wochenende

          Kommentar


          • #6
            Zitat von kulli Beitrag anzeigen
            Habs jetzt hinbekommen, dass der Stream vollständig auf dem Server landet.
            Lag das an einem Apache/PHP Update?

            Kommentar


            • #7
              Nein, es lag daran dass der input-stream nicht 2MB sondern 20MB groß war. Ich hab dann post_max_size auf 30MB gesetzt. Hast du noch ne Idee? Es könnte sich um nen timout handeln, obwohl ich alles auf 'ne stunde gesetzt habe.

              Kommentar

              Lädt...
              X