PHP实战:guzzlehttp/guzzle下载网络文件到本地

简介: PHP实战:guzzlehttp/guzzle下载网络文件到本地

环境

$ 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


相关文章
|
5天前
|
Java
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
java网络编程 UDP通信协议实现局域网内文件的发送和接收
|
12天前
|
存储 网络架构
网络速率与下载速率
【8月更文挑战第8天】
25 1
网络速率与下载速率
|
11天前
|
PHP
PHP遍历文件并同步上传到服务器
在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。
43 16
|
7天前
|
机器学习/深度学习 PyTorch TensorFlow
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
【PyTorch】PyTorch深度学习框架实战(一):实现你的第一个DNN网络
30 1
|
7天前
|
PHP
PHP——将网络图片转为Base64
PHP——将网络图片转为Base64
12 1
|
7天前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
18 0
PHP——调用java文件中的方法
|
15天前
|
存储 Ubuntu Linux
NFS服务部署全攻略:从零到一,轻松驾驭网络文件系统,让你的文件共享像飞一样畅快无阻!
【8月更文挑战第5天】NFS(网络文件系统)能让网络中的电脑无缝共享文件与目录。基于客户端-服务器模式,用户可像访问本地文件般透明操作远程文件。部署前需准备至少两台Linux机器:一台服务器,其余作客户端;确保已装NFS相关软件包且网络通畅。服务器端安装NFS服务与rpcbind,客户端安装nfs-utils。
37 4
|
19天前
|
移动开发 网络协议 算法
(十)Netty进阶篇:漫谈网络粘包、半包问题、解码器与长连接、心跳机制实战
在前面关于《Netty入门篇》的文章中,咱们已经初步对Netty这个著名的网络框架有了认知,本章的目的则是承接上文,再对Netty中的一些进阶知识进行阐述,毕竟前面的内容中,仅阐述了一些Netty的核心组件,想要真正掌握Netty框架,对于它我们应该具备更为全面的认知。
|
20天前
|
安全 物联网 区块链
云端防御:云计算时代的网络安全策略与实战《未来已来:探索区块链、物联网与虚拟现实的融合革新》
【7月更文挑战第31天】在数字化转型的浪潮中,云计算已成为推动企业增长的核心动力。然而,随着数据和应用逐渐迁移到云端,网络安全问题也愈发严峻。本文将探讨云计算环境中的安全挑战,并提出相应的防御策略。通过分析云服务模型、安全威胁及信息安全技术的应用,结合代码示例,本文旨在为读者提供一套实用的云端安全防护方案。
30 1
|
1天前
|
安全 网络安全 网络架构
【揭秘】大佬如何玩转内网与外联单位互访?SNAT+DNAT实战揭秘,让你的网络畅通无阻!
【8月更文挑战第19天】内网与外联单位间的访问是企业网络的关键需求。通过SNAT和DNAT技术可巧妙解决此问题。SNAT修改源IP地址,隐藏内网真实身份;DNAT改变目的IP地址,实现外部对内网服务器的访问。
11 0