环境

$ php -v
PHP 7.1.23

依赖

composer require "guzzlehttp/guzzle=6.5"
composer require "ramsey/uuid=3.9"

示例

<?php

require_once './vendor/autoload.php';

use GuzzleHttp\Client;
use Ramsey\Uuid\Uuid;

/**
* 递归创建文件夹
* @param $dir
*/
function safeMakeDir($dir)
{
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
}

/**
* 随机获取字符串
* @return string
* @throws Exception
*/
function getRandomString()
{
return Uuid::uuid4()->toString();
}

/**
* 获取文件扩展名
* @param $filename
* @return mixed
*/
function getFileNameExtension($filename)
{
return array_slice(explode('.', $filename), -1)[0];
}

/**
* 获取文件内容
* @param $url
* @return string
*/
function getUrlContent($url)
{

$client = new Client();
$response = $client->get($url);

$body = $response->getBody();

return $body->getContents();
}

/**
* 保存到本地
* @param $url
* @param $dir
* @throws Exception
*/
function saveUrlToLocalFile($url, $dir)
{
safeMakeDir($dir);

$ext = getFileNameExtension($url);
$uuid = getRandomString();

$filename = "{$dir}/{$uuid}.{$ext}";

$content = getUrlContent($url);

file_put_contents($filename, $content);

}

function main()
{
$url = 'https://cn.bing.com/th?id=OHR.WartburgCastle_ZH-CN4201605751_1920x1080.jpg&rf=LaDigue_1920x1080.jpg';
$dir = 'temp';

saveUrlToLocalFile($url, $dir);
}

main();

文件保存到了:

temp/113380ed-bf1b-40cf-8b19-5aefcb66fc17.jpg