PHP fsockopen自20/05/2022起停止工作



在我们的堆栈中,我们需要网站能够触发并忘记对中央服务器的请求。要做到这一点,我们使用fsockopen。以下代码已多年未更改。

private function curl_post_async($url, $params = array()){
$post_params = array();
foreach ($params as $key => &$val) {
if (is_array($val)) $val = implode(',', $val);
$post_params[] = $key.'='.urlencode($val);
}
$post_string = implode('&', $post_params);
$parts=parse_url($url);
$fp = fsockopen($parts['host'],
isset($parts['port'])?$parts['port']:80,
$errno, $errstr, 30);
$out = "POST ".$parts['path']." HTTP/1.1rn";
$out.= "Host: ".$parts['host']."rn";
$out.= "Content-Type: application/x-www-form-urlencodedrn";
$out.= "Content-Length: ".strlen($post_string)."rn";
$out.= "Connection: Closernrn";
if (isset($post_string)) $out.= $post_string;
fwrite($fp, $out);
fclose($fp);

正如你所看到的,我们没有使用fgets的while循环,因为我们不关心响应。我们只需要把数据发送到中央服务器。我们没有对我们网络中的任何网站或服务器进行任何更改,但截至5月20日星期五,该功能停止工作。我们可以通过添加带有fgets的while循环来让它工作,但这并不符合我们的要求。

我们的站点位于Azure的服务器和中央服务器的范围内。

有趣的是,它写入的服务器上有其他应用程序。他们也使用这个方法它仍然有效

.有人对此有任何意见或看到类似的问题吗?

PHP函数fsockopen()可能无法工作由于防火墙限制

在这种情况下,应该打开传出连接所需的端口。您可以通过您的

打开机票来申请。Client Area > Help Menu > View Help Center > Contact Us > Other > Report Other Technical Issues.

最新更新