Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Request asynchron

Einklappen

Neue Werbung 2019

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

  • PHP Request asynchron

    Hallo Leute,

    ich suche nun schon nach einer Weile nach einer Lösung für mein Problem. Da Google leider auch kein zufriedenstellendes Ergebnis liefert, muss ich leider auf euren Rat zurückgreifen.

    Und zwar:
    Ich habe ein Programm, welches Daten von externen Anbietern auswertet. Dieser Prozess kann manchmal schon etwas dauern. Jedoch möchten die Anbieter immer einen Status haben, wie weit mein Programm bereits gekommen ist.

    NebenInformation: Ich verwende Zend Framework 2

    Daher habe ich mir folgendes Konzept überlegt:
    Ich habe eine Startseite, welche einen Token zurückgibt (um die Systemnachrichten zuzuordnen für die Statusabfrage). Nachdem der Token zurückgegeben wurde, soll das Programm angestoßen werden. Daher habe ich erstmal folgendes Script für die Tokenausgabe:
    PHP-Code:
          $startResult $this->getService()->createImport();
          
    ob_end_clean();

          
    ob_start();
          
    // set token data to header (in xml format)
          
    $this->createOutput($startResult);

          
    // send to browser
          
    ob_flush();

          
    ob_end_flush();

          
    // make import, but do not wait for result!
          
    $this->callImport($this->getService()->getLastCreatedToken());

          
    // return header data and other response data to output them
          
    return $this->getResponse(); 
    Nun geht es um die Methode callImport(). Wie kriege ich es hin, dass der Import angestoßen wird, ohne dass die Ausgabe darauf warten muss? Ich habe es schon mit curl probiert:
    PHP-Code:
    $config = array(
              
    'adapter' => 'Zend\Http\Client\Adapter\Curl',
              
    'curloptions' => array(
                  
    CURLOPT_FRESH_CONNECT => true,
                  
    CURLOPT_TIMEOUT_MS => 1
              
    )
          );

          
    $client = new \Zend\Http\Client('http://mysite.de/execute_import'$config);
          
    $post $this->params()->fromPost();
          
    $post['token'] = $token;
          
    $post['action'] = 'execute';
          
    $client->setParameterPost($post);
          
    $client->setMethod('POST');
          
    $client->setOptions(array(
              
    'maxredirects' => 0,
              
    'timeout' => 1000000
          
    ));
          try {
             
    $client->send();
          } catch (\
    Zend\Http\Client\Adapter\Exception\RuntimeException $e) {
             
    // do nothing!
          

    Leider wirft es mir da immer eine RuntimeException aus, weshalb das Programm nicht anlaufen kann. Grund: Timeout ist zu gering und er bricht nach 1ms ab.

    Kann mir evtl. jemand helfen? Am liebsten wäre mir natürlich wenn ich nicht extra eine andere URL aufrufen müsste, sondern nur eine andere Funktion, die den Import macht.

    Also nochmals die Schritte:
    1. Token erstellen
    2. Token ausgeben
    3. Ausgabe beenden und auch bei Ladeabbruch weitermachen
    4. Funktion für Import aufrufen

    Dankeschön

    VG

    CapCa

  • #2
    https://github.com/stil/curl-easy
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar

    Lädt...
    X