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 代理正确连接。
我有一个奇怪的行为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 代理正确连接。