file_get_contents 来自远程客户端和 SSL
file_get_contents from remote client and SSL
我有 PHP Laravel5 项目。我在控制器的操作中使用 file_get_contents()
,如下所示:
$production = json_decode(file_get_contents(url('/operation/get-production/'.$job->id)))->production;
以上路由被排除在身份验证和授权之外,以上代码行在本地主机中运行良好。但是,当来自 Internet 的远程用户使用该代码时,它会生成以下错误:
我没有使用 IIS,服务器是 Ubuntu linux 上的 Apache。我不知道为什么会在这种情况下出现SSL?我很确定提供给函数的 URL 是 http://...
而不是 https://...
听起来证书验证失败,因为它没有根证书的参考文件来检查它。参见 this Stack Overflow answer。
您的作品 URL 可能被迫使用 https(这是件好事)。
file_get_contents() 不是通过 https 获取数据的完美选择,但是如果 php_openssl 扩展被激活并且 allow_url_fopen 设置为 "on" 你可以得到内容来自 https.
因为您似乎没有有效的 SSL 证书:使用 PHP Curl 一定是个更好的主意 (http://php.net/manual/fr/book.curl.php),因为您可以通过此禁用 SSL 错误:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
(如果您信任 URL:您可以这样做,永远不要对外部网站这样做)
您有两种可能的情况:
可能的答案 #1,如果您使用的是 apache,请检查您的 conf,看看您的域是否没有强制所有调用都使用 SSL
- 或-
可能的答案 #2 您需要为 GET url 创建一个流程并将 headers 发送到其他服务器:
<?php //Create a flow
$opt = array(
'http'=>array(
'method'=>'GET',
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3',
'header'=>'Accept-language: en\r\n' .
'Cookie: foo=bar\r\n’ ) );
$context = stream_context_create($opt);
//Get external url response
$file = file_get_contents('http://www.example.com/some_file', false, $context); ?>
我有 PHP Laravel5 项目。我在控制器的操作中使用 file_get_contents()
,如下所示:
$production = json_decode(file_get_contents(url('/operation/get-production/'.$job->id)))->production;
以上路由被排除在身份验证和授权之外,以上代码行在本地主机中运行良好。但是,当来自 Internet 的远程用户使用该代码时,它会生成以下错误:
我没有使用 IIS,服务器是 Ubuntu linux 上的 Apache。我不知道为什么会在这种情况下出现SSL?我很确定提供给函数的 URL 是 http://...
而不是 https://...
听起来证书验证失败,因为它没有根证书的参考文件来检查它。参见 this Stack Overflow answer。
您的作品 URL 可能被迫使用 https(这是件好事)。
file_get_contents() 不是通过 https 获取数据的完美选择,但是如果 php_openssl 扩展被激活并且 allow_url_fopen 设置为 "on" 你可以得到内容来自 https.
因为您似乎没有有效的 SSL 证书:使用 PHP Curl 一定是个更好的主意 (http://php.net/manual/fr/book.curl.php),因为您可以通过此禁用 SSL 错误:
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
(如果您信任 URL:您可以这样做,永远不要对外部网站这样做)
您有两种可能的情况:
可能的答案 #1,如果您使用的是 apache,请检查您的 conf,看看您的域是否没有强制所有调用都使用 SSL
- 或-
可能的答案 #2 您需要为 GET url 创建一个流程并将 headers 发送到其他服务器:
<?php //Create a flow
$opt = array(
'http'=>array(
'method'=>'GET',
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3',
'header'=>'Accept-language: en\r\n' .
'Cookie: foo=bar\r\n’ ) );
$context = stream_context_create($opt);
//Get external url response
$file = file_get_contents('http://www.example.com/some_file', false, $context); ?>