当数组发送到函数php时strtolower警告

时间:2018-01-03 07:44:20

标签: php

我有这个功能来检查网址是否是图片:

function isImage($url){
$url_headers=get_headers($url, 1);
    if(isset($url_headers['Content-Type'])){
        $type=strtolower($url_headers['Content-Type']); // strtolower() expects parameter 1 to be string, array given

        $valid_image_type=array();
        $valid_image_type['image/png']='';
        $valid_image_type['image/jpg']='';

        if(isset($valid_image_type[$type])){
            return true;
        }
        else{
            return false;
        }
    }
}

和此:

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

它是一个数组,但我得到位置0的值并将其发送到函数。这里有什么问题?我只想要位置0.任何想法如何解决警告?

1 个答案:

答案 0 :(得分:1)

它无法100%确定它总是会以真实的方式回归,但无论如何“Shujaat”建议首先应该检查:

1-标题内容而不是仅扩展(即使图像以“.php”或其他任何内容的动态提供动态,也能正常工作)

2-验证标头内容长度以确保其大于0且服务器未发送HTTP/1.1 404

3 - 验证图像是否为重定向。 (如果是404页面或默认图像文件)

基本示例:

// URL
 $url = "https://packagecontrol.io/img/book5.png";

// verify the URL is exists or not
$get_headers = @get_headers($url);

if($get_headers[0] == 'HTTP/1.1 404 Not Found') {
   $url_exists = false;
} else {
$url_exists = true;
}

// verify if the URL is image
if($url_exists){
 if(isset($get_headers['Content-Type'])){

    $type = strtolower($get_headers['Content-Type']);

    $valid_image_type = array();
    $valid_image_type['image/png']      = '';
    $valid_image_type['image/jpg']      = '';
    $valid_image_type['image/jpeg']     = '';

    if(isset($valid_image_type[$type])){
        // success
    } else {
        // fail.
    }
  }
} else {
// throw "URL does not Exist"
}

- 其他方式
在我看来,更快的方法是使用这个在JavaScript上运行的项目 它非常好:Here

  

现场演示:Here