我正在使用cakePHP,我正在尝试使用她/他的脸书登录后在Facebook本地获取个人资料图片。
保存工作正常,我遇到的唯一问题是SSL错误,
Warning (2): file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [APP\Controller\FacebookCpsController.php, line 98]
Warning (2): file_get_contents() [function.file-get-contents]: Failed to enable crypto [APP\Controller\FacebookCpsController.php, line 98]
Warning (2): file_get_contents(https://graph.facebook.com/10203572402389803/picture) [function.file-get-contents]: failed to open stream: operation failed [APP\Controller\FacebookCpsController.php, line 98]
Warning (2): file_put_contents(/files/user_profile) [function.file-put-contents]: failed to open stream: No such file or directory [APP\Controller\FacebookCpsController.php, line 99]
我的控制器名称是FacebookCps。
这是我的第98和99行:
line 98: $image = file_get_contents('https://graph.facebook.com/'.$uid.'/picture');
line 99: file_put_contents('/files/user_profile', $image);
我的扩展名= php_openssl已经在我的php.ini中取消注释(C:/ xampp / php / phpini)
感谢您提出任何建议/帮助。
答案 0 :(得分:0)
@Janelle Ann Lagatuz正如错误所说,“....例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败......”您应该下载证书包。将它放在Web服务器上的某个位置,您可以在其中访问它并授予用户读取文件的权限。然后尝试以下代码:
$arrContextOptions=array(
"ssl"=>array(
"cafile" => "/path/to/bundle/ca-bundle.crt",
"verify_peer"=> true,
"verify_peer_name"=> true,
),
);
他们也是另一种方法,而不是传递证书,只需将verify_peer和verify_peer_name设置为false并按如下方式传递(您可以在此处查看此方法的说明:http://php.net/manual/en/migration56.openssl.php):
<?php
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$image = file_get_contents('https://graph.facebook.com/'.$uid.'/picture', false, stream_context_create($arrContextOptions));
echo $response; ?>
但请记住,这不是一个好方法,因为你没有通过证书,这打破了SSL认证,是一个安全漏洞。