php: get_headers Результаты функции разные - PullRequest
1 голос
/ 10 октября 2009

я использую функцию get_headers в PHP для запроса заголовков с сайта в локальных серверах возвращаются массивы ставить при использовании на моем сайте Не возвращает массивы

примеры возврата

на локальном сервере

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 ]

1 голос
/ 10 октября 2009

Кажется, есть разница в том, как PHP обрабатывает перенаправления на вашем локальном сервере и на реальном сервере. Я думаю, что вы также получите локальные массивы, но по некоторым причинам get_headers () локально, похоже, не следует перенаправлениям.

Версия PHP одинакова в обеих средах?

0 голосов
/ 25 марта 2011

Кажется, нет причин для этого. Вы должны установить второй параметр на ненулевое значение, чтобы получить массив 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 s, что делает формат массива непригодным для правильного получения заголовков каждого из перенаправлений. Формат строкового массива не намного лучше, так как вам нужно будет проанализировать заголовки. Но с помощью формата массива вы можете определить последнее местоположение и т. Д.

...