警告:strpos()期望参数1为字符串,数组为

时间:2015-12-13 00:02:09

标签: php strpos

我不知道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.
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

某些响应标头可能有多个值,例如你可以这样:

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

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

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

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

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

  • $ _ SERVER [" CONTENT_TYPE"]
  • $ _ SERVER [' HTTP_ACCEPT']
  • get_headers(= getallheaders())
每个人都各有利弊。