Проверьте ключ в массиве php - PullRequest
0 голосов
/ 01 апреля 2012

Я использую get_headers () и хочу вернуть длину содержимого. В массиве ниже длины содержимого находится ключ номер 9, однако я считаю, что длина содержимого не всегда является ключом номер 9. Я не уверен, почему это не всегда один и тот же ключ? Как искать в массиве и всегда возвращать длину содержимого независимо от того, какой это ключ? Поскольку я использую это в функции, фактический размер файла будет отличаться каждый раз. Мой пример кода ниже. Заранее спасибо.

Array ( [0] => HTTP/1.0 200 OK [1] => Server: Apache [2] => Pragma: public [3] => Last-Modified: Sun, 01 Apr 2012 07:59:46 GMT [4] => ETag: "1333267186000" [5] => Content-Type: text/javascript [6] => Cache-Control: must-revalidate, max-age=0, post-check=0, pre-check=0 [7] => Expires: Sun, 01 Apr 2012 10:27:26 GMT [8] => Date: Sun, 01 Apr 2012 10:27:26 GMT [9] => Content-Length: 31650 [10] => Connection: close [11] => Set-Cookie: JSESSIONID=M0V4NTTVSIB4WCRHAWVSFGYKE2C0UIV0; path=/ [12] => Set-Cookie: DYN_USER_ID=2059637079; path=/ [13] => Set-Cookie: DYN_USER_CONFIRM=6c6a03988da3de6d704ce37a889b1ec8; path=/ [14] => Set-Cookie: BIGipServerdiy_pool=637871882.20480.0000; path=/ )

function headInfo($url) {
    $header = get_headers($url);
    $fileSize = $header[9];
    return array($header, $fileSize);
}

Ответы [ 4 ]

4 голосов
/ 01 апреля 2012

http://php.net/get_headers

Второй параметр:

Если для необязательного параметра формата задано ненулевое значение, get_headers () анализирует ответ и устанавливает ключи массива.

Итак, просто передайте 1 в качестве второго параметра, и $ header ['Content-Length'] будет тем, что вам нужно.

1 голос
/ 01 апреля 2012
get_headers($url,true);

0 голосов
/ 28 декабря 2013

В основном

array get_headers ( string $url [, int $format = 0 ] )

Пример:

get_headers($url,true);

даст вам ассоциативный массив

Подробно

 <?php
 $url = 'http://www.example.com';

 print_r(get_headers($url));

 print_r(get_headers($url, 1));
 ?>

Это даст

Array
(
  [0] => HTTP/1.1 200 OK
  [1] => Date: Sat, 29 May 2004 12:28:13 GMT
  [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
  [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
  [4] => ETag: "3f80f-1b6-3e1cb03b"
  [5] => Accept-Ranges: bytes
  [6] => Content-Length: 438
  [7] => Connection: close
  [8] => Content-Type: text/html
)

Array
(
  [0] => HTTP/1.1 200 OK
  [Date] => Sat, 29 May 2004 12:28:14 GMT
  [Server] => Apache/1.3.27 (Unix)  (Red-Hat/Linux)
  [Last-Modified] => Wed, 08 Jan 2003 23:11:55 GMT
  [ETag] => "3f80f-1b6-3e1cb03b"
  [Accept-Ranges] => bytes
  [Content-Length] => 438
  [Connection] => close
  [Content-Type] => text/html
)

Надеюсь, это поможет

0 голосов
/ 01 апреля 2012

Если вы посмотрите на документацию по функции get_headers () , вы можете заметить, что есть второй (по умолчанию) параметр, который можно использовать для указания формата вывода.

$hdr = get_headers($url, 1);
echo("Content-length: " . $hdr["Content-length"]);

1 - означает, что функция вернет ассоциативный массив.

...