当前位置:首页 > PHP

php实现图片下载

2026-01-29 03:50:22PHP

使用 file_get_contents 和 file_put_contents 下载图片

通过 file_get_contents 读取远程图片内容,再用 file_put_contents 保存到本地。适合小文件下载,简单直接。

$imageUrl = 'https://example.com/image.jpg';
$savePath = 'downloaded_image.jpg';

$imageData = file_get_contents($imageUrl);
if ($imageData !== false) {
    file_put_contents($savePath, $imageData);
    echo "图片下载成功";
} else {
    echo "下载失败";
}

使用 cURL 下载图片

cURL 提供更灵活的选项,适合大文件或需要更多控制的场景。可设置超时、跟随重定向等参数。

$imageUrl = 'https://example.com/image.jpg';
$savePath = 'downloaded_image.jpg';

$ch = curl_init($imageUrl);
$fp = fopen($savePath, 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch);
curl_close($ch);
fclose($fp);

处理文件名和路径

动态生成保存路径,避免文件名冲突。从 URL 提取文件名或使用时间戳命名。

php实现图片下载

$imageUrl = 'https://example.com/image.jpg';
$filename = basename($imageUrl); // 或使用 uniqid() 生成唯一名
$savePath = 'downloads/' . $filename;

// 确保目录存在
if (!file_exists('downloads')) {
    mkdir('downloads', 0777, true);
}

添加错误处理和验证

增加 HTTP 状态码检查,验证是否为图片类型,避免保存非图片内容。

$headers = get_headers($imageUrl, 1);
if (strpos($headers['Content-Type'], 'image/') === false) {
    die("URL 不是有效的图片");
}

$httpCode = substr($headers[0], 9, 3);
if ($httpCode != 200) {
    die("图片不可访问");
}

分块下载大文件

对于大文件,采用分块读写方式减少内存占用。

php实现图片下载

$source = fopen($imageUrl, 'rb');
$dest = fopen($savePath, 'wb');

while (!feof($source)) {
    fwrite($dest, fread($source, 8192));
}

fclose($source);
fclose($dest);

用户代理和 Referer 设置

某些网站会验证请求头,需模拟浏览器访问。

curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_REFERER, 'https://example.com');

安全性注意事项

验证 URL 是否为真实图片地址,避免 SSRF 攻击。

$parsedUrl = parse_url($imageUrl);
if (!in_array($parsedUrl['host'], ['trusted-domain.com', 'cdn.example.net'])) {
    die("不允许的域名");
}

标签: 图片下载php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现队列

php 实现队列

PHP 实现队列的方法 PHP 可以通过多种方式实现队列功能,以下是几种常见的实现方法: 使用数组实现队列 PHP 数组可以通过 array_push 和 array_shift 函数模拟队列的先进…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php 实现面包屑导航

php 实现面包屑导航

实现面包屑导航的方法 面包屑导航(Breadcrumb Navigation)是一种常见的网站导航方式,用于显示用户当前页面的路径。以下是几种在 PHP 中实现面包屑导航的方法。 基于 URL 路径…