POST
PHPでファイアアンドフォーゲットメソッドを作成して、Webサーバーにデータを送信し、応答を待たないようにしようとしています。CURL
これは、次のコードのように使用することで実現できることを読みました。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_exec($ch);
curl_close($ch);
しかし、私はそれが私が期待するように機能するとは思わない。たとえば、リクエストを送信するURLにエラーがある場合、スクリプトもエラーをスローします。もしそれが火事で忘れていたら、私はそれが起こらないことを期待するでしょう。
誰かが私が何か間違ったことをしているのか、別の提案をしているのか教えてもらえますか?私はローカルでWindowsを使用しており、開発、ステージング、本番環境にはLinuxを使用しています。
アップデート
私はここで別の解決策を見つけました:http://blog.markturansky.com/archives/205
私はそれを以下のコードにクリーンアップしました:
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);
}
これは私にとってはうまくいくようです。
それは有効な解決策ですか?