【发布时间】:2018-01-23 16:24:38
【问题描述】:
MacOS 10.11
开发桌面版本 2
PHP 5.6
正在尝试加载包含 Google 地图的 Drupal 8 模板页面。适用于生产和开发服务器,但不适用于本地。页面给出“网站遇到意外错误。请稍后再试。”本地加载时出错,回溯显示以下信息:
错误:
GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in GuzzleHttp\Handler\CurlFactory::createRejection() (line 187 of vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php).
诊断:
array(8) { ["default_cert_file"]=> string(68) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/cert.pem" ["default_cert_file_env"]=> string(13) "SSL_CERT_FILE" ["default_cert_dir"]=> string(65) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/certs" ["default_cert_dir_env"]=> string(12) "SSL_CERT_DIR" ["default_private_dir"]=> string(67) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl/private" ["default_default_cert_area"]=> string(59) "/Users/acquia/csbworkdir/dmitrybezer/libopenssl/install/ssl" ["ini_cafile"]=> string(47) "/Applications/DevDesktop/common/cert/cacert.pem" ["ini_capath"]=> string(0) "" }
回溯:
GuzzleHttp\Handler\CurlFactory::finishError(Object, Object, Object) (Line: 103)
GuzzleHttp\Handler\CurlFactory::finish(Object, Object, Object) (Line: 43)
GuzzleHttp\Handler\CurlHandler->__invoke(Object, Array) (Line: 28)
GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object, Array) (Line: 51)
GuzzleHttp\Handler\Proxy::GuzzleHttp\Handler\{closure}(Object, Array) (Line: 37)
GuzzleHttp\PrepareBodyMiddleware->__invoke(Object, Array) (Line: 30)
GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object, Array) (Line: 70)
GuzzleHttp\RedirectMiddleware->__invoke(Object, Array) (Line: 57)
GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object, Array) (Line: 67)
GuzzleHttp\HandlerStack->__invoke(Object, Array) (Line: 277)
GuzzleHttp\Client->transfer(Object, Array) (Line: 125)
GuzzleHttp\Client->requestAsync('get', 'https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 131)
GuzzleHttp\Client->request('get', 'https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 89)
GuzzleHttp\Client->__call('get', Array) (Line: 273)
GuzzleHttp\Client->get('https://maps.googleapis.com/maps/api/geocode/json', Array) (Line: 273)
似乎正在使用“default_cert_file”(并且在本地不存在)并且确实存在的文件“/Applications/DevDesktop/common/cert/cacert.pem”不是。默认值是从 Dev Desktop 中的 PHP 构建硬连线的。我不确定 Guzzle 是否不会费心尝试从可用列表中查找其他选项,或者我是否还有其他问题。
有没有办法覆盖 php.ini 中的“default_cert_file”...??还是有更好的解决方案?
我什至创建了 default_cert_file 正在寻找的位置,只是为了看看是否可以解决它,但它没有。
【问题讨论】:
-
目前我编辑了本地 Guzzle 以始终跳过检查,这样我就可以完成工作。我更喜欢一个解决方案,但我读过的所有内容都说我需要使用文件路径编辑 php.ini 文件(你可以在上面看到它已经存在)或者有些人建议它想要“default_cert_file”......并且 Guzzle 不考虑其他任何内容,我应该降级到早期版本的 Guzzle。我做不到,这现在是 Drupal 的一部分。
标签: php curl drupal guzzle acquia