我有一个奇怪的file_get_contents行为。我们在代理后面,所以我需要设置file_get_contents的上下文。奇怪的是,在我的电脑上它工作正常,但在其他PC或其他位置它将无法工作,运行到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 );
我也没有在其他PC上收到任何错误消息,只有
Warning: file_get_contents(...): in C:\trainingplan\lib\common.php on line 79
我认为奇怪的是警告不包含错误......我们认为它不是代理,因为我在任何地方都使用相同的代理,也可以使用不同的代理 - 相同的行为,在我的电脑上运行,别人没有。我也试过在其他PC上禁用防火墙和UAC以及其他安全服务,但效果不好......我们不知道可能是什么原因。
你对我有什么想法吗?
答案 0 :(得分:0)
我们终于找到了解决方案。它与网络无关。这是Google App Engine Launcher安装程序中包含的PHP 5.5的错误。指定时
runtime: php55
runtime: php
它适用于代理和一切。这可能有点问题,因为谷歌已经不赞成使用“runtime:php”,你只能将带有“runtime:php55”的应用程序上传到App Engine服务器。但我认为合理的解决方法是在本地开发“runtime:php”并将其更改为“runtime:php55”仅用于上传 - 但我不知道是否会产生其他影响......
我们昨天遇到的另一个原因是IPv6。在App Engine Launcher v1.9.23中,它有助于在PC的entwork设置中完全禁用IPv6。重启后,GAE Launcher的php-cgi.exe通过IPv4代理正确连接。