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

PHP中strtolower接收数组触发警告的问题排查与解决

问题原因分析

你遇到的警告strtolower() expects parameter 1 to be string, array given,核心原因是**get_headers($url, 1)返回的Content-Type可能是数组类型**。

当你给get_headers的第二个参数传1时,函数会返回关联数组,若目标URL存在重定向(比如HTTP 301/302跳转),Content-Type会被存储为数组,包含每一次跳转响应的Content-Type值。这时候你直接取$url_headers['Content-Type'],拿到的就不是字符串,而是数组,传给strtolower自然就触发类型错误警告。

解决办法

我们需要先处理Content-Type可能为数组的情况,同时优化函数的健壮性,以下是修正后的代码:

function isImage($url){ 
    $url_headers = get_headers($url, 1); 
    if(!isset($url_headers['Content-Type'])){
        return false; // 没有Content-Type直接返回非图片
    }

    // 处理Content-Type是数组的情况(重定向场景),取最后一次响应的类型
    $type = $url_headers['Content-Type'];
    if(is_array($type)){
        $type = end($type); // 获取数组最后一个元素,即最终响应的Content-Type
    }
    $type = strtolower($type);

    // 用更简洁的方式定义有效图片类型
    $valid_image_types = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', 'image/webp'];
    return in_array($type, $valid_image_types);
}

关键优化点:

  • 处理数组类型的Content-Type:用is_array()判断,若为数组则取最后一个元素(因为最后一次响应的Content-Type才是目标资源的真实类型)。
  • 完善边界判断:增加!isset($url_headers['Content-Type'])的判断,避免无头部时的逻辑漏洞。
  • 简化有效类型判断:用in_array替代关联数组查找,更直观易维护,同时补充了常见的图片类型(比如webp、gif)。
  • 确保函数总有返回值:原函数在某些分支下没有返回值,修正后所有路径都会返回布尔值,符合PHP函数的规范。

调用代码可以保持不变:

if(isImage($matches[0])){ 
    // do something 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:04:20