gpt4 book ai didi

PHP Fire and Forget POST 请求

转载 作者:IT王子 更新时间:2023-10-29 00:13:19 24 4
gpt4 key购买 nike

我正在尝试在 PHP 中创建一个即发即弃的方法,这样我就可以POST 数据到 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);
}

这个似乎更适合我。

这是一个有效的解决方案吗?

最佳答案

是的,如果您不关心您所调用的 URL 的响应,那么使用套接字是可行的方法。这是因为套接字连接可以在发送请求后直接终止而无需等待,而这正是您所追求的 - 即发即弃。

不过有两个注意事项:

  1. 它不再是 cURL 请求,因此值得重命名该函数。 :)
  2. 绝对值得检查套接字是否可以打开,以防止脚本在失败时提示:

    $fp = fsockopen($parts['host'], $port, $errno, $errstr, 30);

    if ( ! $fp)
    {
    return FALSE;
    }

值得链接到您现在使用的 fsocket() 脚本的原始来源:
http://w-shadow.com/blog/2007/10/16/how-to-run-a-php-script-in-the-background/

关于PHP Fire and Forget POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14587514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com