Laravel的FileSystem是否支援這樣做(尤其是copy等函數)?
用file_get_contents
的話,如果是HTTPS網站會遇到SSL驗證失敗的錯誤,但又不能忽略掉這個錯誤。
Laravel的FileSystem是否支援這樣做(尤其是copy等函數)?
用file_get_contents
的話,如果是HTTPS網站會遇到SSL驗證失敗的錯誤,但又不能忽略掉這個錯誤。
用GuzzleHttp即可。
加上:
use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException;
$client = new Client(['verify' => false]); //忽略SSL错误 $response = $client->get($url, ['save_to' => public_path($file)]); //保存远程url到文件
可以用try catch寫。
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证书列表,下载一个就行了
$client = new \GuzzleHttp\Client($url,[ 'curl.options' => [ CURLOPT_SSL_VERIFYPEER=>2, CURLOPT_SSL_VERIFYHOST=true, ] ]);
用curl可以搞定
file_put_contents('/tmp/logo.gif',file_get_contents('https://www.baidu.com/img/bdlogo.gif'));
只要你的PHP添加了OpenSSL支援(--with-openssl
),那file_get_contents就肯定支援HTTPS的.
oper如果提示出錯Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed
那就下載cacert.pem檔,然後在php.ini指定,然後重啟PHPrrre: