简体   繁体   English

PHP 7.0 isset中的偏移量类型为非法或为空

[英]PHP 7.0 Illegal offset type in isset or empty

On my Apache ErrorLog file I see many times this warning message: 在我的Apache ErrorLog文件上,我多次看到此警告消息:

[Wed Aug 23 17:27:25.146025 2017] [:error] [pid 14989] [client 66.249.76.54:44935] PHP Warning: Illegal offset type in isset or empty in /var/www/html/blog/wp-content/plugins/ilab-media-tools/classes/tools/s3/ilab-media-s3-tool.php on line 1012 [2017年8月23日星期三17:27:25.146025 2017年] [:错误] [pid 14989] [客户端66.249.76.54:44935] PHP警告:isset中的偏移量类型非法,或在/ var / www / html / blog / wp-content中为空第1012行的/plu​​gins/ilab-media-tools/classes/tools/s3/ilab-media-s3-tool.php

It's related to a Wordpress plugin, I tried on Github to ask help from author (as many others) but nothing. 它与Wordpress插件有关,我在Github上尝试向作者(以及其他许多人)寻求帮助,但没有任何帮助。

The warning points to this function: 警告指出此功能:

public function imageDownsize($fail,$id,$size) {
    if (apply_filters('ilab_imgix_enabled', false)) {
            return $fail;
    }

    $meta=wp_get_attachment_metadata($id);
    // This is the line of the warning:
    if (!isset($meta['sizes']) || !isset($meta['sizes'][$size])) {
            return $fail;
    }

    $sizeMeta = $meta['sizes'][$size];
    if (!isset($sizeMeta['s3'])) {
            return $fail;
    }

    $url = $sizeMeta['s3']['url'];

    $result=[
            $url,
            $sizeMeta['width'],
            $sizeMeta['height'],
        true
    ];

    return $result;
}

Apache prints this warning every minute. Apache每分钟都会打印一次此警告。 Is there a way to fix this annoying message warning? 有没有办法解决此烦人的消息警告?

This is the output of var_dump($meta); 这是var_dump($meta);的输出var_dump($meta); :

array(7) {
  ["width"]=>
  int(140)
  ["height"]=>
  int(140)
  ["file"]=>
  string(31) "2016/01/logo_retina.png"
  ["sizes"]=>
  array(0) {
  }
  ["image_meta"]=>
  array(12) {
    ["aperture"]=>
    int(0)
    ["credit"]=>
    string(0) ""
    ["camera"]=>
    string(0) ""
    ["caption"]=>
    string(0) ""
    ["created_timestamp"]=>
    int(0)
    ["copyright"]=>
    string(0) ""
    ["focal_length"]=>
    int(0)
    ["iso"]=>
    int(0)
    ["shutter_speed"]=>
    int(0)
    ["title"]=>
    string(0) ""
    ["orientation"]=>
    int(0)
    ["keywords"]=>
    array(0) {
    }
  }
  ["ewww_image_optimizer"]=>
  string(30) "Reduced by 16.3% (1.3 kB)"
  ["s3"]=>
  array(3) {
    ["url"]=>
    string(79) "https://s3-eu-west-1.amazonaws.com/blog-example/2016/01/logo_retina.png"
    ["bucket"]=>
    string(12) "blog-example"
    ["key"]=>
    string(31) "2016/01/logo_retina.png"
  }
}
array(7) {
  ["width"]=>
  int(140)
  ["height"]=>
  int(140)
  ["file"]=>
  string(31) "2016/01/logo_retina.png"
  ["sizes"]=>
  array(0) {
  }
  ["image_meta"]=>
  array(12) {
    ["aperture"]=>
    int(0)
    ["credit"]=>
    string(0) ""
    ["camera"]=>
    string(0) ""
    ["caption"]=>
    string(0) ""
    ["created_timestamp"]=>
    int(0)
    ["copyright"]=>
    string(0) ""
    ["focal_length"]=>
    int(0)
    ["iso"]=>
    int(0)
    ["shutter_speed"]=>
    int(0)
    ["title"]=>
    string(0) ""
    ["orientation"]=>
    int(0)
    ["keywords"]=>
    array(0) {
    }
  }
  ["ewww_image_optimizer"]=>
  string(30) "Reduced by 16.3% (1.3 kB)"
  ["s3"]=>
  array(3) {
    ["url"]=>
    string(79) "https://s3-eu-west-1.amazonaws.com/blog-example/2016/01/logo_retina.png"
    ["bucket"]=>
    string(12) "blog-example"
    ["key"]=>
    string(31) "2016/01/logo_retina.png"
  }
}
array(7) {
  ["width"]=>
  int(140)
  ["height"]=>
  int(140)
  ["file"]=>
  string(31) "2016/01/logo_retina.png"
  ["sizes"]=>
  array(0) {
  }
  ["image_meta"]=>
  array(12) {
    ["aperture"]=>
    int(0)
    ["credit"]=>
    string(0) ""
    ["camera"]=>
    string(0) ""
    ["caption"]=>
    string(0) ""
    ["created_timestamp"]=>
    int(0)
    ["copyright"]=>
    string(0) ""
    ["focal_length"]=>
    int(0)
    ["iso"]=>
    int(0)
    ["shutter_speed"]=>
    int(0)
    ["title"]=>
    string(0) ""
    ["orientation"]=>
    int(0)
    ["keywords"]=>
    array(0) {
    }
  }
  ["ewww_image_optimizer"]=>
  string(30) "Reduced by 16.3% (1.3 kB)"
  ["s3"]=>
  array(3) {
    ["url"]=>
    string(79) "https://s3-eu-west-1.amazonaws.com/blog-example/2016/01/logo_retina.png"
    ["bucket"]=>
    string(12) "blog-example"
    ["key"]=>
    string(31) "2016/01/logo_retina.png"
  }
}
array(7) {
  ["width"]=>
  int(140)
  ["height"]=>
  int(140)
  ["file"]=>
  string(31) "2016/01/logo_retina.png"
  ["sizes"]=>
  array(0) {
  }
  ["image_meta"]=>
  array(12) {
    ["aperture"]=>
    int(0)
    ["credit"]=>
    string(0) ""
    ["camera"]=>
    string(0) ""
    ["caption"]=>
    string(0) ""
    ["created_timestamp"]=>
    int(0)
    ["copyright"]=>
    string(0) ""
    ["focal_length"]=>
    int(0)
    ["iso"]=>
    int(0)
    ["shutter_speed"]=>
    int(0)
    ["title"]=>
    string(0) ""
    ["orientation"]=>
    int(0)
    ["keywords"]=>
    array(0) {
    }
  }
  ["ewww_image_optimizer"]=>
  string(30) "Reduced by 16.3% (1.3 kB)"
  ["s3"]=>
  array(3) {
    ["url"]=>
    string(79) "https://s3-eu-west-1.amazonaws.com/blog-example/2016/01/logo_retina.png"
    ["bucket"]=>
    string(12) "blog-example"
    ["key"]=>
    string(31) "2016/01/logo_retina.png"
  }
}
array(7) {
  ["width"]=>
  int(140)
  ["height"]=>
  int(140)
  ["file"]=>
  string(31) "2016/01/logo_retina.png"
  ["sizes"]=>
  array(0) {
  }
  ["image_meta"]=>
  array(12) {
    ["aperture"]=>
    int(0)
    ["credit"]=>
    string(0) ""
    ["camera"]=>
    string(0) ""
    ["caption"]=>
    string(0) ""
    ["created_timestamp"]=>
    int(0)
    ["copyright"]=>
    string(0) ""
    ["focal_length"]=>
    int(0)
    ["iso"]=>
    int(0)
    ["shutter_speed"]=>
    int(0)
    ["title"]=>
    string(0) ""
    ["orientation"]=>
    int(0)
    ["keywords"]=>
    array(0) {
    }
  }
  ["ewww_image_optimizer"]=>
  string(30) "Reduced by 16.3% (1.3 kB)"
  ["s3"]=>
  array(3) {
    ["url"]=>
    string(79) "https://s3-eu-west-1.amazonaws.com/blog-example/2016/01/logo_retina.png"
    ["bucket"]=>
    string(12) "blog-example"
    ["key"]=>
    string(31) "2016/01/logo_retina.png"
  }
}

And the output of var_dump($size); var_dump($size);的输出var_dump($size); :

string(4) "full"
array(2) {
  [0]=>
  int(32)
  [1]=>
  int(32)
}
array(2) {
  [0]=>
  int(192)
  [1]=>
  int(192)
}
array(2) {
  [0]=>
  int(180)
  [1]=>
  int(180)
}
array(2) {
  [0]=>
  int(270)
  [1]=>
  int(270)
}

So, based on the GitHub issue, it looks like this line is failing somehow 因此,基于GitHub问题,该行似乎因某种原因而失败

$meta=wp_get_attachment_metadata($id);

According to the WP reference it returns 根据WP参考,它返回

Attachment meta field. 附件元字段。 False on failure. 错误的失败。

The code mistakenly assumes it's always going to get an array back. 该代码错误地认为它总是要取回一个数组。 So you could fix this by changing the following to make sure $meta isn't false 因此,您可以通过更改以下内容以确保$meta不为假来解决此问题

if (!$meta || !isset($meta['sizes']) || !isset($meta['sizes'][$size])) {
        return $fail;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM