警告:strpos()要求参数1为字符串,中给定的数组


Warning: strpos() expects parameter 1 to be string, array given in

我不知道eror_log生成了什么,但代码运行良好,但日志让我好奇

PHP警告:strpos()要求参数1为字符串,数组在第46行/home/abc/public_html/url.PHP中给出

第46行是:

if (strpos($headers['Content-Type'], 'image/') === FALSE) {

这是代码:

$headers = @get_headers($url, 1); // @ to suppress errors. Remove when debugging.
if (isset($headers['Content-Type'])) {
  if (strpos($headers['Content-Type'], 'image/') === FALSE) {
    // Not a regular image (including a 404).
  }
  else {
    // It's an image!
    header("Location: ".$url);
    die();
  }
}
else {
  // No 'Content-Type' returned.
}

如果请求是POST,则可以使用$_SERVER["CONTENT_TYPE"]获取内容类型。

一些响应标头可能有多个值,例如,您可以获得以下值:

$headers["Content-Type"]=>  array {
   [0]=>    "text/html; charset=UTF-8"
   [1]=>    "text/html; charset=ISO-8859-1"
} 

因此,您需要检测到这一点,例如通过使用is_array进行测试。

请注意,以上内容用于处理响应标头,即服务器返回的内容类型,而不是客户端请求作为内容类型的内容。

另一方面,如果您需要当前请求的内容类型(即$url是当前请求的url),则使用get_headers不是可行的方法。它向给定的URL启动一个HTTP请求,以从服务器检索标头。但由于这是您已经在处理的请求,因此无法返回有用的信息。此外,响应报头通常不依赖于客户端浏览器将具有的信息(例如,请求是否源自img标签)。

如果您需要有关当前请求的信息,您可以使用以下选项之一(或组合):

  • $_SERVER["CONTENT_TYPE"]
  • $_SERVER['HTTP_ACCEPT']
  • apache_request_headers()(=getallheaders())

每个人都有自己的优点和缺点。