Finestre.  Virus.  I Quaderni.  Internet.  ufficio.  Utilità.  Autisti

$HTTP_SERVER_VARS [rimosso]

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

$_SERVER -- $HTTP_SERVER_VARS [rimosso]Informazioni su server e runtime

Descrizione

La variabile $_SERVER è un array contenente informazioni come intestazioni di script, percorsi e posizioni. Le voci in questo array sono generate dal server web. Non vi è alcuna garanzia che ogni server Web fornisca uno di questi; il server può omettere alcuni di questi o fornirne altri non elencati qui. Tuttavia, molte di queste variabili sono presenti nella » specifica CGI/1.1, quindi puoi aspettarti che vengano implementate anche in un particolare server web.

La variabile $HTTP_SERVER_VARS contiene le stesse informazioni iniziali, ma non è superglobale. (Si noti che $HTTP_SERVER_VARS e $_SERVER sono variabili diverse, quindi PHP le gestisce di conseguenza.) Si noti inoltre che gli "array lunghi" sono stati rimossi in PHP 5.4.0, quindi $HTTP_SERVER_VARS non esiste più.

Indici

È possibile trovare o meno uno dei seguenti elementi nell'array $_SERVER. Si noti che pochi elementi saranno disponibili (o davvero importanti) se PHP viene eseguito sulla riga di comando.

"PHP_SELF" Il nome file dello script attualmente in esecuzione, relativo alla root del documento. Ad esempio, $_SERVER["PHP_SELF"] in uno script su http://example.com/foo/bar.php sarebbe /foo/bar.php . La costante __FILE__ contiene il percorso completo e il nome file del file corrente (ovvero incluso). Se PHP è in esecuzione riga di comando, questa variabile contiene il nome dello script a partire da PHP 4.3.0. In precedenza non era disponibile."argv" Una matrice di argomenti passati allo script. Quando lo script viene eseguito sulla riga di comando, fornisce un accesso simile a C alle opzioni della riga di comando. Quando chiamato tramite il metodo GET, questo array conterrà la stringa di query."argc" Contiene il numero di parametri passati allo script (se avviato sulla riga di comando)."GATEWAY_INTERFACCIA" Contiene la versione della specifica CGI utilizzata dal server; Per esempio" CGI/1.1". "SERVER_ADDR" L'indirizzo IP del server su cui è in esecuzione lo script corrente."NOME DEL SERVER" Il nome dell'host su cui è in esecuzione lo script corrente. Se lo script è in esecuzione su un host virtuale, questo conterrà il nome definito per esso ospite virtuale. "SERVER_SOFTWARE" La stringa di identificazione del server specificata nelle intestazioni quando si risponde alla richiesta."PROTOCOLLO_SERVER" Il nome e la versione del protocollo informativo attraverso il quale è stata richiesta la pagina; Per esempio " HTTP/1.0"; " METODO_RICHIESTA " Quale metodo è stato utilizzato per richiedere la pagina; Per esempio " OTTENERE", "TESTA", "INVIARE", "METTERE".

Commento:

Lo script PHP termina dopo aver inviato le intestazioni (ovvero, dopo aver eseguito qualsiasi output senza buffering dell'output), se la richiesta è stata effettuata dal metodo TESTA.

"REQUEST_TIME" Timestamp dell'inizio della richiesta. Disponibile da PHP 5.1.0." REQUEST_TIME_FLOAT " Il timestamp dell'inizio della richiesta, preciso al microsecondo. Disponibile da PHP 5.4.0." STRINGA DELLA DOMANDA " La stringa di query, se presente, con cui è stata recuperata la pagina."DOCUMENT_ROOT" La directory root del documento in cui viene eseguito lo script corrente è esattamente quella specificata in file di configurazione server."HTTP_ACCEPT" Contenuto dell'intestazione accettare: dalla richiesta corrente, se presente."HTTP_ACCEPT_CHARSET" Contenuto dell'intestazione AccettaCharset: dalla richiesta corrente, se presente. Per esempio: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" Contenuto dell'intestazione Accetta codifica: gzip". "HTTP_ACCEPT_LANGUAGE" Contenuto dell'intestazione Accetta-lingua: dalla richiesta corrente, se presente. Per esempio: " it". "CONNESSIONE_HTTP" Contenuto dell'intestazione connessione: dalla richiesta corrente, se presente. Per esempio: " Mantieni in vita". "HTTP_HOST" Contenuto dell'intestazione ospite: dalla richiesta corrente, se presente."HTTP_REFERER" L'indirizzo della pagina (se presente) che ha portato il browser dell'utente a questa pagina. Questa intestazione è impostata dal browser web dell'utente. Non tutti i browser lo installano e alcuni consentono di modificare il contenuto dell'intestazione HTTP_REFERER come funzionalità aggiuntiva. In una parola, non ci si può davvero fidare."HTTP_USER_AGENT" Contenuto dell'intestazione Agente utente: dalla richiesta corrente, se presente. Questa stringa contiene la designazione del browser con cui l'utente ha richiesto questa pagina. Un tipico esempio è la riga: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Tra le altre cose, puoi usare questo valore con la funzione get_browser() per adattare l'output della tua pagina alle capacità del browser dell'utente"https" Accetta un valore non vuoto se la richiesta è stata effettuata tramite il protocollo HTTPS.

Commento: Si noti che quando si utilizza ISAPI con IIS, il valore sarà spento se la richiesta non è stata effettuata tramite il protocollo HTTPS.

"ADDR_REMOTO" L'indirizzo IP da cui l'utente sta visualizzando la pagina corrente."HOST REMOTO" L'host remoto da cui l'utente sta visualizzando la pagina corrente. La ricerca DNS inversa si basa sul valore della variabile REMOTE_ADDR.

Commento: Il tuo server web deve essere configurato per creare questa variabile. Ad esempio, in Apache è necessaria la presenza della direttiva Ricerche nomi host attivate nel file httpd.conf per creare questa variabile. Guarda anche gethostbyaddr().

"REMOTE_PORT" La porta sulla macchina remota utilizzata per comunicare con il server web."REMOTE_UTENTE" L'utente autenticato."REDIRECT_REMOTE_USER" L'utente autenticato, se la richiesta è stata reindirizzata internamente."SCRIPT_FILENAME"

Il percorso assoluto per lo script che questo momento viene eseguito.

Commento:

Se lo script viene eseguito sulla riga di comando (CLI) utilizzando un percorso relativo come file.php o ../file.php , la variabile $_SERVER["SCRIPT_FILENAME"] conterrà il percorso relativo specificato dall'utente.

"SERVER_ADMIN" Questa variabile ottiene il suo valore (per Apache) da una direttiva nel file di configurazione del server. Se lo script è in esecuzione su un host virtuale, questo sarà il valore definito per quell'host virtuale."PORTA DEL SERVER" La porta sul computer server che il server Web utilizza per connettersi. Per le impostazioni predefinite, il valore sarà " 80 "; utilizzando SLL, ad esempio, questo valore sarà configurato per le connessioni HTTP sicure.

Commento: Per ottenere la porta fisica (reale) in Apache 2, è necessario installare UseCanonicalName = Attivo E UseCanonicalPhysicalPort = Attivo, altrimenti questo valore potrebbe essere falsificato e non restituire il valore reale della porta fisica. Affidarsi a questo valore non è sicuro nel contesto di applicazioni che richiedono una maggiore sicurezza.

"SERVER_SIGNATURE" Una stringa contenente la versione del server e il nome dell'host virtuale da aggiungere alle pagine generate dal server, se abilitato."PATH_TRANSLATED" Percorso basato sul filesystem (non sulla root del documento) allo script corrente, dopo che il server ha eseguito qualsiasi mappatura da virtuale a reale.

Commento: A partire da PHP 4.3.2, la variabile PATH_TRANSLATED non è più implicitamente impostata in Apache 2 SAPI , rispetto ad Apache versione 1 dove è impostata sullo stesso valore di SCRIPT_FILENAME quando non viene utilizzata da Apache. Questa modifica è stata apportata per conformarsi alla specifica CGI, in cui la variabile PATH_TRANSLATED dovrebbe esistere solo quando PATH_INFO è definito. Gli utenti di Apache 2 possono utilizzare la direttiva AcceptPathInfo = Attivo nel file di configurazione httpd.conf per impostare la variabile PATH_INFO.

"NOME_SCRIPT" Contiene il percorso dello script attualmente in esecuzione. Questo è utile per le pagine che devono puntare a se stesse. La costante __FILE__ contiene il percorso completo e il nome del file corrente (ovvero incluso)." RICHIESTA_URI " L'URI passato per accedere a questa pagina. Per esempio, " /indice.html". "PHP_AUTH_DIGEST" Quando si esegue l'autenticazione HTTP Digest, questa variabile è impostata sull'intestazione "Autorizzazione" inviata dal client (che deve quindi essere utilizzata per la validazione appropriata)."PHP_AUTH_USER" Quando viene eseguita l'autenticazione HTTP, questa variabile è impostata sul nome utente fornito dall'utente."PHP_AUTH_PW" Quando viene eseguita l'autenticazione HTTP, questa variabile è impostata sulla password fornita dall'utente."AUTH_TYPE" Quando viene eseguita l'autenticazione HTTP, questa variabile è impostata sul tipo di autenticazione utilizzato."PERCORSO_INFO" Contiene qualsiasi percorso fornito dall'utente dopo il nome dello script ma prima della stringa di query, se disponibile. Ad esempio, se lo script corrente è richiesto all'URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , allora la variabile $_SERVER["PATH_INFO"] conterrà /della roba?>

Il risultato dell'esecuzione di questo esempio sarà qualcosa del genere.

Nella seconda lezione scriveremo altre due classi e finiremo completamente la parte interna dello script.

Piano

L'obiettivo di questa serie di tutorial è creare una semplice applicazione che consenta agli utenti di registrarsi, accedere, disconnettersi e modificare le impostazioni. La classe che conterrà tutte le informazioni sull'utente si chiamerà User e sarà definita nel file User.class.php. La classe che si occuperà dell'entrata/uscita si chiamerà UserTools (UserTools.class.php).

Un po 'sulla denominazione delle classi

Il tono corretto è nominare i file di classe con lo stesso nome della classe stessa. In questo modo è facile determinare lo scopo di ciascun file nella cartella della classe.

È anche comune aggiungere .class o .inc alla fine del nome del file di classe. Pertanto, definiamo chiaramente lo scopo del file e possiamo utilizzare .htaccess per limitare l'accesso a questi file.

Classe utente (User.class.php)

Questa classe definirà ogni utente. Con la crescita questa applicazione la definizione di "Utente" può cambiare in modo significativo. Fortunatamente, la programmazione OOP semplifica l'aggiunta di ulteriori attributi utente.

Costruttore

In questa classe useremo il costruttore: questa è una funzione che viene chiamata automaticamente quando viene creata la copia successiva della classe. Questo ci consente di pubblicare automaticamente alcuni attributi dopo la creazione del progetto. In questa classe, il costruttore prenderà un singolo argomento: un array associativo che contiene una riga dalla tabella utenti nel nostro database.

require_once "db.class.php"; class Utente ( public $id; public $username; public $hashedPassword; public $email;
public $joinDate;
//Costruttore chiamato quando viene creato un nuovo oggetto//Prende un array associativo con la riga DB come argomento. function __construct($data) ( $this->id = (isset($data["id"])) ? $data["id"] : ""; $this->username = (isset($data[" username"])) ? $data["username"] : ""; $this->hashedPassword = (isset($data["password"])) ? $data["password"] : ""; $this- >email = (isset($data["email"])) ? $data["email"] : ""; $this->joinDate = (isset($data["join_date"])) ? $data[" data di iscrizione"] : ""; )
public function save($isNewUser = false) ( //crea un nuovo oggetto database. $db = new DB(); //se l'utente è già registrato e stiamo //aggiornando solo le sue informazioni. if(!$isNewUser ) ( //imposta l'array di dati $data = array("username" => ""$this->username"", "password" => ""$this->hashedPassword"",
"email" => ""$this->email"");
//aggiorna la riga nel database $db->update($data, "users", "id = ".$this->id); )else ( //se l'utente viene registrato per la prima volta. $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; ) ) ?>

Spiegazione

La prima parte del codice, al di fuori della zona della classe, fornisce la connessione della classe al database (perché c'è una funzione nella classe User che richiede questa classe).

Invece di variabili di classe "protette" (usate nella Lezione 1), le definiamo come "pubbliche". Ciò significa che qualsiasi codice esterno alla classe ha accesso a queste variabili quando lavora con l'oggetto Utente.

Il costruttore accetta un array in cui le colonne della tabella sono le chiavi. Definiamo la variabile di classe usando $this->variablename. Nell'esempio di questa classe, prima di tutto controlliamo se esiste il valore di una certa chiave. In tal caso, impostiamo la variabile di classe su quel valore. In caso contrario, una stringa vuota. Il codice utilizza la forma abbreviata della notazione del fatturato se:

$valore = (3 == 4) ? "A" : "B";

In questo esempio, stiamo controllando per vedere se 3 è uguale a quattro! Se sì, allora $valore = "A", no - $valore = "B". Nel nostro esempio, il risultato è $value = "B".

Salvataggio delle informazioni sugli utenti nel database

La funzione di salvataggio viene utilizzata per apportare modifiche alla tabella del database con i valori correnti nell'oggetto Utente. Questa funzione usa la classe DB che abbiamo creato nel primo tutorial. Utilizzando le variabili di classe, viene impostato l'array $data. Se questa è la prima volta che l'utente viene archiviato, $isNewUser viene passato come $true (il valore predefinito è false). Se $isNewUser = $true viene chiamata la funzione insert() della classe DB. Altrimenti, viene chiamata la funzione update(). In entrambi i casi, le informazioni dell'oggetto utente verranno archiviate nel database.

Classe UserTools.class.php

Questa classe conterrà funzioni relative agli utenti: login(), logout(), checkUsernameExists() e get(). Ma con l'espansione di questa applicazione, puoi aggiungerne molte altre.

//UserTools.class.php require_once "User.class.php"; require_once "db.class.php";
classe Strumenti utente(
//Accedi all'utente. Per prima cosa controlla se //il nome utente e la password corrispondono a una riga nel database. //Se ha esito positivo, imposta le variabili di sessione //e memorizza l'oggetto utente all'interno.
funzione pubblica login($username, $password)
{
$hashedPassword = md5($password); $result = mysql_query("SELECT * FROM users WHERE username = "$username" AND password = "$hashedPassword""); if(mysql_num_rows($result) == 1) ( $_SESSION["user"] = serialize(new User(mysql_fetch_assoc($result))); $_SESSION["login_time"] = time(); $_SESSION["logged_in "] = 1; restituisce true; )else( restituisce false; ) )
//Disconnette l'utente. Distruggi le variabili di sessione. public function logout() ( unset($_SESSION["user"]); unset($_SESSION["login_time"]); unset($_SESSION["logged_in"]); session_destroy(); ) //Verifica se esiste un nome utente. //Questo viene chiamato durante la registrazione per assicurarsi che tutti i nomi utente siano univoci. public function checkUsernameExists($username) ( $result = mysql_query("select id from users where username="$username""); if(mysql_num_rows($result) == 0) ( return false; )else( return true; )
}
//ottenere un utente //restituisce un oggetto utente. Prende l'id degli utenti come input public function get($id) ( $db = new DB(); $result = $db->select("users", "id = $id"); return new User($result ); ) )
?>

funzione login()

La funzione login() è autoesplicativa. Prende gli argomenti utente $username e $password e controlla se corrispondono. Se tutto corrisponde, crea un oggetto Utente con tutte le informazioni e lo memorizza nella sessione. Nota che stiamo usando solo la funzione PHP serialize(). Crea una versione persistente dell'oggetto che può essere facilmente deserializzata con unserialize(). Anche l'ora di accesso verrà salvata. Questo può essere utilizzato successivamente per fornire agli utenti informazioni sulla durata della loro permanenza sul sito.

Potresti anche notare che stiamo impostando $_SESSION["logged_in"] su 1. Questo ci consente di controllare facilmente su ogni pagina se l'utente ha effettuato l'accesso. È sufficiente controllare solo questa variabile.

funzione logout()

Anche una semplice funzione. La funzione unset() di PHP cancella le variabili in memoria, mentre session_destroy() eliminerà la sessione.

funzione checkUsernameExists()

Chi conosce l'inglese capirà facilmente la funzione. Interroga semplicemente il database se tale accesso viene utilizzato o meno.

funzione get()

Questa funzione accetta un ID utente univoco e interroga il database utilizzando la classe DB, ovvero la funzione select(). Prenderà un array associativo con alcune informazioni sull'utente e creerà un nuovo oggetto User, passando l'array al costruttore.

Dove può essere utilizzato? Ad esempio, se crei una pagina che deve visualizzare profili utente specifici, dovrai prendere queste informazioni in modo dinamico. Ecco come puoi farlo: (diciamo che l'URL è http://www.website.com/profile.php?userID=3)

//nota: dovrai prima aprire una connessione al database. //vedere Parte 1 per ulteriori informazioni su come farlo. //Dovrai anche assicurarti di aver incluso i file di classe.
$strumenti = nuovi strumenti utente(); $utente = $strumenti->get($_REQUEST["userID"]); echo "Nome utente: ".$utente->nomeutente.""; echo "Iscritto il: ".$user->joinDate."";

Facilmente! È vero?

Tocco finale lato server: global.inc.php

global.inc.php è richiesto per ogni pagina del sito. Perché? In questo modo posizioneremo tutte le normali operazioni di cui abbiamo bisogno sulla pagina. Ad esempio, avvieremo session_start(). Si aprirà anche la connessione al database.

require_once "classi/UserTools.class.php";
require_once "classi/DB.class.php";
//connettersi al database $db = new DB(); $db->connetti();
//inizializza l'oggetto UserTools $userTools = new UserTools(); //avvia la sessione
inizio_sessione();
//aggiorna le variabili di sessione se sei connesso if(isset($_SESSION["logged_in"])) ( $user = unserialize($_SESSION["user"]); $_SESSION["user"] = serialize($userTools-> get($user->id)); ) ?>

Cosa sta facendo?

Ci sono diverse cose in corso qui. Prima di tutto, apriamo una connessione al database.

Dopo la connessione, avviamo la funzione session_start(). La funzione crea una sessione o continua quella corrente se l'utente è già loggato. Poiché la nostra applicazione è progettata per consentire agli utenti di accedere/disconnettersi, questa funzione è richiesta in ogni pagina.

Successivamente, controlliamo se l'utente ha effettuato l'accesso. In tal caso, aggiorneremo $_SESSION["user"] per visualizzare le informazioni utente più recenti. Ad esempio, se un utente cambia la sua email, la sessione memorizzerà comunque quella vecchia. Ma con l'aiuto dell'aggiornamento automatico, questo non accadrà.

Con questo si conclude la seconda parte! Domani aspetta la lezione finale su questo argomento.

Ti auguro il meglio!

Quelli che hanno studiato più o meno seriamente PHP sappi che c'è un array globale molto utile in PHP, che è chiamato $_SERVER. E in questo articolo vorrei analizzare le chiavi più popolari e i loro valori in questo array, poiché la loro conoscenza è semplicemente necessaria anche per un principiante Programmatore PHP.

Prima di procedere a all'array globale $_SERVER in PHP Ti do solo un piccolo suggerimento. C'è una caratteristica meravigliosa incorporata PHP, che è chiamato phpinfo(). Facciamo subito un esempio del suo utilizzo:

phpinfo();
?>

Come risultato dell'esecuzione di questo semplice script, vedrai un'enorme tabella con vari Impostazioni dell'interprete PHP, compreso, verso la fine ci sarà una tabella di valori matrice globale $_SERVER. Elencherà tutte le chiavi e tutti i loro valori corrispondenti. Come può aiutarti? E il fatto che se hai bisogno di questo o quel valore e dimentichi come si chiama la chiave, allora usi la funzione phpinfo() Puoi sempre ricordare il suo nome. In generale, eseguirai questo script e mi capirai immediatamente.

Ora passiamo ai più popolari Chiavi dell'array $_SERVER:

  • HTTP_USER_AGENT- questa chiave ti consente di scoprire le caratteristiche del cliente. Nella maggior parte dei casi, questo è sicuramente il browser, tuttavia, non sempre. E ancora, se il browser, quindi quale, puoi scoprirlo in questa variabile.
  • HTTP_REFERER- contiene il percorso assoluto di quel file ( script PHP, pagina Html) da cui sei passato a questo script. In parole povere, da dove viene il cliente.
  • INDIRIZZO_SERVER - indirizzo IP server.
  • REMOTE_ADDR - indirizzo IP cliente.
  • DOCUMENT_ROOT- percorso fisico alla directory principale del sito. Questa opzione è impostata tramite File di configurazione del server Apache.
  • SCRIPT_FILENAME- percorso fisico dello script chiamato.
  • STRINGA DELLA DOMANDA- un valore molto utile che ti consente di ottenere una stringa con una query e quindi puoi analizzare questa stringa.
  • RICHIESTA_URI- un valore ancora più utile che contiene non solo la richiesta stessa, ma anche il percorso relativo allo script chiamato dalla radice insieme ad essa. Questo è molto spesso usato per rimuovere la duplicazione da indice.php, cioè, quando abbiamo tale URL: "http://mysite.ru/index.php" E " http://mysite.ru/" portare a una pagina, e URL diversa, quindi, la duplicazione, che avrà un effetto negativo sull'ottimizzazione dei motori di ricerca. E qui con l'aiuto RICHIESTA_URI possiamo definire: indice.php o meno lo script è stato chiamato. E possiamo reindirizzare con indice.php(se era presente RICHIESTA_URI) su senza indice.php. Di conseguenza, quando si invia tale richiesta: " http://mysite.ru/index.php?id=5", avremo un reindirizzamento a URL: "http://mysite.ru/?id=5". Cioè, ci siamo sbarazzati della duplicazione rimuovendo da URL Questo indice.php.
  • SCRIPT_NAME- percorso relativo allo script chiamato.

Forse questi sono tutti elementi Array globale $_SERVER in PHP che vengono utilizzati regolarmente. Devono sapere ed essere in grado di utilizzare quando necessario.

Se noti un errore, seleziona una parte di testo e premi Ctrl + Invio
CONDIVIDERE: