通过fsockopen和fwrite的PHP HTTP请求在linux上无法正常工作

通过fsockopen和fwrite的PHP HTTP请求在linux上无法正常工作,php,http,fwrite,fsockopen,Php,Http,Fwrite,Fsockopen,我们目前正在使用套接字打开和写入http连接,这些请求我们不一定关心响应!比如跟踪ping等 这在我们的旧服务器和windows开发环境中有效,但在我们的新ubuntu服务器上无效 我们使用的代码如下 $aUrlParts = parse_url($sUrl); $fp = fsockopen( $aUrlParts['host'], isset($aUrlParts['port']) ? $aUrlParts['

我们目前正在使用套接字打开和写入http连接,这些请求我们不一定关心响应!比如跟踪ping等

这在我们的旧服务器和windows开发环境中有效,但在我们的新ubuntu服务器上无效

我们使用的代码如下

        $aUrlParts = parse_url($sUrl);

        $fp = fsockopen(
            $aUrlParts['host'],
            isset($aUrlParts['port']) ? $aUrlParts['port'] : 80,
            $errno, $errstr, 30
        );

        $sHeader = "GET {$aUrlParts['path']}?{$aUrlParts["query"]} HTTP/1.1\r\n";
        $sHeader.= "Host: {$aUrlParts['host']}\r\n";
        $sHeader.= "Connection: Close\r\n\r\n";

        fwrite($fp, $sHeader);
        fclose($fp);
如果我在fwrite之后进行读取,我就可以从服务器上完成所有的工作,但是与仅仅卷曲URL相比,这种方式无法实现请求的目的

我已经尝试过冲洗插座,并将其设置为非阻塞,但没有任何效果!只有在阅读之后才行

谢谢你的帮助


编辑:我将提到这些新服务器是基于AWS的,我感觉它们上的套接字实现可能不同

我不确定这是否值得作为答案,但我遇到了完全相同的问题,这就是我来到这里的原因。我唯一的区别是,我试图对服务器本身执行一个请求

我的解决方案是服务器的访问管理。我有一个htaccess文件,除了我自己的网络之外,它阻止任何人查看,问题是它也阻止了我的服务器请求自己


所以,它可能与服务器访问管理有关。让我知道这是否有用。

我们使用了
fsockopen
fwrite
组合,然后它启动并有一天停止工作。或者有点断断续续。经过一些研究和测试,如果您启用了fopen包装器,我最终使用了
file\u get\u contents
stream\u context\u create
函数,超时设置为100秒。timeout参数可以接收浮点值()。我把它包在一个try…catch块中,这样它就会默默地失败。为了我们的目的,它工作得很好。如果需要,您可以在catch中做日志记录

$context = stream_context_create([
    "http" => [
        "method"=>"GET",
        "timeout" => .01
        ]
    ]
);

try {
    file_get_contents($url, 0, $context);
}catch( Exception $e ){
    // Fail silently
}

接收服务器上的网络日志是否有任何线索?不幸的是,接收服务器都是第三方,它们不允许您访问日志?这是没有帮助的,大多数人是这样做的。你们不能在内部设置一个测试服务器来检查它的工作情况吗?是的,我可能会设置一些本地url来连接一个简单的Ubuntu和Apache,你们的代码片段可以工作,所以它一定是服务器端的东西。