You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP判断图片URL返回的是有效图片还是无效XML?

检查Azure Blob图片URL有效性的PHP解决方案

针对你遇到的问题——部分Azure Blob URL返回XML而非有效图片,导致FPDF生成PDF时触发致命错误,可以通过以下步骤提前验证URL有效性:

1. 优先检查HTTP响应头的Content-Type

有效图片的响应头Content-Type会是image/jpeg、image/png等图片类型,而无效XML的响应头通常为application/xml或text/xml。通过curl获取响应头可以快速过滤大部分无效链接:

function isValidImageUrl($url) {
    // 第一步:检查响应头Content-Type
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_NOBODY, true); // 只请求头,不获取内容
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 处理重定向
    curl_exec($ch);
    $contentType = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    $validImageTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
    if (!in_array($contentType, $validImageTypes)) {
        return false;
    }

2. 验证返回内容是否为XML

部分场景下可能存在Content-Type标注错误的情况,因此需要进一步检查返回内容是否以XML声明开头:

// 第二步:获取内容并检查是否为XML
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $imageData = curl_exec($ch);
    curl_close($ch);

    if ($imageData === false || str_starts_with(trim($imageData), '<?xml')) {
        return false;
    }

3. 最终验证图片有效性

最后通过getimagesize确认内容为有效图片,这里需要将内容写入临时文件(避免直接传入URL触发错误):

// 第三步:验证图片格式有效性
    $tempFile = tempnam(sys_get_temp_dir(), 'img_');
    file_put_contents($tempFile, $imageData);
    $isValidImage = getimagesize($tempFile) !== false;
    unlink($tempFile); // 清理临时文件

    return $isValidImage;
}

使用示例

在FPDF添加图片前调用验证函数,仅处理有效图片:

$targetUrl = 'https://whisestorageprod.blob.core.windows.net/public/bouwen/Pictures/5226673/200/15f953d227594f2d95628b2975a1b7a9.jpg';
if (isValidImageUrl($targetUrl)) {
    $pdf->Image($targetUrl, 10, 10, 50); // 替换为你的FPDF参数
} else {
    // 处理无效图片逻辑:比如添加占位图、跳过该图片或记录日志
    $pdf->Cell(50, 20, '图片无效', 1);
}

注意事项

  • 确保服务器开启curl扩展(大部分环境默认支持);
  • 若allow_url_fopen开启,也可使用file_get_contents替代curl获取内容,但curl的兼容性更强;
  • 临时文件会自动清理,无需担心磁盘占用。

内容的提问来源于stack exchange,提问作者Senne Vandenputte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 23:30:31