Windows.  Virus.  Anteckningsböcker.  Internet.  kontor.  Verktyg.  Förare

$HTTP_SERVER_VARS [borttagen]

(PHP 4 >= 4.1.0, PHP 5, PHP 7)

$_SERVER -- $HTTP_SERVER_VARS [borttagen]Server- och körtidsinformation

Beskrivning

Variabeln $_SERVER är en array som innehåller information som skriptrubriker, sökvägar och platser. Posterna i denna array skapas av webbservern. Det finns ingen garanti för att varje webbserver kommer att tillhandahålla något av dessa; servern kan utelämna några av dessa eller tillhandahålla andra som inte är listade här. Men många av dessa variabler finns i » CGI/1.1-specifikationen, så du kan förvänta dig att de också ska implementeras i en viss webbserver.

Variabeln $HTTP_SERVER_VARS innehåller samma initiala information, men den är inte en superglobal. (Observera att $HTTP_SERVER_VARS och $_SERVER är olika variabler, så PHP hanterar dem därefter.) Observera också att "långa arrayer" togs bort i PHP 5.4.0, så $HTTP_SERVER_VARS existerar inte längre.

Index

Du kanske inte hittar något av följande element i $_SERVER-arrayen. Observera att få, om några, objekt kommer att vara tillgängliga (eller verkligen spelar någon roll) om PHP körs på kommandoraden.

"PHP_SELF" Filnamnet på det skript som körs för närvarande, i förhållande till dokumentroten. Till exempel, $_SERVER["PHP_SELF"] i ett skript på http://example.com/foo/bar.php skulle vara /foo/bar.php . Konstanten __FILE__ innehåller hela sökvägen och filnamnet för den aktuella (dvs inkluderade) filen. Om PHP körs in kommandorad, innehåller denna variabel skriptnamnet sedan PHP 4.3.0. Den var tidigare otillgänglig."argv" En rad argument skickades till skriptet. När skriptet körs på kommandoraden ger det C-liknande tillgång till kommandoradsalternativ. När den anropas via GET-metoden kommer denna array att innehålla frågesträngen."argc" Innehåller antalet parametrar som skickas till skriptet (om det startas på kommandoraden)."GATEWAY_INTERFACE" Innehåller versionen av CGI-specifikationen som används av servern; Till exempel" CGI/1.1". "SERVER_ADDR" IP-adressen till servern där det aktuella skriptet körs."SERVER NAMN" Namnet på värden där det aktuella skriptet körs. Om skriptet körs på en virtuell värd kommer detta att innehålla namnet som definierats för det virtuell värd. "SERVER_SOFTWARE" Serveridentifieringssträngen som anges i rubrikerna när begäran besvaras."SERVER_PROTOCOL" Namnet och versionen av informationsprotokollet genom vilket sidan begärdes; Till exempel " HTTP/1.0"; " REQUEST_METHOD " Vilken metod användes för att begära sidan; Till exempel " SKAFFA SIG", "HUVUD", "POSTA", "SÄTTA".

Kommentar:

PHP-skriptet avslutas efter att ha skickat rubriker (det vill säga efter att det gör någon utdata utan utmatningsbuffring), om begäran gjordes av metoden HUVUD.

" REQUEST_TIME " Tidsstämpel för början av begäran. Tillgänglig sedan PHP 5.1.0." REQUEST_TIME_FLOAT " Tidsstämpeln för början av begäran, exakt till mikrosekunder. Tillgänglig sedan PHP 5.4.0." FRÅGESTRÄNG " Frågesträngen, om någon, med vilken sidan hämtades."DOCUMENT_ROOT" Dokumentets rotkatalog där det aktuella skriptet körs är exakt den som anges i konfigurationsfil server."HTTP_ACCEPT" Rubrikinnehåll acceptera: från den aktuella begäran, om någon."HTTP_ACCEPT_CHARSET" Rubrikinnehåll AcceptCharset: från den aktuella begäran, om någon. Till exempel: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" Rubrikinnehåll Acceptera kodning: gzip". "HTTP_ACCEPT_LANGUAGE" Rubrikinnehåll Acceptera-språk: från den aktuella begäran, om någon. Till exempel: " sv". "HTTP_CONNECTION" Rubrikinnehåll förbindelse: från den aktuella begäran, om någon. Till exempel: " Håll vid liv". "HTTP_HOST" Rubrikinnehåll värd: från den aktuella begäran, om någon."HTTP_REFERER" Adressen till sidan (om någon) som förde användarens webbläsare till denna sida. Denna rubrik ställs in av användarens webbläsare. Inte alla webbläsare installerar det, och vissa tillåter att innehållet i HTTP_REFERER-huvudet ändras som en extra funktion. Med ett ord, han kan verkligen inte lita på."HTTP_USER_AGENT" Rubrikinnehåll Användaragent: från den aktuella begäran, om någon. Denna sträng innehåller beteckningen för webbläsaren som användaren begärde denna sida med. Ett typiskt exempel är raden: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Du kan bland annat använda detta värde med funktionen get_browser() för att skräddarsy din sidas utdata till funktionerna i användarens webbläsare"https" Tar ett icke-tomt värde om begäran gjordes via HTTPS-protokollet.

Kommentar: Observera att när du använder ISAPI med IIS kommer värdet att vara av om begäran inte gjordes via HTTPS-protokollet.

"REMOTE_ADDR" IP-adressen från vilken användaren tittar på den aktuella sidan."REMOTE_HOST" Fjärrvärden från vilken användaren visar den aktuella sidan. Omvänd DNS-sökning baseras på värdet på variabeln REMOTE_ADDR.

Kommentar: Din webbserver måste vara konfigurerad för att skapa denna variabel. Till exempel, i Apache behöver du närvaron av direktivet Värdnamnssökningar på i httpd.conf-filen för att denna variabel ska skapas. se även gethostbyaddr().

"REMOTE_PORT" Porten på fjärrdatorn som används för att kommunicera med webbservern."REMOTE_USER" Den autentiserade användaren."REDIRECT_REMOTE_USER" Den autentiserade användaren, om begäran omdirigerades internt."SCRIPT_FILENAME"

Den absoluta vägen till manuset som det här ögonblicket avrättas.

Kommentar:

Om skriptet körs på kommandoraden (CLI) med hjälp av en relativ sökväg som file.php eller ../file.php , kommer variabeln $_SERVER["SCRIPT_FILENAME"] att innehålla den relativa sökvägen som anges av användaren.

"SERVER_ADMIN" Denna variabel får sitt värde (för Apache) från ett direktiv i serverns konfigurationsfil. Om skriptet körs på en virtuell värd kommer detta att vara det värde som definierats för den virtuella värden."SERVER PORT" Porten på serverdatorn som webbservern använder för att ansluta. För standardinställningar kommer värdet att vara " 80 "; med SLL, till exempel, kommer detta värde att vara konfigurerat för säkra HTTP-anslutningar.

Kommentar: För att få den fysiska (riktiga) porten i Apache 2 måste du installera UseCanonicalName = På Och UseCanonicalPhysicalPort = På, annars kan detta värde vara förfalskat och inte returnera det verkliga värdet för den fysiska porten. Att förlita sig på detta värde är osäkert i applikationer som kräver förbättrad säkerhet.

"SERVER_SIGNATURE" En sträng som innehåller serverversionen och det virtuella värdnamnet som ska läggas till på servergenererade sidor, om aktiverat."PATH_TRANSLATED" Filsystem- (inte dokumentrot-) baserad sökväg till det aktuella skriptet, efter att servern har gjort någon virtuell till verklig mappning.

Kommentar: Från och med PHP 4.3.2 är PATH_TRANSLATED-variabeln inte längre implicit inställd i Apache 2 SAPI, jämfört med Apache version 1 där den är satt till samma värde som SCRIPT_FILENAME när den inte används av Apache. Denna ändring gjordes för att överensstämma med CGI-specifikationen, där variabeln PATH_TRANSLATED endast ska finnas när PATH_INFO är definierad. Apache 2-användare kan använda direktivet AcceptPathInfo = På i httpd.conf-konfigurationsfilen för att ställa in PATH_INFO-variabeln.

"SCRIPT_NAME" Innehåller sökvägen till det skript som körs för närvarande. Detta är användbart för sidor som behöver peka på sig själva. Konstanten __FILE__ innehåller hela sökvägen och namnet på den aktuella (dvs inkluderade) filen." REQUEST_URI " URI:en som skickades för att komma åt den här sidan. Till exempel, " /index.html". "PHP_AUTH_DIGEST" När du utför HTTP Digest-autentisering ställs denna variabel in på "Authorization"-huvudet som skickas av klienten (som sedan måste användas för lämplig validering)."PHP_AUTH_USER" När HTTP-autentisering utförs ställs denna variabel in på användarnamnet som användaren tillhandahåller."PHP_AUTH_PW" När HTTP-autentisering utförs ställs denna variabel in på lösenordet som användaren tillhandahåller."AUTH_TYPE" När HTTP-autentisering utförs ställs denna variabel in på den typ av autentisering som används."PATH_INFO" Innehåller valfri sökväg som tillhandahålls av användaren efter skriptnamnet men före frågesträngen, om tillgänglig. Till exempel, om det aktuella skriptet begärs på URL:en http://www.example.com/php/path_info.php/some/stuff?foo=bar , kommer variabeln $_SERVER["PATH_INFO"] att innehålla /några grejer?>

Resultatet av att köra det här exemplet blir ungefär så här.

I den andra lektionen kommer vi att skriva ytterligare två klasser och avsluta den interna delen av manuset helt.

Planen

Målet med denna handledningsserie är att skapa en enkel applikation som låter användare registrera sig, logga in, logga ut och ändra inställningar. Klassen som kommer att innehålla all information om användaren kommer att kallas User och den kommer att definieras i User.class.php-filen. Klassen som kommer att ansvara för in-/utgången kommer att heta UserTools (UserTools.class.php).

Lite om klassnamn

Den korrekta tonen är att namnge klassfiler med samma namn som själva klassen. På så sätt är det lätt att avgöra syftet med varje fil i klassmappen.

Det är också vanligt att lägga till .class eller .inc i slutet av klassfilnamnet. Därför definierar vi tydligt syftet med filen och kan använda .htaccess för att begränsa åtkomsten till dessa filer.

Användarklass (User.class.php)

Denna klass kommer att definiera varje användare. Med tillväxt den här applikationen definitionen av "användare" kan ändras avsevärt. Lyckligtvis gör OOP-programmering det enkelt att lägga till ytterligare användarattribut.

Konstruktör

I den här klassen kommer vi att använda konstruktorn - det här är en funktion som automatiskt anropas när nästa kopia av klassen skapas. Detta gör att vi automatiskt kan publicera vissa attribut efter att projektet har skapats. I den här klassen kommer konstruktorn att ta ett enda argument: en associativ array som innehåller en rad från användartabellen i vår databas.

require_once "db.class.php"; class User ( public $id; public $username; public $hashedPassword; public $email;
public $joinDate;
//Konstruktör anropas när ett nytt objekt skapas//Tar en associativ array med DB-raden som argument. funktion __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" användarnamn"])) ? $data["användarnamn"] : ""; $this->hashedPassword = (isset($data["lösenord"])) ? $data["lösenord"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" join_date"] : ""; )
public function save($isNewUser = false) ( //skapa ett nytt databasobjekt. $db = new DB(); //om användaren redan är registrerad och vi //bara uppdaterar deras information. if(!$isNewUser ) ( //ställ in datamatrisen $data = array("username" => ""$this->användarnamn", "lösenord" => ""$this->hashedPassword",
"email" => ""$this->e-post"");
//uppdatera raden i databasen $db->update($data, "users", "id = ".$this->id); )else ( //om användaren registreras för första gången. $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"" , "email" => ""$this->email"", "join_date" => """.date("Y-m-d H:i:s",time())."""); $this-> id = $db->insert($data, "users"); $this->joinDate = time(); ) return true; ) ) ?>

Förklaring

Den första delen av koden, utanför klasszonen, tillhandahåller anslutningen av klassen till databasen (eftersom det finns en funktion i klassen User som kräver denna klass).

Istället för "skyddade" klassvariabler (används i lektion 1), definierar vi dem som "offentliga". Det betyder att vilken kod som helst utanför klassen har tillgång till dessa variabler när man arbetar med User-objektet.

Konstruktorn tar en array där kolumnerna i tabellen är nycklarna. Vi definierar klassvariabeln med $this->variablename. I exemplet med denna klass kontrollerar vi först och främst om värdet på en viss nyckel finns. Om så är fallet sätter vi klassvariabeln till det värdet. Annars en tom sträng. Koden använder den korta formen av omsättningsnotationen om:

$värde = (3 == 4) ? "A" : "B";

I det här exemplet kontrollerar vi om 3 är lika med fyra! Om ja - då $value = "A", nej - $value = "B". I vårt exempel är resultatet $värde = "B".

Spara information om användare i databasen

Spara-funktionen används för att göra ändringar i databastabellen med de aktuella värdena i User-objektet. Den här funktionen använder DB-klassen vi skapade i den första handledningen. Med hjälp av klassvariabler sätts $datamatrisen. Om detta är första gången användaren lagras, skickas $isNewUser som $true (standard är falsk). Om $isNewUser = $true anropas funktionen insert() för DB-klassen. Annars anropas update()-funktionen. I båda fallen kommer informationen från användarobjektet att lagras i databasen.

Klass UserTools.class.php

Den här klassen kommer att innehålla funktioner relaterade till användare: login(), logout(), checkUsernameExists() och get(). Men med expansionen av denna applikation kan du lägga till många fler.

//UserTools.class.php require_once "User.class.php"; require_once "db.class.php";
klass Användarverktyg(
//Logga in användaren. Kontrollerar först om //användarnamnet och lösenordet matchar en rad i databasen. //Om det lyckas, ställ in sessionsvariablerna //och lagra användarobjektet inom.
offentlig funktionsinloggning ($användarnamn, $password)
{
$hashedPassword = md5($lösenord); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialisera(ny användare(mysql_fetch_assoc($result))); $_SESSION["login_time"] = tid(); $_SESSION["logged_in" "] = 1; return true; )else( return false; ) )
//Logga ut användaren. Förstör sessionsvariablerna. public function logout() ( unset($_SESSION["användare"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Kontrollera om ett användarnamn finns. //Detta anropas under registreringen för att säkerställa att alla användarnamn är unika. offentlig funktion checkUsernameExists($username) ( $result = mysql_query("välj id från användare där användarnamn="$användarnamn""); if(mysql_num_rows($result) == 0) (retur false; )else( return true;)
}
//skaffa en användare //returnerar ett användarobjekt. Tar användar-id som en offentlig ingångsfunktion get($id) ( $db = new DB(); $result = $db->select("användare", "id = $id"); returnera ny användare($result ); ) )
?>

login() funktion

Login()-funktionen är självförklarande. Den tar användarargumenten $username och $password och kontrollerar om de matchar. Om allt stämmer, skapar ett användarobjekt med all information och lagrar det i sessionen. Observera att vi endast använder PHP serialize()-funktionen. Det skapar en beständig version av objektet som enkelt kan unserializes med unserialize(). Även inloggningstiden kommer att sparas. Detta kan användas senare för att ge användarna information om hur länge deras vistelse på webbplatsen varar.

Du kanske också märker att vi sätter $_SESSION["logged_in"] till 1. Detta gör att vi enkelt kan kontrollera på varje sida om användaren är inloggad. Det räcker att bara kontrollera denna variabel.

logout() funktion

Också en enkel funktion. PHP:s unset()-funktion rensar variabler i minnet, medan session_destroy() tar bort sessionen.

checkUsernameExists() funktion

Vem kan engelska kommer lätt att förstå funktionen. Den frågar helt enkelt databasen om en sådan inloggning används eller inte.

get() funktion

Denna funktion tar ett unikt användar-ID och frågar databasen med DB-klassen, nämligen select()-funktionen. Det kommer att ta en associativ array med viss användarinformation och skapa ett nytt användarobjekt som skickar arrayen till konstruktorn.

Var kan den användas? Om du till exempel skapar en sida som behöver visa specifika användarprofiler måste du ta denna information dynamiskt. Så här kan du göra det: (låt oss säga att webbadressen är http://www.website.com/profile.php?userID=3)

//notera: du måste först öppna en databasanslutning. //se del 1 för ytterligare information om hur du gör det. //Du måste också se till att du har inkluderat klassfilerna.
$tools = new UserTools(); $user = $tools->get($_REQUEST["användar-ID"]); echo "Användarnamn: ".$user->användarnamn.""; echo "Joined On: ".$user->joinDate."";

Lätt! Är det sant?

Efterbehandling på serversidan: global.inc.php

global.inc.php krävs för varje sida på webbplatsen. Varför? På så sätt kommer vi att placera alla vanliga operationer som vi behöver på sidan. Till exempel kommer vi att starta session_start(). Databasanslutningen öppnas också.

require_once "classes/UserTools.class.php";
require_once "classes/DB.class.php";
//anslut till databasen $db = new DB(); $db->anslut();
//initiera UserTools-objekt $userTools = new UserTools(); //starta sessionen
session_start();
//uppdatera sessionsvariabler om inloggad if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Vad gör han?

Det är flera saker på gång här. Först och främst öppnar vi en anslutning till databasen.

Efter anslutning startar vi session_start()-funktionen. Funktionen skapar en session eller fortsätter den nuvarande om användaren redan är inloggad. Eftersom vår applikation är designad för användare att logga in/ut, krävs denna funktion på varje sida.

Därefter kontrollerar vi om användaren är inloggad. Om så är fallet kommer vi att uppdatera $_SESSION["användare"] för att visa den senaste användarinformationen. Till exempel, om en användare ändrar sin e-post, kommer sessionen fortfarande att lagra den gamla. Men med hjälp av automatisk uppdatering kommer detta inte att hända.

Detta avslutar den andra delen! I morgon väntar den sista lektionen om detta ämne.

Med vänliga hälsningar!

De som mer eller mindre seriöst studerade PHP vet att det finns en mycket användbar global array i PHP, som kallas $_SERVER. Och i den här artikeln skulle jag vilja analysera de mest populära nycklarna och deras värden i denna matris, eftersom deras kunskap helt enkelt är nödvändig även för en nybörjare PHP programmerare.

Innan du fortsätter till till $_SERVER globala arrayen i PHP Jag ska bara ge dig en liten hint. Det finns en underbar funktion inbyggd i PHP, som kallas phpinfo(). Låt oss genast ge ett exempel på dess användning:

phpinfo();
?>

Som ett resultat av att köra detta enkla skript kommer du att se en enorm tabell med olika PHP-tolkinställningar, inklusive, nära slutet kommer det att finnas en värdetabell global array $_SERVER. Den kommer att lista alla nycklar och alla deras motsvarande värden. Hur kan detta hjälpa dig? Och det faktum att om du behöver det här eller det värdet, och du glömmer vad nyckeln heter, använder du funktionen phpinfo() Du kan alltid komma ihåg dess namn. I allmänhet kommer du att köra det här skriptet och du kommer omedelbart att förstå mig.

Låt oss nu gå vidare till de mest populära $_SERVER array-nycklar:

  • HTTP_USER_AGENT- den här nyckeln låter dig ta reda på kundens egenskaper. I de flesta fall är detta definitivt webbläsaren, dock inte alltid. Och igen, om webbläsaren, då vilken, kan du ta reda på om detta i den här variabeln.
  • HTTP_REFERER- innehåller den absoluta sökvägen till den filen ( PHP-skript, HTML-sida) från vilket du bytte till det här skriptet. Grovt sett, var kom klienten ifrån.
  • SERVER_ADDR - IP-adress server.
  • REMOTE_ADDR - IP-adress klient.
  • DOCUMENT_ROOT- fysisk sökväg till webbplatsens rotkatalog. Detta alternativ ställs in via Apache-serverns konfigurationsfil.
  • SCRIPT_FILENAME- fysisk väg till det anropade skriptet.
  • FRÅGESTRÄNG- ett mycket användbart värde som gör att du kan få en sträng med en fråga, och sedan kan du analysera denna sträng.
  • REQUEST_URI- ett ännu mer användbart värde som innehåller inte bara själva begäran, utan också den relativa sökvägen till det anropade skriptet från roten tillsammans med det. Detta används mycket ofta för att ta bort duplicering från index.php, alltså när vi har sådana URL: "http://mysite.ru/index.php"och" http://mysite.ru/" leder till en sida, och webbadresser olika, därför dubbelarbete, vilket kommer att ha en dålig effekt på sökmotoroptimeringen. Och här med hjälp REQUEST_URI vi kan definiera: index.php eller inte kallades manuset. Och vi kan omdirigera med index.php(om han var närvarande REQUEST_URI) på utan index.php. Som ett resultat, när du skickar en sådan begäran: " http://mysite.ru/index.php?id=5", kommer vi att ha en omdirigering till URL: "http://mysite.ru/?id=5". Det vill säga, vi blev av med dubbelarbete genom att ta bort från URL detta index.php.
  • SCRIPT_NAME- relativ sökväg till det anropade skriptet.

Kanske är dessa alla element $_SERVER global array i PHP som används regelbundet. De behöver känna till och kunna använda när det behövs.

Om du upptäcker ett fel, välj en textbit och tryck på Ctrl + Retur
DELA MED SIG: