Что именно делает этот код PHP? - PullRequest
1 голос
/ 24 апреля 2010

Хорошо, мой друг дал мне этот код для запроса заголовков и сравнения их с тем, каким должен быть заголовок. Это работает отлично, но я не уверен, почему. Вот код:

    $headers = apache_request_headers(); 
    $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; 
    foreach ($headers as $header => $value) { // 1
        $custom .= "$header: $value"; // 2
    }
    $mystring = $custom;  // 3
    $findme   = $customheader; // 4
    $pos = strpos($mystring, $findme); 
    if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.

Я прокомментировал некоторые цифры, относящиеся к следующим вопросам:

  1. Что именно здесь происходит? Это устанавливает заголовки $ как заголовок $ И значение $?

  2. Опять же, понятия не имею, что здесь происходит.

  3. Зачем устанавливать переменную в другую переменную? Это единственная область, где переменная используется, поэтому есть ли причина установить ее на что-то другое?

  4. Тот же вопрос, что и 3.

Извините, если это ужасный вопрос, но он беспокоит меня, и я действительно хочу знать, ПОЧЕМУ это работает. Ну, я понимаю, почему это работает, я думаю, я просто хочу знать более конкретно. Спасибо за любую информацию, которую вы можете предоставить.

Ответы [ 3 ]

3 голосов
/ 24 апреля 2010
 $headers = apache_request_headers(); 

Получает массив заголовков.

    $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; 

Определил "customheader", который будет искать.

    foreach ($headers as $header => $value) { // 1
        $custom .= "$header: $value"; // 2
    }

Выполните цикл и создайте переменную $custom для хранения расширенного заголовка $key=>$value.

    $mystring = $custom;  // 3
    $findme   = $customheader; // 4
    $pos = strpos($mystring, $findme); 

Найдите $customheader в расширенной строке.

    if ($pos !== false) {
// Do something
} else{ exit(); } //If it doesn't match, exit.

Нет необходимости переназначать переменные. По сути, он берет массив заголовков и превращает его в одну большую строку, которую затем просматривает, чтобы увидеть, существует ли текст $customheader.

1 голос
/ 24 апреля 2010

apache_request_headers () возвращает ассоциативный массив всех заголовков HTTP в текущем запросе и возвращает false в случае сбоя.Так что хорошо проверить возвращаемое значение следующим образом:

$headers = apache_request_headers(); 
if(! $headers) {
 die("Error fetching headers");
}

1: Вы повторяете полученный ассоциативный массив.
2: формируете строку из пар склеенных значений ключа в массиве сключ и значение, разделенные двоеточием.
3 и 4 просто присваивают одну переменную другой.Вы могли бы непосредственно использовать: $pos = strpos($custom, $customheader); вместо шагов 3 и 4. strpos возвращает false, если не может найти ваш $customheader в $custom, иначе он возвращает найденную позицию.

В целомэтот фрагмент проверяет, присутствует ли ваш пользовательский заголовок в заголовках, возвращаемых apache_request_headers.

1 голос
/ 24 апреля 2010
  1. Он перебирает заголовки $, присваивая ключ каждого элемента $ header и значение $ value. Итак, внутри блока мы получаем имя заголовка и его значение в отдельных переменных.
  2. На этом шаге мы объединяем все заголовки в одну строку, используя оператор точки. По сути, мы конвертируем заголовки из массива в строку.
  3. Если эти переменные не используются где-либо еще, нет причин для переназначения.

отказ от ответственности: я рубин, поэтому, пожалуйста, поправьте меня, если я ошибаюсь.

...