file_get_contents 因空异常而失败

file_get_contents fails w/ empty exception

我有一个奇怪的行为file_get_contents。我们在代理后面,所以我需要设置 file_get_contents 的上下文。奇怪的是,在我的电脑上它工作正常,但在其他电脑或其他位置它不会工作,运行 进入 max_execution_time 超时。

if ($requestType == 'GET') {
            $context = [ 
                    'http' => [ 
                            'method' => 'GET',
                            'header' => "Authorization: " . dbQueryHelper::getApiKey () . "\r\n" . "Content-Type: application/x-www-form-urlencoded\r\n",
                            'proxy' => getenv ( 'PROXY' ),
                            'request_fulluri' => true 
                    ],
                    'ssl' => array(
                        'SNI_enabled' => false, // Disable SNI for https over http proxies
                        'proxy' => getenv('PROXY'),
                        'request_fulluri' => true,
                        "verify_peer"=>false,
                        "verify_peer_name"=>false,
                    )
            ];
        }
$context = stream_context_create ( $context );

$dataraw = [
        'email' => getenv('DEVMAIL'),
        'userEmail' => $user->getNickname(),
        'production' => getenv('PROD')
];
$data = http_build_query ( $dataraw );
$context = dbQueryHelper::getContext ( 'GET' ); // this gets the context from above
$result = file_get_contents ( getenv('RESTAPIURL') . '/getPernrByEmail?' . $data, false, $context );
$result = json_decode ( $result, true );

我在其他电脑上也没有收到错误消息,只有

Warning: file_get_contents(...): in C:\trainingplan\lib\common.php on line 79

我认为奇怪的是警告中没有错误...我们不认为它可能是代理,因为我到处都使用相同的代理,也可以使用不同的代理 - 同样的行为,在我的电脑上它有效,但对其他人无效。我还尝试在其他 PC 上禁用防火墙和 UAC 以及其他安全服务,但效果不佳...我们不知道根本原因是什么。

你对我有什么意见吗?

我们终于找到了解决办法。这与网络无关。这是 PHP 5.5 的错误,包含在 Google App Engine 启动器安装程序中。指定时

runtime: php55

在app.yaml,出现上述症状。当我们将运行时更改为

runtime: php

它适用于代理和一切。这可能有点问题,因为 Google 已经弃用 "runtime: php" 并且您只能将带有 "runtime: php55" 的应用程序上传到 App Engine 服务器。但我认为一个合理的解决方法是使用 "runtime: php" 在本地开发并将其更改为 "runtime: php55" 仅用于上传 - 但我不知道这是否会产生其他影响...

我们昨天遇到的另一个原因是 IPv6。在 App Engine Launcher v1.9.23 中,它有助于在 PC 的网络设置中完全禁用 IPv6。重新启动后,GAE Launcher 的 php-cgi.exe 通过 IPv4 代理正确连接。