当前位置:首页 > 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 提取文件名或使用时间戳命名。

$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("图片不可访问");
}

分块下载大文件

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

$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 攻击。

php实现图片下载

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

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

相关文章

php实现购物车

php实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现排序

php实现排序

PHP 数组排序方法 PHP 提供了多种内置函数用于数组排序,适用于不同的排序需求。以下是常见的排序方法: 按值升序排序 sort() 函数对数组按值升序排序,重置键名(索引数组适用): $num…

php 队列的实现

php 队列的实现

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