Laravel的FileSystem是否支持这样做(尤其是copy等函数)?
用file_get_contents
的话,如果是HTTPS网站会遇到SSL验证失败的错误,但又不能忽略掉这个错误。
Laravel的FileSystem是否支持这样做(尤其是copy等函数)?
用file_get_contents
的话,如果是HTTPS网站会遇到SSL验证失败的错误,但又不能忽略掉这个错误。
GuzzleHttp获取远程资源。Storage处理文件存储。
try {
$client = new \GuzzleHttp\Client();
$data = $client->request('get','http://xxxx')->getBody()->getContents();
Storage::disk('local')->put('filename', $data);
} catch (\GuzzleHttp\RequestException $e) {
echo 'fetch fail';
}
SSL证书验证失败的问题是以为你本地没有最新的ca证书列表,下载一个就行了
参考:
http://stackoverflow.com/ques...
http://guzzle3.readthedocs.io...
$client = new \GuzzleHttp\Client($url,[
'curl.options' => [
CURLOPT_SSL_VERIFYPEER=>2,
CURLOPT_SSL_VERIFYHOST=true,
]
]);
file_put_contents('/tmp/logo.gif',file_get_contents('https://www.baidu.com/img/bdlogo.gif'));
只要你的PHP添加了OpenSSL支持(--with-openssl
),那file_get_contents就肯定支持HTTPS的.
如果提示出错:
SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
那就下载cacert.pem文件,然后在php.ini指定,然后重启PHP服务就好:
wget https://curl.haxx.se/ca/cacert.pem
php.ini:
openssl.cafile=/path/to/cacert.pem
var_export(openssl_get_cert_locations());
array (
'default_cert_file' => '/opt/phpdroid/deps/ssl/cert.pem',
'default_cert_file_env' => 'SSL_CERT_FILE',
'default_cert_dir' => '/opt/phpdroid/deps/ssl/certs',
'default_cert_dir_env' => 'SSL_CERT_DIR',
'default_private_dir' => '/opt/phpdroid/deps/ssl/private',
'default_default_cert_area' => '/opt/phpdroid/deps/ssl',
'ini_cafile' => '',
'ini_capath' => '',
)
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
3 回答1.5k 阅读
1 回答578 阅读✓ 已解决
用GuzzleHttp即可。
加上:
可以用try catch写。