Avatar billede tzr Nybegynder
15. januar 2007 - 16:41 Der er 11 kommentarer og
1 løsning

Request Headers

Hvordan får jeg fat i alle headers i et request på en Apache server der kører php gennem CGI ?
Avatar billede coderdk Praktikant
15. januar 2007 - 18:33 #1
Prøv at se på getallheaders() eller apache_response_headers():
http://dk.php.net/getallheaders og http://dk.php.net/apache_response_headers
Avatar billede coderdk Praktikant
15. januar 2007 - 18:35 #2
Ah, getallheaders: "This function is only supported when PHP is installed as an Apache module" - Så jeg ikke lige :P
Avatar billede coderdk Praktikant
15. januar 2007 - 18:51 #3
Når du kører CGI er dit eneste håb nok:

    foreach ( $_SERVER as $key => $val )
        if ( substr( $key, 0, 5 ) == 'HTTP_' )
            echo "$key: $val<br>";
Avatar billede coderdk Praktikant
15. januar 2007 - 18:54 #4
Eller hvis det skal være pænt header-agtigt output:

    foreach ( $_SERVER as $key => $val )
        if ( substr( $key, 0, 5 ) == 'HTTP_' )
            echo str_replace( " ", "-", ucwords( strtolower( str_replace( "_", " ", substr( $key, 5 ) ) ) ) ) . ": $val<br>";
Avatar billede tzr Nybegynder
16. januar 2007 - 00:05 #5
Og det virker faktisk, både med apache2handler og cgi, smukt :)

Hurtig test:
<?
header("Content-type: text/plain");
print_r($_SERVER);
?>

point ?
Avatar billede coderdk Praktikant
16. januar 2007 - 09:16 #6
Ok :)
Avatar billede coderdk Praktikant
16. januar 2007 - 09:17 #7
Bemærk at den sidste metode ikke nødvendigvis tager ALLE headers med - Det er kun den øverste hvor php er bygget som et modul, at de kommer med!
Avatar billede tzr Nybegynder
16. januar 2007 - 12:53 #8
Så vidt jeg kan se bliver diverse custom headers også opfanget, dog bliver de konverteret til upper case, og "-" bliver erstattet med "_".

Følgende kommando på Linux:
wget --header='X-TestHeader1: 1234' http://localhost/headers.php -O -

hvor headers.php inkluderer følgende kode:
<?
header("Content-type: text/plain");
print_r($_SERVER);
?>

Retunerer bla. følgende:
Array
(
    [HTTP_USER_AGENT] => Wget/1.10.2
    [HTTP_ACCEPT] => */*
    [HTTP_HOST] => localhost
    [HTTP_CONNECTION] => Keep-Alive
    [HTTP_X_TESTHEADER1] => 1234
)

Og så selvfølgelig en masse der ikke har noget med headers, at gøre.
Avatar billede coderdk Praktikant
16. januar 2007 - 12:54 #9
Ah, nice, så har de vist lavet det om :-D
Avatar billede tzr Nybegynder
16. januar 2007 - 12:56 #10
og ovenstående er så testet igen på båge cgi og apache2handler :)

Personligt kan jeg ikke se hvor det store problem skulle ligge i, at have en kommando som getallheaders(), der også virkede på cgi. Altså headers bliver vel for helvede også overført via cgi :)
Avatar billede coderdk Praktikant
16. januar 2007 - 12:58 #11
Næh, jeg tror det er fordi at getallheaders() bruger et apache API-kald som kun er tilgængelig for moduler...
Avatar billede tzr Nybegynder
16. januar 2007 - 13:01 #12
ja, men så kunne man vel lige tjekke under compile om man var et modul, og hvis man ikke var lige ha noget kode der gjorde det samme under cgi :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester