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

  • kulli
    hat ein Thema erstellt Problem mit XML-Schnittstelle.

    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.

  • kulli
    antwortet
    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.

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • kulli
    antwortet
    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

    Einen Kommentar schreiben:


  • David
    antwortet
    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?

    Einen Kommentar schreiben:


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

    Einen Kommentar schreiben:


  • David
    antwortet
    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?

    Einen Kommentar schreiben:

Lädt...
X