Yas*_*nch 16 php curl laravel-5.3
完全错误
RequestException in CurlFactory.php line 187: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
脚本
在任何人向我指出这两个laracasts答案之前:https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate
我已经看过他们了,这就是为什么我在这里,
我的问题是我现在有cacert.pem文件,但它没有意义放在哪里,答案表明将文件放在我的xampp目录并更改我的php.ini文件,但我不使用xampp的任何东西,我使用laravel的工匠服务器来运行我的项目.如果没有使用xampp那么我在哪里放置这个文件等等,为什么接受的答案是将它放在我的xampp目录中我不明白
我的确切问题
我在哪里放置cacert.pem文件以在laravel 5.4中停止此错误?
kjd*_*n84 77
不要修改文件vendor/夹中的文件.永远.它们可以并且将在您运行的下一个作曲家更新中被覆盖.
这是我的WampServer解决方案
我使用PHP 7.1.9作为我的WampServer,因此7.1.9在下面的示例中将更改为您当前使用的版本号.
C:\wamp64\bin\php\php7.1.9文件夹中php.ini并找到这一行:;curl.cainfo
将其更改为:
curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"
确保在行的开头删除分号.
保存更改php.ini,重新启动WampServer,您就可以开始了!
这很难解决,但这里是使用laravel的人的确切答案并且有这个问题.
我的确切应用版本是......
Laravel:5.4
Guzzlehttp:6.2
Laravel Socialite:3.0
从以下链接下载此卷曲证书的新副本:https://gist.github.com/VersatilityWerks/5719158/download
将文件保存在此路径中,从laravel应用程序的基础开始 vendor/guzzlehttp/guzzle/src/cacert.pem
然后在同一目录中打开RequestOptions.php并向下滚动到调用的常量CERT并将其更改为此const CERT = 'cacert.pem';,这应该解决所有问题.
编辑
正如人们指出你永远不应该编辑供应商文件夹,这只是我在业余时间建立的应用程序的快速修复.对于我公司或其他任何应用来说,这不是什么重要的事情,使用这种方法需要您自担风险!请查看下面的答案
快速解决方案但不安全(不建议)。
使用cURL:
将CURLOPT_SSL_VERIYPEER设置为false
使用Guzzle:
设置验证为假
示例$ client-> request('GET',' https://somewebsite.com ',['verify'=> false]);
\vendor\guzzlehttp\guzzle\src\Client.php文件进行更改的解决方案是最糟糕的建议,因为如果您运行composer update命令,对供应商文件夹所做的手动更改将被覆盖。php.ini。如果您使用的是共享主机,则可能无法编辑php.ini文件。当您无权访问php.ini文件时(例如共享主机)
verify键添加到GuzzleHttp\Client构造函数,其值作为cacert.pem文件路径。使用 Laravel 5.7 和 GuzzleHttp 6.0
// https://example.com/v1/current.json?key1=value1&key2=value2
$guzzleClient = new GuzzleHttp\Client([
'base_uri' => 'https://example.com',
'verify' => base_path('cacert.pem'),
]);
$response = $guzzleClient->get('v1/current.json', [
'query' => [
'key1' => 'value1',
'key2' => 'value2',
]
]);
$response = json_decode($response->getBody()->getContents(), true);
Run Code Online (Sandbox Code Playgroud)