PHP-Feuer-und-Vergessen-POST-Request

Ich versuche zu schaffen, ein Feuer-und-vergessen-Methode in PHP, so dass ich kann POST Daten auf einem Webserver und nicht auf eine Antwort warten. Ich habe gelesen, dass dies könnte erreicht werden, indem CURL wie im folgenden code:

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_exec($ch);
curl_close($ch);

Aber ich glaube nicht, dass es so funktioniert wie ich erwarte. Zum Beispiel, wenn die URL schicke ich die Anfrage hat einen Fehler, es bewirkt, dass mein script einen Fehler auslösen, wie gut. Wenn es war Feuer und vergessen, dass ich erwarten würde dass nicht passieren.

Kann mir jemand sagen ob ich was falsch mache oder eine alternative Vorschlag. Ich bin mit Windows lokal und Linux für Entwicklungs -, staging-und Produktion-Umgebungen.

UPDATE

Habe ich eine alternative gefunden Lösung hier: http://blog.markturansky.com/archives/205

Habe ich gereinigt wurde, in den folgenden code:

function curl_post_async($url, $params = array())
{
    //create POST string   
    $post_params = array();
    foreach ($params as $key => &$val) 
    {
        $post_params[] = $key . '=' . urlencode($val);
    }
    $post_string = implode('&', $post_params);

    //get URL segments
    $parts = parse_url($url);

    //workout port and open socket
    $port = isset($parts['port']) ? $parts['port'] : 80;
    $fp = fsockopen($parts['host'], $port, $errno, $errstr, 30);

    //create output string
    $output  = "POST " . $parts['path'] . " HTTP/1.1\r\n";
    $output .= "Host: " . $parts['host'] . "\r\n";
    $output .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $output .= "Content-Length: " . strlen($post_string) . "\r\n";
    $output .= "Connection: Close\r\n\r\n";
    $output .= isset($post_string) ? $post_string : '';

    //send output to $url handle
    fwrite($fp, $output);
    fclose($fp);
}

Dieser scheint besser zu funktionieren für mich.

Ist es eine gültige Lösung?

  • Was Sie hier tun, ist nur das senden der Anfrage und dem schließen der Verbindung. Also es ist nicht so async wie würden Sie denken, es ist. Sie könnten Gabel Prozess, oder öffnen eine neue. PHP ist nicht Multitasking fähig.
  • Sind Sie über einen Web-oder CLI ?
  • Dies ist mit einem webserver.
  • Bewirten Sie selbst, und Sie haben Zugriff auf die system () - Befehl?
  • Wir sind selbst gehostet, Amazon Web Services, so dass wir Steuern alle Maschinen-Instanzen etc. und kann setup die Server auf unsere Bedürfnisse. Wenn ich keinen Zugang zu system() ich verlangen kann es aktiviert werden.
  • Die "POST erstellen "string" - Teil kann einfach ersetzt werden mit: $post_string = http_build_query($params);

InformationsquelleAutor diggersworld | 2013-01-29
Schreibe einen Kommentar