Bu PHP kodu tam olarak ne yapar?

3 Cevap php

Tamam, arkadaşım başlıkları talep ve başlık ne olmalı bunları karşılaştırmak için bana bu kodu verdi. Bu mükemmel çalışıyor, ama neden emin değilim. İşte kod:

    $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.

Ben aşağıdaki sorulara ilişkin bazı rakamları yorumladı:

  1. Tam olarak ne oluyor burada? O $ başlığında VE $ değer olarak $ başlıklarını belirliyor?

  2. Yine, burada ne olup bittiğini hiçbir fikrim yok.

  3. Neden farklı bir değişkene değişkeni ayarlamak? Bu değişken alışmak tek alandır, bu yüzden başka bir şey bunu ayarlamak için bir neden var mı?

  4. 3 aynı soru.

Bu korkunç bir soru varsa ben özür dilerim, ama onun beni rahatsız, ve ben gerçekten çalıştığını NEDEN bilmek istiyorum. Çalışır neden Eh, ben sadece daha fazla özellikle bilmek istiyorum sanırım, anlıyorum. Eğer sağlayabilir herhangi bir fikir için teşekkürler.

3 Cevap

 $headers = apache_request_headers(); 

Başlık dizisi alır.

    $customheader = "Header: 7ddb6ffab28bb675215a7d6e31cfc759"; 

Bunun için arayacaktır "customheader" tanımladı.

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

Dögü ve genişletilmiş $key=>$value başlık tutmak için $custom değişkeni oluşturun.

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

Genişletilmiş dize $customheader arayın.

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

Gerçekten değişkenlerin yeniden atama için bir ihtiyaç yoktur. Özünde bu başlıkların dizi alıyor ve daha sonra $customheader metin olup olmadığını görmek için arar büyük bir dizeye çevirerek.

  1. Bu $ başlığında her elemanın anahtar ve $ değerine değer atama, $ başlıklarını yineleme var. Yani, blok içinde, biz başlığının adını ve ayrı değişkenler onun değeri olsun.
  2. Bu aşamada biz nokta operatörünü kullanarak tek bir dizede tüm başlıkları birleştirmek. Esasen, bir dizeye, bir diziden başlıkları dönüştürme ediyoruz.
  3. Bu değişkenler başka bir yerde kullanılan sürece, atama için hiçbir neden yok.

Yasal Uyarı: Ben yakut bir insanım, bu yüzden Yanılıyorsam beni düzeltin lütfen.

apache_request_headers() tüm mevcut isteğin HTTP başlıkları ve eğer başarısız döner false bir ilişkisel dizi döndürür. Yani onun iyi dönüş değerini kontrol etmek gibi:

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

1: You are iterating your the associative array you got.
2: form a string of glued key value pairs in the array, with the key and value separated by a colon.
3 and 4 are just assigning one variable to another. You could have directly used: $pos = strpos($custom, $customheader); in place of steps 3 and 4. strpos returns false if it cannot find your $customheader in $custom else it returns the found position.

Genel olarak bu pasajı kontroller özel başlık apache_request_headers tarafından döndürülen başlıklarda mevcut ise.