我不知道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())
每个人都有自己的优点和缺点。