Superglobální pole $_SERVER PHP ($HTTP_SERVER_VARS). $_SERVER - Informace o serveru a runtime prostředí Pomocí prvků pole $_SERVER

Element $_SERVER["DOCUMENT_ROOT"] obsahuje cestu ke kořenovému adresáři serveru; pokud je skript spuštěn na virtuálním hostiteli, tento prvek určuje cestu ke kořenovému adresáři virtuálního hostitele. Tito. v konfiguračním souboru httpd.conf má virtuální hostitel direktivu DocumentRoot nastavenou na "D:/main", element $_SERVER["DOCUMENT_ROOT"] bude obsahovat hodnotu "D:main".

$_SERVER["HTTP_ACCEPT"] prvek

Element $_SERVER["HTTP_ACCEPT"] popisuje preference klienta ohledně typu dokumentu. Obsah tohoto prvku je načten z hlavičky Accept HTTP odeslané z klienta na server. Obsah této hlavičky může vypadat takto

Obrázek/gif, obrázek/x-xbitmap, obrázek/jpeg, obrázek/pjpeg, aplikace/x-shockwave-flash, aplikace/vnd.ms-excel, aplikace/msword, */*

Záhlaví Accept vám umožňuje zadat typ média, který klient preferuje přijímat v reakci na svůj požadavek. Tato hlavička vám umožňuje sdělit serveru, že odpověď je omezena na malou sadu preferovaných typů.

Symbol * se používá k seskupení typů v řadě médií. Například symbol */* určuje použití všech typů a typ zápisu/* určuje použití všech podtypů vybraného typu typu.

Komentář

Typy médií jsou od sebe odděleny čárkami.

Každý řádek médií je také charakterizován další sadou parametrů. Jedním z nich je tzv. koeficient relativní preference q, který nabývá hodnot od 0 do 1, respektive od méně preferovaných typů k preferovanějším. Použití více parametrů q umožňuje klientovi sdělit serveru relativní stupeň preference pro daný typ média.

Komentář

Parametr q má výchozí hodnotu 1. Od typu média je také oddělen středníkem.

Přijmout příklad záhlaví:

Přijmout: audio/*; q=0,2, audio/základní

V této hlavičce je prvním typem audio/*, který zahrnuje všechny hudební dokumenty a vyznačuje se preferenčním koeficientem 0,2. Je zadán čárkami oddělený zvuk/základní typ, pro který není preferenční koeficient specifikován a předpokládá se výchozí hodnota jedna. Citování tohoto nadpisu lze interpretovat následovně: „Dávám přednost zvukovému/základnímu typu, ale mohu poslat i dokumenty jakéhokoli jiného typu zvuku, pokud je k dispozici, po snížení preferenčního koeficientu o více než 80 %.

Příklad by mohl být složitější.

Přijmout: text/prostý; q=0,5, text/html,
text/x-dvi; q=0,8, text/x-c

Komentář

Všimněte si, že prvek $_SERVER["HTTP_ACCEPT"] obsahuje přesně stejné informace, ale bez úvodní hlavičky Accept.

Tato hlavička je interpretována následovně: Preferovány jsou typy dokumentů text/html a text/x-c, ale pokud nejsou dostupné, pak klient, který tento požadavek požaduje, upřednostní text/x-dvi, a pokud ne, může přijmout typ text/prostý.

$_SERVER["HTTP_ACCEPT_LANGUAGE"] prvek

Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] popisuje jazykové preference klienta. Tyto informace se získávají z hlavičky HTTP Accept-Language odeslané klientem na server. Lze uvést následující příklad:

Přijímací jazyk: ru, en; q = 0,7

Což lze interpretovat následovně: klient preferuje ruský jazyk, ale pokud není k dispozici, souhlasí s akceptováním dokumentů v angličtině. Element $_SERVER["HTTP_ACCEPT_LANGUAGE"] bude obsahovat přesně stejné informace, ale bez hlavičky Accept-Language:

Ru, en; q = 0,7

Obsah elementu $_SERVER["HTTP_ACCEPT_LANGUAGE"] lze použít k určení národnosti návštěvníků. Výsledky však budou přibližné, protože mnoho uživatelů používá anglické prohlížeče, které serveru upozorní, že návštěvník preferuje pouze jeden jazyk – angličtinu.

$_SERVER["HTTP_HOST"] prvek

Element $_SERVER["HTTP_HOST"] obsahuje název serveru, který je obvykle stejný jako název domény webu hostovaného na serveru. Název zadaný v tomto parametru je obvykle stejný jako $_SERVER["SERVER_NAME"]. Parametr obsahuje pouze název domény bez názvu protokolu (http://), tzn.

www.sofftime.ru

$_SERVER["HTTP_REFERER"] prvek

Element $_SERVER["HTTP_REFERER"] obsahuje adresu stránky, ze které návštěvník na tuto stránku přišel. Přechod musí být přes odkaz. Vytvoříme dvě stránky index.php a page.php.

stránka index.php

echo "Odkaz na stránku PHP
"
;
$_SERVER["HTTP_REFERER"]
?>

Stránka page.php bude mít podobný obsah, ale odkaz bude směřovat na stránku index.php.

Stránka stránky.php

echo "Odkaz na stránku PHP
"
;
echo "Obsah $_SERVER [ "HTTP_REFERER"] - " .
$_SERVER["HTTP_REFERER"]
?>

Při přechodu z jedné stránky na druhou se pod odkazem zobrazí adresa stránky, ze které byl přechod proveden.

$_SERVER["HTTP_USER_AGENT"] prvek

Prvek $_SERVER["HTTP_USER_AGENT"] obsahuje informace o typu a verzi prohlížeče a operačního systému návštěvníka.

Zde je typický obsah tohoto řádku: "Mozilla/4.0 (kompatibilní; MSIE 6.0; Windows NT 5.1)". Přítomnost podřetězce "MSIE 6.0" znamená, že návštěvník si stránku prohlíží pomocí Internet Exploreru verze 6.0. Řetězec "Windows NT 5.1" označuje operační systém Windows XP.

Komentář

Pro Windows 2000 vypadá prvek $_SERVER["HTTP_USER_AGENT"] takto: "Mozilla/4.0 (kompatibilní; MSIE 5.01; Windows NT 5.0)")", zatímco pro Windows XP vypadá jako "Mozilla/4.0 (kompatibilní; MSIE 6.0); Windows NT 5.1)".

Pokud návštěvník používá prohlížeč Opera, obsah $_SERVER["HTTP_USER_AGENT"] může vypadat takto: "Mozilla/4.0 (kompatibilní; MSIE 5.0; Windows 98) Opera 6.04 ". Je zde také přítomen podřetězec "MSIE 6.0", což znamená, že prohlížeč Opera je kompatibilní s prohlížečem Internet Explorer a používá stejné Windows DLL. Proto při analýze řetězce vráceného prohlížečem mějte na paměti, že Internet Explorer odkazuje na řetězec obsahující podřetězec "MSIE 6.0" a neobsahující podřetězec "Opera". Navíc z tohoto řádku můžeme usoudit, že uživatel používá operační systém Windows 98.

Komentář

Uživatelský agent prohlížeče Firefox může vypadat takto Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5.

Při použití prohlížeče Netscape může obsah prvku $_SERVER["HTTP_USER_AGENT"] vypadat takto: "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . Tento prohlížeč lze identifikovat podle přítomnosti podřetězce "Netscape". Kromě toho můžete zjistit, že návštěvník přistupuje k internetu pomocí operačního systému Linux s jádrem optimalizovaným pro Pentium IV v grafickém uživatelském rozhraní X-Window. Tento mechanismus je užitečný pro sběr statistických informací, které návrhářům umožňují optimalizovat stránky pro nejběžnější prohlížeče.

Prvek $_SERVER["REMOTE_ADDR"]

Element $_SERVER["REMOTE_ADDR"] obsahuje IP adresu klienta. Při testování na místním počítači bude tato adresa 127.0.0.1. Při testování v síti však proměnná vrátí IP adresu klienta nebo posledního proxy serveru, přes který se klient na server dostal. Pokud klient používá proxy server, jeho IP adresu zjistíte pomocí proměnné prostředí HTTP_X_FORWARDED_FOR, jejíž hodnotu lze získat pomocí funkce getenv().

Komentář

Proxy servery jsou speciální zprostředkující servery, které poskytují speciální typ služby: kompresi provozu, kódování dat, přizpůsobení mobilním zařízením atd. Mezi mnoha proxy servery existují takzvané anonymní proxy servery, které umožňují skrýt skutečnou IP adresu klienta, tyto servery nevracejí proměnnou prostředí HTTP_X_FORWARDED_FOR.

Načítání proměnné prostředí HTTP_X_FORWARDED_FOR

echo getenv(HTTP_X_FORWARDED_FOR );
?>

$_SERVER["SCRIPT_FILENAME"] prvek

Element $_SERVER["SCRIPT_FILENAME"] obsahuje absolutní cestu k souboru z kořenového adresáře jednotky. Pokud tedy server běží pod operačním systémem Windows, pak taková cesta může vypadat takto: "d:main estindex.php", tzn. cesta se zadává z disku, v operačním systému typu UNIX je cesta zadána z kořenového adresáře /, například "/var/share/www/test/index.php".

$_SERVER["SERVER_NAME"] prvek

Element $_SERVER["SERVER_NAME"] obsahuje název serveru, který se obvykle shoduje s názvem domény webu, který je na něm hostován. Například,

Www.site

Obsah prvku $_SERVER["SERVER_NAME"] je často stejný jako obsah prvku $_SERVER["HTTP_HOST"]. Kromě názvu serveru vám superglobální pole $_SERVER umožňuje zjistit řadu parametrů serveru, jako je IP adresa serveru, naslouchací port, nainstalovaný webový server a verze protokolu HTTP. Tyto informace jsou umístěny v prvcích $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] a $_SERVER["SERVER_PROTOCOL"]. Níže je uveden příklad použití těchto prvků.

Použití prvků pole $_SERVER

echo "Název serveru -". $_SERVER["SERVER_NAME"]. "
" ;
echo "IP adresa serveru -". $_SERVER["SERVER_ADDR"]. "
" ;
echo "Port serveru -". $_SERVER["SERVER_PORT"]. "
" ;
echo "Webový server -". $_SERVER["SERVER_SOFTWARE"]. "
" ;
echo "Verze protokolu HTTP -". $_SERVER["SERVER_PROTOCOL"]. "
" ;
?>

$HTTP_SERVER_VARS [odstraněno]

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

$_SERVER -- $HTTP_SERVER_VARS [odstraněno]Informace o serveru a runtime

Popis

Proměnná $_SERVER je pole obsahující informace, jako jsou záhlaví skriptů, cesty a umístění. Položky v tomto poli jsou vytvářeny webovým serverem. Neexistuje žádná záruka, že každý webový server bude poskytovat některou z těchto možností; server může některé z nich vynechat nebo poskytnout jiné, které zde nejsou uvedeny. Mnoho z těchto proměnných je však přítomno ve specifikaci » CGI/1.1, takže můžete očekávat, že budou implementovány také na konkrétním webovém serveru.

Proměnná $HTTP_SERVER_VARS obsahuje stejnou počáteční informaci, ale není superglobální. (Všimněte si, že $HTTP_SERVER_VARS a $_SERVER jsou různé proměnné, takže PHP s nimi nakládá odpovídajícím způsobem.) Všimněte si také, že „dlouhá pole“ byla v PHP 5.4.0 odstraněna, takže $HTTP_SERVER_VARS již neexistuje.

Indexy

V poli $_SERVER můžete nebo nemusíte najít některý z následujících prvků. Všimněte si, že pokud je PHP spuštěno na příkazovém řádku, bude dostupných jen málo položek, pokud vůbec nějaké.

"PHP_SELF" Název souboru aktuálně prováděného skriptu vzhledem ke kořenovému adresáři dokumentu. Například $_SERVER["PHP_SELF"] ve skriptu na http://example.com/foo/bar.php bude /foo/bar.php . Konstanta __FILE__ obsahuje úplnou cestu a název souboru aktuálního (tj. zahrnutého) souboru. Pokud je PHP spuštěno na příkazovém řádku, tato proměnná obsahuje název skriptu od PHP 4.3.0. Dříve byla nedostupná."argv" Pole argumentů předávaných skriptu. Když je skript spuštěn na příkazovém řádku, poskytuje C-jako přístup k možnostem příkazového řádku. Při volání pomocí metody GET bude toto pole obsahovat řetězec dotazu."argc" Obsahuje počet parametrů předávaných skriptu (pokud je spuštěn na příkazovém řádku)."GATEWAY_INTERFACE" Obsahuje verzi specifikace CGI používanou serverem; například" CGI/1.1". "SERVER_ADDR" IP adresa serveru, na kterém běží aktuální skript.„SERVER_NAME“ Název hostitele, na kterém běží aktuální skript. Pokud je skript spuštěn na virtuálním hostiteli, bude obsahovat název definovaný pro tohoto virtuálního hostitele."SERVER_SOFTWARE" Identifikační řetězec serveru zadaný v hlavičkách při zodpovězení požadavku."SERVER_PROTOCOL" Název a verze informačního protokolu, jehož prostřednictvím byla stránka vyžádána; například " HTTP/1.0"; " REQUEST_METHOD " Jaká metoda byla použita k vyžádání stránky; například " DOSTAT", "HLAVA", "POŠTA", "DÁT".

Komentář:

PHP skript se ukončí po odeslání hlaviček (tedy poté, co provede jakýkoli výstup bez výstupního bufferování), pokud byl požadavek proveden metodou HLAVA.

" REQUEST_TIME " Časové razítko začátku požadavku. K dispozici od PHP 5.1.0." REQUEST_TIME_FLOAT " Časové razítko začátku požadavku s přesností na mikrosekundy. K dispozici od PHP 5.4.0." ŘETĚZEC DOTAZU " Řetězec dotazu, pokud existuje, se kterým byla stránka načtena."DOCUMENT_ROOT" Kořenový adresář dokumentu, kde se spouští aktuální skript, je přesně ten, který je zadán v konfiguračním souboru serveru."HTTP_ACCEPT" Obsah záhlaví akceptovat: z aktuální žádosti, pokud existuje."HTTP_ACCEPT_CHARSET" Obsah záhlaví AcceptCharset: z aktuální žádosti, pokud existuje. Například: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" Obsah záhlaví Přijmout kódování: gzip". "HTTP_ACCEPT_LANGUAGE" Obsah záhlaví Přijímací jazyk: z aktuální žádosti, pokud existuje. Například: " en". "HTTP_CONNECTION" Obsah záhlaví spojení: z aktuální žádosti, pokud existuje. Například: " Udržet naživu". "HTTP_HOST" Obsah záhlaví hostitel: z aktuální žádosti, pokud existuje."HTTP_REFERER" Adresa stránky (pokud existuje), která přivedla prohlížeč uživatele na tuto stránku. Tato hlavička je nastavena webovým prohlížečem uživatele. Ne všechny prohlížeče jej instalují a některé umožňují změnu obsahu hlavičky HTTP_REFERER jako další funkci. Jedním slovem, opravdu se mu nedá věřit."HTTP_USER_AGENT" Obsah záhlaví Uživatelský agent: z aktuální žádosti, pokud existuje. Tento řetězec obsahuje označení prohlížeče, kterým si uživatel tuto stránku vyžádal. Typickým příkladem je řádek: Mozilla/4.5 (X11; U; Linux 2.2.9 i586). Tuto hodnotu můžete mimo jiné použít s funkcí get_browser() k přizpůsobení výstupu vaší stránky možnostem prohlížeče uživatele"https" Má neprázdnou hodnotu, pokud byl požadavek podán prostřednictvím protokolu HTTPS.

Komentář: Všimněte si, že při použití ISAPI s IIS bude hodnota vypnuto pokud požadavek nebyl podán prostřednictvím protokolu HTTPS.

"REMOTE_ADDR" IP adresa, ze které si uživatel prohlíží aktuální stránku."REMOTE_HOST" Vzdálený hostitel, ze kterého si uživatel prohlíží aktuální stránku. Zpětné vyhledávání DNS je založeno na hodnotě proměnné REMOTE_ADDR.

Komentář: Váš webový server musí být nakonfigurován k vytvoření této proměnné. Například v Apache potřebujete přítomnost směrnice Vyhledávání názvu hostitele zapnuto v souboru httpd.conf pro vytvoření této proměnné. viz také gethostbyaddr().

"REMOTE_PORT" Port na vzdáleném počítači, který se používá ke komunikaci s webovým serverem."REMOTE_USER" Ověřený uživatel."REDIRECT_REMOTE_USER" Ověřený uživatel, pokud byl požadavek interně přesměrován."SCRIPT_FILENAME"

Absolutní cesta ke skriptu, který se právě provádí.

Komentář:

Pokud je skript spuštěn na příkazovém řádku (CLI) pomocí relativní cesty, jako je file.php nebo ../file.php , proměnná $_SERVER["SCRIPT_FILENAME"] bude obsahovat relativní cestu zadanou uživatelem.

"SERVER_ADMIN" Tato proměnná získává svou hodnotu (pro Apache) z direktivy v konfiguračním souboru serveru. Pokud je skript spuštěn na virtuálním hostiteli, bude to hodnota definovaná pro tohoto virtuálního hostitele."PORT SERVERU" Port na počítači serveru, který webový server používá k připojení. Pro výchozí nastavení bude hodnota " 80 "; například při použití SLL bude tato hodnota nakonfigurována pro zabezpečená připojení HTTP.

Komentář: Chcete-li získat fyzický (skutečný) port v Apache 2, musíte nainstalovat UseCanonicalName = Zapnuto a UseCanonicalPhysicalPort = Zapnuto, jinak může být tato hodnota podvržena a nevrátí skutečnou hodnotu fyzického portu. Spoléhat se na tuto hodnotu není bezpečné v kontextu aplikací, které vyžadují zvýšené zabezpečení.

"SERVER_SIGNATURE" Řetězec obsahující verzi serveru a název virtuálního hostitele, který má být přidán na stránky generované serverem, je-li povoleno."PATH_TRANSLATED" Cesta k aktuálnímu skriptu založená na souborovém systému (nikoli na kořenovém adresáři dokumentu) poté, co server provedl jakékoli mapování z virtuálního na skutečný.

Komentář: Od PHP 4.3.2 již proměnná PATH_TRANSLATED není implicitně nastavena v Apache 2 SAPI, ve srovnání s Apache verze 1, kde je nastavena na stejnou hodnotu jako SCRIPT_FILENAME, když ji Apache nepoužívá. Tato změna byla provedena v souladu se specifikací CGI, kde by proměnná PATH_TRANSLATED měla existovat pouze tehdy, když je definována PATH_INFO. Uživatelé Apache 2 mohou direktivu použít AcceptPathInfo = Zapnuto v konfiguračním souboru httpd.conf nastavte proměnnou PATH_INFO.

„SCRIPT_NAME“ Obsahuje cestu k aktuálně prováděnému skriptu. To je užitečné pro stránky, které potřebují ukazovat samy na sebe. Konstanta __FILE__ obsahuje úplnou cestu a název aktuálního (tj. zahrnutého) souboru." REQUEST_URI " Identifikátor URI, který byl předán za účelem přístupu na tuto stránku. Například, " /index.html". "PHP_AUTH_DIGEST" Při provádění autentizace HTTP Digest je tato proměnná nastavena na hlavičku "Authorization" zaslanou klientem (kterou je pak nutné použít pro příslušnou validaci)."PHP_AUTH_USER" Při ověřování HTTP je tato proměnná nastavena na uživatelské jméno poskytnuté uživatelem."PHP_AUTH_PW" Při provádění ověřování HTTP je tato proměnná nastavena na heslo poskytnuté uživatelem.„AUTH_TYPE“ Při provádění ověřování HTTP je tato proměnná nastavena na typ ověřování, který se používá."PATH_INFO" Obsahuje jakoukoli cestu zadanou uživatelem za názvem skriptu, ale před řetězcem dotazu, je-li k dispozici. Pokud je například aktuální skript požadován na adrese URL http://www.example.com/php/path_info.php/some/stuff?foo=bar , pak proměnná $_SERVER["PATH_INFO"] bude obsahovat /nějaké věci?>

Výsledek spuštění tohoto příkladu bude něco takového.

Ti, kteří více či méně vážně studovali PHP vězte, že existuje jedno velmi užitečné globální pole PHP, který se nazývá $_SERVER. A v tomto článku bych rád analyzoval nejoblíbenější klíče a jejich hodnoty v tomto poli, protože jejich znalost je prostě nezbytná i pro začátečníka PHP programátor.

Než přistoupíte k do globálního pole $_SERVER v PHP Jen ti dám malou nápovědu. Je tam zabudována úžasná funkce PHP, který se nazývá phpinfo(). Uveďme si hned příklad jeho použití:

phpinfo();
?>

V důsledku spuštění tohoto jednoduchého skriptu uvidíte obrovskou tabulku s různými Nastavení PHP interpretu, včetně, na konci bude tabulka hodnot globální pole $_SERVER. Zobrazí seznam všech klíčů a všech jejich odpovídajících hodnot. Jak vám to může pomoci? A skutečnost, že pokud potřebujete tu či onu hodnotu, a zapomenete, jak se klíč nazývá, pak pomocí funkce phpinfo() Jeho název si můžete vždy zapamatovat. Obecně platí, že spustíte tento skript a okamžitě mi porozumíte.

Nyní přejděme k těm nejoblíbenějším Klíče pole $_SERVER:

  • HTTP_USER_AGENT- tento klíč umožňuje zjistit vlastnosti klienta. Ve většině případů je to určitě prohlížeč, ale ne vždy. A opět, když prohlížeč, tak který, to se dozvíte v této proměnné.
  • HTTP_REFERER- obsahuje absolutní cestu k tomuto souboru ( PHP skript, HTML stránku), ze kterého jste přešli na tento skript. Zhruba řečeno, odkud se klient vzal.
  • SERVER_ADDR - IP adresa server.
  • REMOTE_ADDR - IP adresa klienta.
  • DOCUMENT_ROOT- fyzická cesta ke kořenovému adresáři webu. Tato možnost se nastavuje přes Konfigurační soubor serveru Apache.
  • SCRIPT_FILENAME- fyzická cesta k volanému skriptu.
  • ŘETĚZEC DOTAZU- velmi užitečná hodnota, která vám umožní získat řetězec s dotazem a poté tento řetězec analyzovat.
  • REQUEST_URI- ještě užitečnější hodnota, která obsahuje nejen samotný požadavek, ale i relativní cestu k volanému skriptu z kořene. To se velmi často používá k odstranění duplicit z index.php, tedy když máme takové URL: "http://mysite.ru/index.php" a " http://mysite.ru/“ vést na jednu stránku a URL jiná tedy duplicita, která bude mít špatný vliv na optimalizaci pro vyhledávače. A tady s pomocí REQUEST_URI můžeme definovat: index.php nebo se scénář nevolal. A můžeme přesměrovat pomocí index.php(pokud byl přítomen REQUEST_URI) na bez index.php. V důsledku toho při odesílání takové žádosti: " http://mysite.ru/index.php?id=5“, budeme mít přesměrování na URL: "http://mysite.ru/?id=5 To znamená, že jsme se zbavili duplikace odstraněním z URL tento index.php.
  • SCRIPT_NAME- relativní cesta k volanému skriptu.

Možná jsou to všechno prvky $_SERVER globální pole v PHP které se pravidelně používají. Potřebují vědět a umět je použít, když je to nutné.

Pro začátek vylepšíme registrační stránku přidáním možnosti nahrát avatara. Zdrojový obrázek musí být ve formátu jpg, gif nebo png. Také by nemělo být větší než 2 MB. Nebojte se, po komprimaci skriptem bude velikost avatara cca 3 kb a formát jpg. Otevřít stránku reg.php a přidejte značku < formulář> čára enctype="multipart/form data", jako v příkladu:


Registrace










Nyní uložte reg.php

2. Pak musíte vytvořit další pole v tabulce uživatelů. Jdeme do phpmyadmin, vyberte požadovanou databázi a tabulku.


Nastavíme všechny hodnoty, jako na obrázku:

Do tohoto pole se zaznamená cesta k avataru a uloží se do samostatné složky, nazvěme ji „avataři“. Složka bude umístěna ve stejném adresáři jako zbytek souborů skriptu.

3. Přejděte do souboru Uložit_ uživatel. php a po odstranění mezer z přihlašovacího jména a hesla přidejte následující kód:

// odstranění nadbytečných mezer
$login = trim($login);

// přidat nový ********************************************** ***

// přidat kontrolu délky loginu a hesla
if (strlen($login)< 3 or strlen($login) > 15) {
exit ("Přihlášení musí mít alespoň 3 znaky a ne více než 15.");
}
if (strlen($heslo)< 3 or strlen($password) > 15) {
exit("Heslo musí mít alespoň 3 znaky a maximálně 15.");
}

if (!empty($_POST["fupload")]) //Zkontrolujte, zda uživatel odeslal obrázek
{
$fupload=$_POST["fupload"]; $fupload = trim($fupload);
if ($fupload =="" nebo prázdný($fupload)) (
unset($fupload);// pokud je proměnná $fupload prázdná, smažte ji
}
}
if (!isset($fupload) nebo prázdný($fupload) nebo $fupload =="")
{
//pokud proměnná neexistuje (uživatel neposlal obrázek), tak jí přiřadíme předem připravený obrázek s nápisem "no avatar"
$avatar = "avatars/net-avatara.jpg"; //můžete nakreslit net-avatara.jpg nebo to vzít ze zdroje
}
jiný
{
//jinak - načte obrázek uživatele
$path_to_90_directory = "avatars/";//složka, do které bude načten počáteční obrázek a jeho komprimovaná kopie

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["jméno"])) //kontrola původního formátu obrázku
{
$filename = $_FILES["fupload"]["name"];
$source = $_FILES["fupload"]["tmp_name"];
$target = $cesta_k_adresáři_90 . $název souboru;
move_uploaded_file($source, $target);//nahrát originál do $path_to_90_directory
if(preg_match("/[.](GIF)|(gif)$/", $filename)) (
$im = imagecreatefromgif($cesta_k_adresáři_90.$název souboru) ; //pokud byl originál ve formátu gif, tak vytvoříme obrázek ve stejném formátu. Vyžaduje se pro následnou kompresi
}
if(preg_match("/[.](PNG)|(png)$/", $filename)) (
$im = imagecreatefrompng($cesta_k_adresáři_90.$název_souboru) ;//pokud byl originál ve formátu png, vytvořte obrázek ve stejném formátu. Vyžaduje se pro následnou kompresi
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $název souboru)) (
$im = imagecreatefromjpeg($cesta_k_adresáři_90.$název_souboru); //pokud byl originál ve formátu jpg, tak vytvořte obrázek ve stejném formátu. Vyžaduje se pro následnou kompresi
}
//VYTVOŘENÍ ČTVRTOVÉHO OBRÁZKU A JEHO NÁSLEDNÁ KOMPRESE JE PŘEVZATÁ Z STRÁNEK www.codenet.ru
// Vytvořte čtverec 90x90
// dest - výsledný obrázek
// w - šířka obrázku
// poměr - koeficient úměrnosti
$w = 90; // čtverec 90x90. Můžete dodat i jiné velikosti.
// vytvořit zdrojový obraz založený na
// zdrojový soubor a určete jeho velikost
$w_src = obrázkyx($im); //vypočítejte šířku
$h_src = imagesy($im); //výpočet výšky obrázku
// vytvoří prázdný čtvercový obrázek
// truecolor is important!, jinak budeme mít 8bitový výsledek
$dest = imagecreatetruecolor($w,$w);
// vyřízněte střed čtverce o x, pokud je fotografie vodorovná
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
kolo((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// ořízněte čtvercový vrchol v y,
// pokud je fotka na výšku (i když můžete mít i střed)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// čtvercový obrázek je zmenšen bez výřezů
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$datum=čas(); //vypočítejte čas v přítomném okamžiku.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//uložte obrázek jpg do požadované složky, název bude aktuální čas. Ujistěte se, že avataři nemají stejné jméno.
//proč jpg? Zabírá velmi málo místa + ničí animovaný gif obrázku, který rozptyluje uživatele. Není moc příjemné číst jeho komentář, když koutkem oka zaznamenáte nějaký pohyb.
$avatar = $cesta_k_adresáři_90.$datum.".jpg";//do proměnné vložte cestu k avataru.
$delfull = $cesta_k_adresáři_90.$název souboru;
unlink ($delfull);//odstraňte původní nahraný obrázek, už ho nepotřebujeme. Úkolem bylo získat miniaturu.
}
jiný
{
//v případě neshody formátu vydejte odpovídající zprávu
exit("Avatar musí být ve formátu JPG, GIF nebo PNG");
}
//konec procesu načítání a přiřazení adresy načteného ava do proměnné $avatar
}



// přidán nový ************************************************** ****
// Následuje vše z první části článku, je však nutné přidat změnu do databázového dotazu.
//připojení k databázi
// kontrola existence uživatele se stejným přihlášením
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Omlouváme se, zadané uživatelské jméno je již zaregistrováno. Zadejte prosím jiné uživatelské jméno.");
}
// pokud žádná není, uložte data
$result2 = mysql_query ("INSERT INTO users (login,password,avatar) VALUES("$login","$password","$avatar")");
// Zkontrolujte, zda nejsou chyby
if ($result2=="TRUE")
{
echo "Úspěšně jste se zaregistrovali! Nyní můžete vstoupit na stránku. Hlavní stránka";
}
jiný(
echo "Chyba! Nejste přihlášeni.";
}
?>

4. Musíte přidat jednu tabulku do stejné databáze. Uloží IP adresy, které udělaly chyby při přihlášení. Tímto způsobem můžeme omezit přístup těm, kteří se spletli více než třikrát za sebou na cca 15 minut.Myslím, že programy, které hádají hesla, se budou muset motat dlouho.
Pojďme do phpmyadmin a vytvořte novou tabulku se 3 poli:


ip - ip adresa.
datum - datum neúspěšného přihlášení za posledních 15 minut pro uživatele s danou ip. col - počet chyb za posledních 15 minut pro uživatele s danou ip.
Vynikající! Hotovo, nyní změňme soubor pro ověření přihlašovacích údajů a hesla, protože nyní je naše heslo zašifrováno. Otevřete testreg.php a odstraňte vše kromě odstranění mezer z přihlašovacího jména a hesla. Dále přidejte následující kód:

// odstranění nadbytečných mezer
$login = trim($login);
$heslo = trim($heslo);

// nahradit novým******************************************************* ***
// připojení k databázi
include("bd.php");// soubor bd.php by měl být ve stejné složce jako všichni ostatní, pokud tomu tak není, stačí změnit cestu
// minikontrola hádání hesel
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=="neznámé") ( $ip=getenv("REMOTE_ADDR"); )//načíst ip
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//smazat ip-adresy uživatelů, kteří udělali chyby při přihlášení po 15 minutách.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);// načíst z databáze počet neúspěšných pokusů o přihlášení za posledních 15 pro uživatele s danou ip
$myrow = mysql_fetch_array($vysledek);
if ($myrow["col"] > 2) (
//pokud jsou chyby více než dvě, tedy tři, vydáme zprávu.
exit("Zadali jste své uživatelské jméno nebo heslo 3krát nesprávně. Počkejte prosím 15 minut, než to zkusíte znovu.");
}
$password = md5($password);//zašifrování hesla
$password = strrev($password);// pro spolehlivost přidejte zpětný chod
$heslo = $heslo."b3p6f";
//některé ze svých postav si můžete přidat na chuť, např. zadáním "b3p6f". Pokud je toto heslo hacknuto hrubou silou na serveru stejného md5, pak z toho zjevně nic dobrého nevzejde. Ale radím vám dát jiné znaky, můžete na začátek řádku nebo doprostřed.
//V tomto případě je nutné zvětšit délku pole hesla v databázi. Zašifrované heslo může být mnohem větší.

$result = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$password"",$db); //získání všech údajů o uživateli se zadaným loginem a heslem z databáze
$myrow = mysql_fetch_array($vysledek);
if (empty($myrow["id"]))
{
//pokud uživatel se zadaným loginem a heslem neexistuje
//Udělejte záznam, že se daná ip nemohla přihlásit.
$select = mysql_query("SELECT ip FROM error WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (// zkontrolujte, zda je v tabulce "oshibka" uživatel
$result52 = mysql_query("SELECT col FROM error WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($vysledek52);
$col = $myrow52 + 1;//Přidat další neúspěšný pokus o přihlášení
mysql_query("UPDATE error SET col=$col,date=NOW() WHERE ip="$ip"");
}
jiný(
mysql_query ("INSERT INTO error (ip,date,col) VALUES ("$ip",NOW(),"1")");
//pokud se za posledních 15 minut nevyskytly žádné chyby, vložte nový záznam do tabulky "oshibka"
}

exit("Omlouváme se, zadané uživatelské jméno nebo heslo je nesprávné.");
}
jiný(
nbsp; //pokud se hesla shodují, zahájíme relaci pro uživatele! Můžete mu gratulovat, vstoupil!
$_SESSION["heslo"]=$myrow["heslo"];
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//tato data jsou velmi často používána, takže přihlášený uživatel je "nosí"

//Dále ukládáme data do cookies pro pozdější přihlášení.
//POZORNOST!!! UDĚLEJTE TO DLE SVÉHO UVÁŽENÍ, DATA JSOU ULOŽENA V COOKIES BEZ ŠIFROVÁNÍ
if ($_POST["uložit"] == 1) (
//Pokud uživatel chce, aby jeho údaje byly uloženy pro pozdější přihlášení, uložíme je do cookies jeho prohlížeče
setcookie("login", $_POST["login"], time()+9999999);
setcookie("heslo", $_POST["heslo"], time()+9999999);
}}
echo" ";//přesměruje uživatele na hlavní stránku, kde bude informován o úspěšném přihlášení
?>

5. Úplně změňte hlavní stránku. Je potřeba na něm zobrazit avatara uživatele, zobrazit odkaz pro odhlášení z účtu a přidat zaškrtávací políčko pro zapamatování hesla při přihlašování.
Index.php

// celý postup funguje na relacích. Právě v něm jsou uložena data uživatele, když je na webu. Je velmi důležité je spustit hned na začátku stránky!!!
session_start();
include("bd.php");// soubor bd.php by měl být ve stejné složce jako všichni ostatní, pokud tomu tak není, stačí změnit cestu
if (!empty($_SESSION["login"]) a !empty($_SESSION["heslo"]))
{
//pokud je v relacích přihlašovací jméno a heslo, zkontrolujte je a extrahujte avatar
$login = $_SESSION["přihlášení"];
$password = $_SESSION["heslo"];
$result = mysql_query("SELECT id,avatar FROM users WHERE login="$login" AND password="$password"",$db);
$myrow = mysql_fetch_array($vysledek);
//získání požadovaných uživatelských dat
}
?>


Hlavní strana


Hlavní strana

if (!isset($myrow["avatar"]) nebo $myrow["avatar"]=="") (
//kontrola, zda jsou data uživatele načtena z databáze. Pokud ne, pak není přihlášen nebo je heslo v relaci nesprávné. Zobrazte přihlašovací okno. Zadaným ho ale nezobrazíme, už ho nepotřebují.
tisk<<


TADY;

If (isset($_COOKIE["login")]) //je v COOKIE proměnná s přihlášením. Mělo by být, pokud uživatel při předchozím přihlášení klikl na zaškrtávací políčko „Zapamatovat si mě“.
{
//pokud ano, vložte jeho hodnotu do formuláře. V tomto případě se uživateli zobrazí, že jeho přihlašovací jméno je již zadáno v požadovaném sloupci
echo "value="".$_COOKIE["login"]."">";
}

tisk<<




TADY;

If (isset($_COOKIE["heslo"]))//je v souboru COOKIE proměnná hesla. Mělo by být, pokud uživatel při předchozím přihlášení klikl na zaškrtávací políčko „Zapamatovat si mě“.
{
//pokud ano, vložte jeho hodnotu do formuláře. V tomto případě se uživateli zobrazí, že jeho heslo je již zadáno v požadovaném sloupci.
echo "value="".$_COOKIE["heslo"]."">";
}

tisk<<



Aby si mě pamatoval.






Registrovat



Jste přihlášeni jako host

TADY;
}
jiný
{
// po úspěšném přihlášení dostane uživatel vše, co se nachází níže mezi hvězdičkami.

tisk<<
Jste přihlášeni jako $_SESSION (odhlásit se)


Tento odkaz je dostupný pouze registrovaným uživatelům

Váš avatar:




TADY;

//************************************************************************************
//po úspěšném přihlášení dostane uživatel vše, co se nachází NAHOŘE mezi hvězdičkami.
}
?>



6. Je nutné umožnit odhlášení přihlášeným uživatelům. Na hlavní stránce již byl odkaz pro ukončení. Ale tento soubor zatím neexistuje. Pojďme tedy vytvořit nový soubor exit.php s kódem:

session_start();
if (prázdné($_SESSION["přihlášení"]) nebo prázdné ($_SESSION["heslo"]))
{
//pokud neexistuje žádná relace s přihlašovacím jménem a heslem, k tomuto souboru má přístup nepřihlášený uživatel. On sem nepatří. Vydejte chybovou zprávu, zastavte skript
exit („Přístup na tuto stránku je povolen pouze registrovaným uživatelům. Pokud jste registrováni, vstupte na stránky pomocí svého uživatelského jména a hesla
Hlavní strana");
}

unset($_SESSION["heslo"]);
unset($_SESSION["přihlášení"]);
unset($_SESSION["id"]);// zničit proměnné v relacích
výstup(" ");
// pošle uživatele na hlavní stránku.
?>

Dobře, teď je po všem! Použití na zdraví! Hodně štěstí!

JavaScript je ve vašem prohlížeči blokován. Povolit JavaScript pro tento web!

Superglobální pole $_SERVER

Do pole $_SERVER PHP interpret vloží proměnné přijaté ze serveru. Bez těchto proměnných je obtížné organizovat plnohodnotnou podporu webových aplikací. Následuje popis nejdůležitějších prvků superglobálního pole $_SERVER.

Komentář

  • Zobrazit úplný seznam prvků v poli $_SERVER
  • můžete buď použít funkci print_r(), která vypíše výpis pole, nebo použít funkci phpinfo(), která zobrazí informace o PHP interpretu.

    Pole ( => on => 200 => on => htmlweb.ru => https => 443 => zavřít => Mozilla/5.0 (kompatibilní; Googlebot/2.1; +http://www.google.com/bot. html) => */* => beget=begetok; => gzip,deflate => /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin = > => Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l => htmlweb.ru => 185.12.92.137 => 80 => 144.76.78.4 => /var/www/ htmlweb/data/www/htmlweb.ru => http => => /var/www/htmlweb/data/www/htmlweb.ru => [e-mail chráněný]=>.php => 35242 => /php/function/$_server.php => CGI/1.1 => HTTP/1.0 => GET => => /php/function/%24_server.php => /index.php => /index.php => 1560059525,711 => 1560059525) 1

    $_SERVER[" DOCUMENT_ROOT"]

    Element $_SERVER["DOCUMENT_ROOT"] obsahuje cestu ke kořenovému adresáři serveru; pokud je skript spuštěn na virtuálním hostiteli, tento prvek určuje cestu ke kořenovému adresáři virtuálního hostitele. Tito. v konfiguračním souboru httpd.conf má virtuální hostitel direktivu DocumentRoot nastavenou na "D:/main", element $_SERVER["DOCUMENT_ROOT"] bude obsahovat hodnotu "D:main".

    $_SERVER[" REMOTE_ADDR"]

    Element $_SERVER["REMOTE_ADDR"] obsahuje IP adresu klienta. Při testování na místním počítači bude tato adresa 127.0.0.1. Při testování v síti však proměnná vrátí IP adresu klienta nebo posledního proxy serveru, přes který se klient na server dostal. Pokud klient používá proxy server, jeho IP adresu zjistíte pomocí proměnné prostředí HTTP_X_FORWARDED_FOR, jejíž hodnotu lze získat pomocí funkce getenv().

    Komentář

    Proxy servery jsou speciální zprostředkující servery, které poskytují speciální typ služby: kompresi provozu, kódování dat, přizpůsobení mobilním zařízením atd. Mezi mnoha proxy servery existují takzvané anonymní proxy servery, které umožňují skrýt skutečnou IP adresu klienta, tyto servery nevracejí proměnnou prostředí HTTP_X_FORWARDED_FOR.

    Načítání proměnné prostředí HTTP_X_FORWARDED_FOR

    echo @getenv(HTTP_X_FORWARDED_FOR);

    $_SERVER[" SCRIPT_FILENAME"]

    Element $_SERVER["SCRIPT_FILENAME"] obsahuje absolutní cestu k souboru z kořenového adresáře jednotky. Pokud tedy server běží pod operačním systémem Windows, pak taková cesta může vypadat takto: "d:main estindex.php", tzn. cesta se zadává z disku, v operačním systému typu UNIX je cesta zadána z kořenového adresáře /, například "/var/share/www/test/index.php".

    /var/www/htmlweb/data/www/site/index.php

    $_SERVER[" SERVER_NAME"]

    Element $_SERVER["SERVER_NAME"] obsahuje název serveru, který se obvykle shoduje s názvem domény webu, který je na něm hostován. Například,

    Obsah prvku $_SERVER["SERVER_NAME"] je často stejný jako obsah prvku $_SERVER["HTTP_HOST"]. Kromě názvu serveru vám superglobální pole $_SERVER umožňuje zjistit řadu parametrů serveru, jako je IP adresa serveru, naslouchací port, nainstalovaný webový server a verze protokolu HTTP. Tyto informace jsou umístěny v prvcích $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] a $_SERVER["SERVER_PROTOCOL"]. Níže je uveden příklad použití těchto prvků.

    Použití prvků pole $_SERVER

    echo "Název serveru je ".$_SERVER["SERVER_NAME"]."
    "; echo "IP adresa serveru je ".$_SERVER["SERVER_ADDR"]."
    "; echo "Port serveru je ".$_SERVER["SERVER_PORT"]."
    "; echo "Webový server - ".$_SERVER["SERVER_SOFTWARE"]."
    "; echo "Verze protokolu HTTP je ".$_SERVER["SERVER_PROTOCOL"]."
    ";

    Název serveru – web
    IP adresa serveru - 185.12.92.137
    Port serveru - 80
    Webový server – Apache/2.4.25 (Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l
    Verze protokolu HTTP - HTTP/1.0

    $_SERVER[" REQUEST_METHOD"]

    Element $_SERVER["REQUEST_METHOD"] obsahuje metodu požadavku, která se používá k volání skriptu: GET nebo POST.

    echo $_SERVER["POŽADAVKA_METODA"];

    $_SERVER[" ŘETĚZEC DOTAZU"]

    Element $_SERVER["QUERY_STRING"] obsahuje parametry předané skriptu, pokud je řetězec dotazu adresa

    Například při odkazu na:
    prvek $_SERVER["QUERY_STRING"] bude obsahovat veškerý text za znakem "?":

    echo $_SERVER["QUERY_STRING"];

    id=1&test=wet&id_theme=512

    $_SERVER[" PHP_SELF"]

    Element $_SERVER["PHP_SELF"] obsahuje název skriptu počínaje kořenovým adresářem virtuálního hostitele, tzn. pokud je řetězec dotazu adresa http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 pak element $_SERVER["PHP_SELF"] bude obsahovat fragment "/test/index.php". Zpravidla je stejný fragment umístěn do prvku $_SERVER["SCRIPT_NAME"].

    $_SERVER[" REQUEST_URI"]

    Element $_SERVER["REQUEST_URI"] obsahuje název skriptu počínaje kořenovým adresářem virtuálního hostitele a parametry, tj. pokud je řetězec dotazu adresa: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 pak element $_SERVER["REQUEST_URI"] bude obsahovat fragment "/test/index.php?id=1&test=wet&id_theme=512". Aby bylo možné obnovit úplnou adresu ve skriptu, který je umístěn v řetězci dotazu, stačí použít kombinaci prvků pole $_SERVER uvedenou níže

    Úplná adresa URL skriptu

    echo "http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];

    Související články: