php:get_headers函数结果不同

时间:2009-10-10 03:24:42

标签: php get-headers

我在PHP中使用get_headers函数来请求来自网站的标题 在本地服务器返回数组 在我的网站上使用时放入不返回数组

退货的例子

在本地服务器

Array
(
    [0] => HTTP/1.1 301 Moved
    [Server] => Array
        (
            [0] => nginx/0.7.42
            [1] => Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4
            [2] => Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4
            [3] => Microsoft-IIS/7.0
        )
    [Content-Type] => Array
        (
            [0] => text/html; charset=utf-8
            [1] => text/html; charset=iso-8859-1
            [2] => text/html
            [3] => text/html; charset=utf-8
        )
    [Location] => Array
        (
            [0] => http//3.ly/aXP
            [1] => http//3.ly/aXP/
            [2] => http//stackoverflow.com
        )
    [MIME-Version] => 1.0
    [Content-Length] => Array
        (
            [0] => 277
            [1] => 376
            [2] => 0
            [3] => 122213
        )
)

在真实服务器

Array
(
    [0] => HTTP/1.1 301 Moved
    [Server] => nginx/0.7.42
    [Date] => Sat, 10 Oct 2009 03:15:32 GMT
    [Content-Type] => text/html; charset=utf-8
    [Connection] => keep-alive
    [Location] => http//3.ly/aXP
    [MIME-Version] => 1.0
    [Content-Length] => 277
)

我不会返回数组

感谢....

2 个答案:

答案 0 :(得分:1)

PHP在本地服务器和真实服务器上处理重定向的方式似乎有所不同。我认为你也会在本地获取数组,但由于某些原因,get_headers()本地似乎不遵循重定向。

两种环境中的PHP版本是否相同?

答案 1 :(得分:0)

这似乎没有理由。您应该将第二个参数设置为非零值,以便获取数组 1

get_headers($url, 1);

如果你这样做,它应该在任何地方运行相同,除非PHP本身或有问题的服务器中存在错误(偶尔用户都很少见)。

请注意,get_headers遵循(多个)重定向并将每个重定向的标头存储为数组 2

array(11) {
  [0]=>
  string(30) "HTTP/1.0 301 Moved Permanently"
  ["Location"]=>  string(22) "http://www.google.com/"
  ["Content-Type"]=>  array(2) {
    [0]=>    string(24) "text/html; charset=UTF-8"
    [1]=>    string(29) "text/html; charset=ISO-8859-1"
  }
...

重定向的特定标头值是连续存储的,因此看起来Content-Type[0]可能与任何Location相关,这使得数组格式无法获取每个标头的标头重定向正确。行数组格式不是更好,因为您需要解析标题。但是使用数组格式,您可以检测到最后的位置等。