Heim >Backend-Entwicklung >PHP-Tutorial >Wie speichere ich Remote-Bilder lokal in Laravel 5?

Wie speichere ich Remote-Bilder lokal in Laravel 5?

不言
不言Original
2018-05-15 11:26:346421Durchsuche

Unterstützt das Dateisystem von Laravel dies (insbesondere Funktionen wie Kopieren)?

Wenn Sie file_get_contents verwenden und es sich um eine HTTPS-Website handelt, wird ein SSL-Überprüfungsfehler angezeigt, Sie können diesen Fehler jedoch nicht ignorieren.

Antwortinhalt:

Unterstützt das Dateisystem von Laravel dies (insbesondere Funktionen wie Kopieren)?
Wenn Sie file_get_contents verwenden und es sich um eine HTTPS-Website handelt, wird ein SSL-Überprüfungsfehler angezeigt, Sie können diesen Fehler jedoch nicht ignorieren.

Verwenden Sie einfach GuzzleHttp.
Hinzugefügt:

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
$client = new Client(['verify' => false]);  //忽略SSL错误
$response = $client->get($url, ['save_to' => public_path($file)]);  //保存远程url到文件

kann mit Try Catch geschrieben werden.

GuzzleHttp ruft Remote-Ressourcen ab. Storage befasst sich mit der Dateispeicherung.

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,
    ]
]);

Sie können es mit Curl tun

file_put_contents('/tmp/logo.gif',file_get_contents('https://www.baidu.com/img/bdlogo.gif'));

Solange Ihr PHP OpenSSL-Unterstützung hinzufügt (--with-openssl), unterstützt file_get_contents definitiv HTTPS .
Wenn eine Fehlermeldung angezeigt wird:
SSL-Vorgang mit Code 1 fehlgeschlagen. OpenSSL-Fehlermeldungen:
Fehler:14090086:SSL-Routinen:ssl3_get_server_certificate:Zertifikatsüberprüfung fehlgeschlagen
Laden Sie dann die Datei cacert.pem herunter und Führen Sie es dann in der angegebenen PHP-INI aus und starten Sie dann den PHP-Dienst neu:

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' => '',
)
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn