PHP의 $_SERVER 완전 전역 배열($HTTP_SERVER_VARS). $_SERVER - 서버 및 런타임 환경에 대한 정보 $_SERVER 배열의 요소 사용

$_SERVER["DOCUMENT_ROOT"] 요소는 스크립트가 가상 호스트에서 실행 중인 경우 서버 루트 디렉토리에 대한 경로를 포함합니다. 주어진 요소가상 호스트의 루트 디렉토리 경로를 지정합니다. 저것들. httpd.conf 구성 파일에서 가상 호스트에는 "D:/main"으로 설정된 DocumentRoot 지시문이 있고 $_SERVER["DOCUMENT_ROOT"] 요소에는 "D:main" 값이 포함됩니다.

$_SERVER["HTTP_ACCEPT"] 요소

$_SERVER["HTTP_ACCEPT"] 요소는 문서 유형에 관한 클라이언트의 기본 설정을 설명합니다. 이 요소의 내용은 클라이언트에서 서버로 전송된 Accept HTTP 헤더에서 검색됩니다. 이 헤더의 내용은 다음과 같습니다.

이미지/gif, 이미지/x-xbitmap, 이미지/jpeg, 이미지/pjpeg, 애플리케이션/x-shockwave-flash, 애플리케이션/vnd.ms-excel, 애플리케이션/msword, */*

Accept 헤더를 사용하면 클라이언트가 요청에 대한 응답으로 수신하기를 선호하는 미디어 유형을 지정할 수 있습니다. 이 헤더를 사용하면 응답이 소수의 기본 유형 집합으로 제한됨을 서버에 알릴 수 있습니다.

* 기호는 미디어 행에서 유형을 그룹화하는 데 사용됩니다. 예를 들어 */* 기호는 모든 유형의 사용을 지정하고 type/* 표기법은 선택한 유형 유형의 모든 하위 유형 사용을 지정합니다.

논평

미디어 유형은 쉼표로 서로 구분됩니다.

각 미디어 행은 추가 매개변수 세트로도 특징지어집니다. 그 중 하나는 덜 선호되는 유형에서 더 선호되는 유형으로 각각 0에서 1까지의 값을 취하는 소위 상대적 선호 계수 q입니다. 여러 q 매개변수를 사용하면 클라이언트가 주어진 미디어 유형에 대한 상대적 선호도를 서버에 알릴 수 있습니다.

논평

q 매개변수의 기본값은 1입니다. 또한 세미콜론으로 미디어 유형과 구분됩니다.

헤더 예시 수락:

승인: audio/*; q=0.2, 오디오/기본

이 헤더에서 첫 번째 유형은 모든 음악 문서를 포함하고 0.2의 선호도 계수를 특징으로 하는 audio/*입니다. 쉼표로 구분된 오디오/기본 유형이 지정되었으며, 기본 설정 계수가 지정되지 않고 기본값 1을 가정합니다. 이 제목을 인용하면 다음과 같이 해석할 수 있습니다. "저는 오디오/기본 유형을 선호하지만 가능한 경우 선호 계수를 80% 이상 줄인 후 다른 오디오 유형의 문서를 보낼 수도 있습니다."

예제는 더 복잡할 수 있습니다.

수락: 텍스트/일반; q=0.5, 텍스트/html,
텍스트/x-dvi; q=0.8, 텍스트/x-c

논평

$_SERVER["HTTP_ACCEPT"] 요소는 정확히 동일한 정보를 포함하지만 초기 Accept 헤더는 포함하지 않습니다.

이 헤더는 다음과 같이 해석됩니다. text/html 및 text/x-c 문서 유형이 선호되지만 사용할 수 없는 경우 보내는 클라이언트는 주어진 요청, text/x-dvi를 선호하며 존재하지 않는 경우 text/plain 유형을 사용할 수 있습니다.

$_SERVER["HTTP_ACCEPT_LANGUAGE"] 요소

$_SERVER["HTTP_ACCEPT_LANGUAGE"] 요소는 클라이언트의 언어 기본 설정을 설명합니다. 이 정보클라이언트에서 서버로 보낸 Accept-Language HTTP 헤더에서 검색됩니다. 다음 예를 들 수 있습니다.

Accept-Language: ru, en; q=0.7

다음과 같이 해석할 수 있습니다. 클라이언트는 러시아어를 선호하지만 사용할 수 없는 경우 영어로 된 문서를 수락하는 데 동의합니다. $_SERVER["HTTP_ACCEPT_LANGUAGE"] 요소는 정확히 동일한 정보를 포함하지만 Accept-Language 헤더는 없습니다.

루, 엔; q=0.7

$_SERVER["HTTP_ACCEPT_LANGUAGE"] 요소의 내용은 방문자의 국적을 결정하는 데 사용할 수 있습니다. 그러나 많은 사용자가 영어 버전의 브라우저를 사용하기 때문에 결과는 대략적이며 방문자가 영어 하나만 선호한다고 서버에 알립니다.

$_SERVER["HTTP_HOST"] 요소

$_SERVER["HTTP_HOST"] 요소에는 일반적으로 서버에서 호스팅되는 사이트의 도메인 이름과 동일한 서버 이름이 포함됩니다. 일반적으로 이 매개변수에 지정된 이름은 $_SERVER["SERVER_NAME"]과 동일합니다. 매개변수는 프로토콜 이름(http://) 없이 도메인 이름만 포함합니다.

www.sofftime.ru

$_SERVER["HTTP_REFERER"] 요소

$_SERVER["HTTP_REFERER"] 요소에는 방문자가 이 페이지를 방문한 페이지의 주소가 포함됩니다. 전환은 링크를 통해 이루어져야 합니다. index.php와 page.php 두 페이지를 만들어 봅시다.

index.php 페이지

에코 "PHP 페이지 링크
"
;
$_SERVER["HTTP_REFERER"]
?>

page.php 페이지에도 비슷한 내용이 있지만 링크는 index.php 페이지를 가리킵니다.

페이지 page.php

에코 "PHP 페이지 링크
"
;
echo "$_SERVER [ "HTTP_REFERER"]의 내용 - " .
$_SERVER["HTTP_REFERER"]
?>

한 페이지에서 다른 페이지로 이동할 때 전환이 이루어진 페이지의 주소가 링크 아래에 표시됩니다.

$_SERVER["HTTP_USER_AGENT"] 요소

$_SERVER["HTTP_USER_AGENT"] 요소에는 브라우저 유형 및 버전에 대한 정보가 포함되며 운영 체제방문객.

다음은 이 행의 일반적인 내용입니다. "Mozilla/4.0(호환 가능; MSIE 6.0; Windows NT 5.1)". 하위 문자열 "MSIE 6.0"의 존재는 방문자가 인터넷을 사용하여 페이지를 보고 있음을 나타냅니다. 익스플로러 버전 6.0. 문자열 "Windows NT 5.1"은 운영 체제가 Windows XP임을 나타냅니다.

논평

Windows 2000의 경우 $_SERVER["HTTP_USER_AGENT"] 요소는 "Mozilla/4.0(compatible; MSIE 5.01; Windows NT 5.0)")"처럼 보이고 Windows XP의 경우 "Mozilla/4.0(compatible; MSIE 6.0) ; 윈도우 NT 5.1)".

방문자가 Opera 브라우저를 사용하는 경우 $_SERVER["HTTP_USER_AGENT"]의 내용은 "Mozilla/4.0(compatible; MSIE 5.0; Windows 98) Opera 6.04"와 같습니다. 하위 문자열 "MSIE 6.0"도 여기에 표시되어 Opera 브라우저가 다음과 호환됨을 나타냅니다. 인터넷 브라우저탐색기와 동일한 동적 사용 윈도우 라이브러리. 따라서 브라우저에서 반환된 문자열을 구문 분석할 때 인터넷 익스플로러하위 문자열 "MSIE 6.0"은 포함하고 하위 문자열 "Opera"는 포함하지 않는 문자열을 나타냅니다. 또한 이 줄에서 사용자가 Windows 98 운영 체제를 사용하고 있다는 결론을 내릴 수 있습니다.

논평

사용자 에이전트 파이어폭스 브라우저 Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5처럼 보일 수 있습니다.

Netscape 브라우저를 사용할 때 $_SERVER["HTTP_USER_AGENT"] 요소의 내용은 다음과 같습니다. "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624 Netscape/7.1" . 이 브라우저는 "Netscape" 하위 문자열의 존재로 식별할 수 있습니다. 또한 방문자가 다음을 사용하여 인터넷에 액세스하고 있음을 알 수 있습니다. 운영 버전 Pentium IV에 최적화된 커널을 사용하는 Linux, X-Window GUI. 이 메커니즘은 디자이너가 가장 일반적인 브라우저에 대해 페이지를 최적화할 수 있도록 통계 정보를 수집하는 데 유용합니다.

요소 $_SERVER["REMOTE_ADDR"]

$_SERVER["REMOTE_ADDR"] 요소에는 클라이언트의 IP 주소가 포함됩니다. 로컬 컴퓨터에서 테스트할 때 이 주소는 127.0.0.1입니다. 그러나 네트워크에서 테스트할 때 변수는 클라이언트의 IP 주소 또는 클라이언트가 서버에 도달한 마지막 프록시 서버를 반환합니다. 클라이언트가 프록시 서버를 사용하는 경우 다음을 사용하여 클라이언트의 IP 주소를 찾을 수 있습니다. 환경 변수 getenv() 함수를 사용하여 값을 얻을 수 있는 HTTP_X_FORWARDED_FOR.

논평

프록시 서버는 특별한 유형의 서비스를 제공하는 특별한 중간 서버입니다: 트래픽 압축, 데이터 인코딩, 적응 모바일 장치등등. 많은 프록시 서버 중에는 클라이언트의 실제 IP 주소를 숨길 수 있는 소위 익명 프록시 서버가 있으며 이러한 서버는 HTTP_X_FORWARDED_FOR 환경 변수를 반환하지 않습니다.

HTTP_X_FORWARDED_FOR 환경 변수 검색

에코 getenv(HTTP_X_FORWARDED_FOR );
?>

$_SERVER["SCRIPT_FILENAME"] 요소

$_SERVER["SCRIPT_FILENAME"] 요소에는 드라이브의 루트에서 파일에 대한 절대 경로가 포함됩니다. 예를 들어 서버에서 운영 체제를 실행 중인 경우 Windows 시스템, 그런 다음 이러한 경로는 "d:main estindex.php"와 같이 보일 수 있습니다. 경로는 디스크에서 지정되며 UNIX와 같은 운영 체제에서 경로는 루트 디렉토리 /에서 지정됩니다(예: "/var/share/www/test/index.php").

$_SERVER["SERVER_NAME"] 요소

$_SERVER["SERVER_NAME"] 요소에는 일반적으로 서버에서 호스팅되는 사이트의 도메인 이름과 일치하는 서버 이름이 포함됩니다. 예를 들어,

www.site

$_SERVER["SERVER_NAME"] 요소의 내용은 종종 $_SERVER["HTTP_HOST"] 요소의 내용과 동일합니다. 서버 이름 외에도 $_SERVER superglobal 배열을 사용하면 서버 IP 주소, 수신 포트, 설치된 웹 서버 및 HTTP 프로토콜 버전과 같은 여러 서버 매개 변수를 찾을 수 있습니다. 이 정보는 각각 $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] 및 $_SERVER["SERVER_PROTOCOL"] 요소에 배치됩니다. 다음은 이러한 요소를 사용하는 예입니다.

$_SERVER 배열의 요소 사용

에코 "서버 이름 -" . $_SERVER["서버_이름"]. "
" ;
에코 "서버 IP 주소 - ". $_SERVER["서버_주소"]. "
" ;
에코 "서버 포트 -" . $_SERVER["서버_포트"]. "
" ;
에코 "웹 서버 -" . $_SERVER["서버_소프트웨어"]. "
" ;
에코 "HTTP 프로토콜 버전 - ". $_SERVER["SERVER_PROTOCOL"]. "
" ;
?>

$HTTP_SERVER_VARS [삭제됨]

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

$_서버 -- $HTTP_SERVER_VARS [삭제됨]서버 및 런타임 정보

설명

$_SERVER 변수는 스크립트 헤더, 경로 및 위치와 같은 정보를 포함하는 배열입니다. 이 배열의 항목은 웹 서버에서 생성됩니다. 모든 웹 서버가 이들을 제공한다는 보장은 없습니다. 서버는 이들 중 일부를 생략하거나 여기에 나열되지 않은 다른 항목을 제공할 수 있습니다. 그러나 이러한 변수 중 많은 수가 » CGI/1.1 사양에 있으므로 특정 웹 서버에서도 구현될 것으로 예상할 수 있습니다.

$HTTP_SERVER_VARS 변수는 동일한 초기 정보를 포함하지만 완전 전역 변수는 아닙니다. ($HTTP_SERVER_VARS와 $_SERVER는 서로 다른 변수이므로 PHP가 그에 따라 처리합니다.) 또한 "긴 배열"은 PHP 5.4.0에서 제거되었으므로 $HTTP_SERVER_VARS는 더 이상 존재하지 않습니다.

지수

$_SERVER 배열에서 다음 요소를 찾을 수도 있고 찾지 못할 수도 있습니다. PHP가 명령줄에서 실행되는 경우 사용할 수 있는(또는 실제로 중요한) 항목이 거의 없다는 점에 유의하십시오.

"PHP_SELF" 문서 루트에 상대적인 현재 실행 중인 스크립트의 파일 이름입니다. 예를 들어 http://example.com/foo/bar.php 의 스크립트에서 $_SERVER["PHP_SELF"] 는 /foo/bar.php 입니다. __FILE__ 상수는 현재(즉, 포함된) 파일의 전체 경로와 파일 이름을 포함합니다. PHP가 실행 중인 경우 명령줄, 이 변수에는 PHP 4.3.0 이후의 스크립트 이름이 포함됩니다. 이전에는 사용할 수 없었습니다."인수" 스크립트에 전달된 인수 배열입니다. 스크립트가 명령줄에서 실행되면 명령줄 옵션에 대한 C와 유사한 액세스가 제공됩니다. GET 메서드를 통해 호출하면 이 배열에 쿼리 문자열이 포함됩니다."argc" 스크립트에 전달된 매개변수의 수를 포함합니다(명령줄에서 시작된 경우)."게이트웨이_인터페이스" 서버에서 사용하는 CGI 사양의 버전을 포함합니다. 예를 들어" CGI/1.1". "SERVER_ADDR" 현재 스크립트가 실행 중인 서버의 IP 주소입니다."서버 이름" 현재 스크립트가 실행 중인 호스트의 이름입니다. 스크립트가 가상 호스트에서 실행 중인 경우 여기에는 해당 가상 호스트에 대해 정의된 이름이 포함됩니다."서버_소프트웨어" 요청에 응답할 때 헤더에 지정된 서버 식별 문자열입니다."서버_프로토콜" 페이지가 요청된 정보 프로토콜의 이름 및 버전 예를 들어 " HTTP/1.0"; " REQUEST_METHOD " 페이지를 요청하는 데 사용된 방법 예를 들어 " 얻다", "머리", "우편", "놓다".

논평:

헤더를 보낸 후(즉, 출력 버퍼링 없이 출력을 수행한 후) 메서드에 의해 요청이 이루어진 경우 PHP 스크립트가 종료됩니다. 머리.

" REQUEST_TIME " 요청 시작의 타임스탬프입니다. PHP 5.1.0부터 사용 가능합니다." REQUEST_TIME_FLOAT " 마이크로초 단위로 정확한 요청 시작의 타임스탬프입니다. PHP 5.4.0부터 사용 가능합니다." QUERY_STRING " 페이지가 검색된 쿼리 문자열(있는 경우)입니다."DOCUMENT_ROOT" 현재 스크립트가 실행되는 문서 루트 디렉토리는 정확히 서버의 구성 파일에 지정된 디렉토리입니다."HTTP_ACCEPT" 헤더 콘텐츠 수용하다:현재 요청에서(있는 경우)."HTTP_ACCEPT_CHARSET" 헤더 콘텐츠 AcceptCharset:현재 요청에서(있는 경우). 예를 들어: " iso-8859-1,*,utf-8". "HTTP_ACCEPT_ENCODING" 헤더 콘텐츠 인코딩 수락: gzip". "HTTP_ACCEPT_LANGUAGE" 헤더 콘텐츠 수락 언어:현재 요청에서(있는 경우). 예를 들어: " ko". "HTTP_연결" 헤더 콘텐츠 연결:현재 요청에서(있는 경우). 예를 들어: " 살아 유지". "HTTP_HOST" 헤더 콘텐츠 주인:현재 요청에서(있는 경우)."HTTP_REFERER" 사용자의 브라우저를 이 페이지로 가져온 페이지(있는 경우)의 주소입니다. 이 헤더는 사용자의 웹 브라우저에서 설정합니다. 모든 브라우저가 이를 설치하는 것은 아니며 일부는 추가 기능으로 HTTP_REFERER 헤더의 내용을 변경할 수 있습니다. 한마디로 그는 정말 믿을 수 없다."HTTP_USER_AGENT" 헤더 콘텐츠 사용자 에이전트:현재 요청에서(있는 경우). 이 문자열에는 사용자가 이 페이지를 요청한 브라우저의 지정이 포함됩니다. 일반적인 예는 다음 행입니다. Mozilla/4.5(X11, U, Linux 2.2.9 i586). 무엇보다도 이 값을 함수와 함께 사용할 수 있습니다. get_browser()사용자 브라우저의 기능에 맞게 페이지 출력을 조정합니다."https" 요청이 HTTPS 프로토콜을 통해 이루어진 경우 비어 있지 않은 값을 사용합니다.

논평: IIS에서 ISAPI를 사용하는 경우 값은 끄다요청이 HTTPS 프로토콜을 통해 이루어지지 않은 경우.

"REMOTE_ADDR" 사용자가 현재 페이지를 보고 있는 IP 주소입니다."원격 호스트" 사용자가 현재 페이지를 보고 있는 원격 호스트입니다. 역방향 DNS 조회는 REMOTE_ADDR 변수의 값을 기반으로 합니다.

논평: 이 변수를 만들려면 웹 서버를 구성해야 합니다. 예를 들어 Apache에서는 지시문이 필요합니다. 호스트 이름 조회 켜기 httpd.conf 파일에서 이 변수를 생성합니다. 또한보십시오 gethostbyaddr().

"REMOTE_PORT" 웹 서버와 통신하는 데 사용되는 원격 시스템의 포트입니다."REMOTE_USER" 인증된 사용자입니다."REDIRECT_REMOTE_USER" 요청이 내부적으로 리디렉션된 경우 인증된 사용자입니다."SCRIPT_FILENAME"

현재 실행 중인 스크립트의 절대 경로입니다.

논평:

file.php 또는 ../file.php 와 같은 상대 경로를 사용하여 명령줄(CLI)에서 스크립트를 실행하는 경우 $_SERVER["SCRIPT_FILENAME"] 변수에는 사용자가 지정한 상대 경로가 포함됩니다.

"SERVER_ADMIN" 이 변수는 서버 구성 파일의 지시문에서 해당 값(Apache용)을 가져옵니다. 스크립트가 가상 호스트에서 실행 중인 경우 해당 가상 호스트에 대해 정의된 값이 됩니다."서버 포트" 웹 서버가 연결하는 데 사용하는 서버 컴퓨터의 포트입니다. 기본 설정의 경우 값은 " 80 "; 예를 들어 SLL을 사용하는 경우 이 값은 보안 HTTP 연결용으로 구성됩니다.

논평: Apache 2에서 물리적(실제) 포트를 얻으려면 다음을 설치해야 합니다. UseCanonicalName = 켜기그리고 UseCanonicalPhysicalPort = 켜기, 그렇지 않으면 이 값이 스푸핑되어 물리적 포트의 실제 값을 반환하지 않을 수 있습니다. 강화된 보안이 필요한 애플리케이션 컨텍스트에서 이 값에 의존하는 것은 안전하지 않습니다.

"서버_서명" 활성화된 경우 서버 생성 페이지에 추가할 서버 버전 및 가상 호스트 이름을 포함하는 문자열입니다."PATH_TRANSLATED" 서버가 가상 대 실제 매핑을 수행한 후 현재 스크립트에 대한 파일 시스템(문서 루트가 아님) 기반 경로입니다.

논평: PHP 4.3.2부터 PATH_TRANSLATED 변수는 Apache에서 사용하지 않을 때 SCRIPT_FILENAME과 동일한 값으로 설정되는 Apache 버전 1과 비교하여 Apache 2 SAPI에서 더 이상 암시적으로 설정되지 않습니다. 이 변경은 PATH_TRANSLATED 변수가 PATH_INFO가 정의된 경우에만 존재해야 하는 CGI 사양을 준수하기 위해 만들어졌습니다. 아파치 사용자 2 지시문을 사용할 수 있습니다 AcceptPathInfo = 켜짐 httpd.conf 구성 파일에서 PATH_INFO 변수를 설정합니다.

"SCRIPT_NAME" 현재 실행 중인 스크립트의 경로를 포함합니다. 이는 자신을 가리켜야 하는 페이지에 유용합니다. __FILE__ 상수는 현재(즉, 포함된) 파일의 전체 경로와 이름을 포함합니다." REQUEST_URI " 이 페이지에 액세스하기 위해 전달된 URI입니다. 예를 들어, " /index.html". "PHP_AUTH_DIGEST" HTTP 다이제스트 인증을 수행할 때 이 변수는 클라이언트가 보낸 "Authorization" 헤더로 설정됩니다(그런 다음 적절한 유효성 검사에 사용해야 함)."PHP_AUTH_USER" HTTP 인증을 수행할 때 이 변수는 사용자가 제공한 사용자 이름으로 설정됩니다."PHP_AUTH_PW" HTTP 인증을 수행할 때 이 변수는 사용자가 제공한 암호로 설정됩니다."AUTH_TYPE" HTTP 인증을 수행할 때 이 변수는 사용되는 인증 유형으로 설정됩니다."PATH_INFO" 사용 가능한 경우 스크립트 이름 뒤, 쿼리 문자열 앞의 사용자 제공 경로를 포함합니다. 예를 들어 현재 스크립트가 http://www.example.com/php/path_info.php/some/stuff?foo=bar URL에서 요청되면 $_SERVER["PATH_INFO"] 변수에 다음이 포함됩니다. /몇 가지 물건?>

이 예제를 실행한 결과는 다음과 같습니다.

어느 정도 진지하게 공부한 사람들 PHP매우 유용한 전역 배열이 하나 있음을 알고 있습니다. PHP, 호출 $_서버. 그리고이 기사에서는 초보자에게도 지식이 필요하기 때문에이 배열에서 가장 많이 사용되는 키와 값을 분석하고 싶습니다. PHP 프로그래머.

진행하기 전에 PHP의 $_SERVER 전역 배열에약간의 힌트를 드리겠습니다. 멋진 기능이 내장되어 있습니다 PHP, 호출 phpinfo(). 즉시 사용 예를 들어 보겠습니다.

phpinfo();
?>

이 간단한 스크립트를 실행하면 다양한 테이블이 표시됩니다. PHP 인터프리터 설정, 포함하여 끝 부분에 값 표가 있습니다. 전역 배열 $_SERVER. 모든 키와 해당 값이 모두 나열됩니다. 이것이 어떻게 당신을 도울 수 있습니까? 그리고 이 값이나 저 값이 필요하고 키가 무엇인지 잊어버린 경우 함수를 사용하여 phpinfo()당신은 항상 그 이름을 기억할 수 있습니다. 일반적으로 이 스크립트를 실행하면 즉시 이해하게 될 것입니다.

이제 가장 인기있는 것으로 넘어 갑시다. $_SERVER 배열 키:

  • HTTP_USER_AGENT- 이 키를 통해 클라이언트의 특성을 알 수 있습니다. 대부분의 경우 이것은 확실히 브라우저이지만 항상 그런 것은 아닙니다. 다시 말하지만, 브라우저라면 어떤 브라우저인지 이 변수에서 알 수 있습니다.
  • HTTP_참조자- 해당 파일의 절대 경로를 포함합니다( PHP 스크립트, HTML 페이지)에서 이 스크립트로 전환했습니다. 대략적으로 말하면 고객은 어디에서 왔습니까?
  • 서버_주소 - IP 주소섬기는 사람.
  • REMOTE_ADDR - IP 주소고객.
  • 문서_루트- 사이트의 루트 디렉터리에 대한 실제 경로입니다. 이 옵션은 다음을 통해 설정됩니다. 아파치 서버 구성 파일.
  • SCRIPT_FILENAME- 호출된 스크립트의 물리적 경로.
  • QUERY_STRING- 쿼리로 문자열을 가져온 다음 이 문자열을 구문 분석할 수 있는 매우 유용한 값입니다.
  • REQUEST_URI- 요청 자체뿐만 아니라 루트에서 호출된 스크립트에 대한 상대 경로도 함께 포함하는 훨씬 더 유용한 값입니다. 이것은 매우 자주 중복을 제거하는 데 사용됩니다. index.php, 즉, 우리가 그러한 URL: "http://mysite.ru/index.php" 그리고 " http://mysite.ru/" 한 페이지로 이동하고 URL따라서 검색 엔진 최적화에 나쁜 영향을 미치는 복제가 다릅니다. 그리고 여기 도움으로 REQUEST_URI다음을 정의할 수 있습니다. index.php또는 스크립트가 호출되지 않았습니다. 그리고 우리는 index.php(그가 참석했다면 REQUEST_URI)없이 index.php. 결과적으로 이러한 요청을 보낼 때: " http://mysite.ru/index.php?id=5"로 리디렉션됩니다. URL: "http://mysite.ru/?id=5". 즉, 에서 제거하여 중복을 제거했습니다. URL이것 index.php.
  • SCRIPT_NAME- 호출된 스크립트에 대한 상대 경로.

아마도 이것들은 모든 요소입니다 PHP의 $_SERVER 전역 배열정기적으로 사용되는 것입니다. 그들은 필요할 때 알고 사용할 수 있어야 합니다.

먼저 아바타 업로드 기능을 추가하여 등록 페이지를 개선하겠습니다. 원본 이미지는 jpg, gif 또는 png 형식이어야 합니다. 또한 2MB를 넘지 않아야 합니다. 걱정하지 마세요. 스크립트로 압축하면 아바타의 크기는 약 3kb이고 형식은 jpg가 됩니다. 페이지 열기 등록PHP그리고 태그에 추가 < 형태> enctype="멀티파트/폼 데이터", 예에서와 같이:


등록










이제 저장 reg.php

2. 그런 다음 테이블에 다른 필드를 만들어야 합니다. 사용자. 우리는 간다 phpmyadmin, 원하는 데이터베이스와 테이블을 선택합니다.


그림과 같이 모든 값을 설정합니다.

아바타의 경로는 이 필드에 기록되며 별도의 폴더에 저장됩니다. "아바타"라고 하겠습니다. 폴더는 나머지 스크립트 파일과 동일한 디렉토리에 있습니다.

3. 파일로 이동 구하다_ 사용자. PHP로그인 및 비밀번호에서 공백을 제거한 후 다음 코드를 추가하십시오.

// 여분의 공백 제거
$로그인 = 트림($로그인);

// 새로운 걸 더하다 ********************************************** ***

// 로그인 및 비밀번호 길이 확인 추가
if (strlen($로그인)< 3 or strlen($login) > 15) {
exit("로그인은 3자 이상 15자 이하여야 합니다.");
}
if (strlen($암호)< 3 or strlen($password) > 15) {
exit("비밀번호는 3자 이상 15자 이하여야 합니다.");
}

if (!empty($_POST["fupload"])) //사용자가 이미지를 제출했는지 확인
{
$fupload=$_POST["fupload"]; $fupload = 트림($fupload);
if ($fupload =="" 또는 비어 있음($fupload)) (
unset($fupload);// $fupload 변수가 비어 있으면 삭제합니다.
}
}
if (!isset($fupload) 또는 비어 있음($fupload) 또는 $fupload =="")
{
//변수가 존재하지 않는 경우(사용자가 이미지를 보내지 않은 경우) "no avatar"라는 문구가 있는 미리 준비된 이미지를 할당합니다.
$avatar = "아바타/net-avatara.jpg"; //net-avatara.jpg를 그리거나 소스에서 가져올 수 있습니다.
}
또 다른
{
// 그렇지 않으면 - 사용자의 이미지를 로드합니다.
$path_to_90_directory = "avatars/";//초기 이미지와 압축된 사본이 로드될 폴더

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["fupload"]["이름"])) // 원본 이미지 형식 확인
{
$filename = $_FILES["fupload"]["이름"];
$source = $_FILES["fupload"]["tmp_name"];
$target = $path_to_90_directory . $파일명;
move_uploaded_file($source, $target);//원본을 $path_to_90_directory에 업로드
if(preg_match("/[.](GIF)|(gif)$/", $filename)) (
$im = imagecreatefromgif($path_to_90_directory.$filename) ; //원본이 gif 형식인 경우 동일한 형식으로 이미지를 생성합니다. 후속 압축에 필요
}
if(preg_match("/[.](PNG)|(png)$/", $filename)) (
$im = imagecreatefrompng($path_to_90_directory.$filename) ;//원본이 있는 경우 png 형식, 그런 다음 동일한 형식으로 이미지를 만듭니다. 후속 압축에 필요
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $filename)) (
$im = imagecreatefromjpeg($path_to_90_directory.$filename); // 원본이 jpg 형식인 경우 동일한 형식으로 이미지를 생성합니다. 후속 압축에 필요
}
//정사각형 이미지 생성 및 후속 압축은 www.codenet.ru 사이트에서 가져옴
// 90x90 정사각형 생성
// dest - 결과 이미지
// w - 이미지 너비
// 비율 - 비례 계수
$w = 90; // 정사각형 90x90. 당신은 또한 다른 크기를 제공할 수 있습니다.
// 기반으로 소스 이미지 생성
// 소스 파일 및 크기 결정
$w_src = 이미지x($im); // 너비 계산
$h_src = 이미지($im); //이미지 높이 계산
// 빈 정사각형 이미지 생성
// 트루컬러가 중요합니다! 그렇지 않으면 8비트 결과를 얻게 됩니다.
$dest = imagecreatetruecolor($w,$w);
// 사진이 수평인 경우 정사각형 중앙을 x로 잘라냅니다.
if ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
라운드((최대($w_src,$h_src)-최소($w_src,$h_src))/2),
0, $w, $w, 최소($w_src,$h_src), 최소($w_src,$h_src));
// y에서 정사각형 상단을 자르고,
// 사진이 수직인 경우(가운데도 가능)
만약 ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
최소($w_src,$h_src), 최소($w_src,$h_src));
// 정사각형 이미지는 컷아웃 없이 크기가 조정됩니다.
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$날짜=시간(); //현재 시간을 계산합니다.
imagejpeg($dest, $path_to_90_directory.$date.".jpg");//jpg 이미지를 원하는 폴더에 저장하면 이름이 현재 시간이 됩니다. 아바타가 같은 이름을 가지지 않도록 했습니다.
//왜 jpg인가? 공간을 거의 차지하지 않으며 사용자의 주의를 산만하게 하는 이미지의 애니메이션 GIF를 파괴합니다. 눈꼬리에서 어떤 움직임이 감지될 때 그의 댓글을 읽는 것은 그리 유쾌하지 않습니다.
$avatar = $path_to_90_directory.$date.".jpg";//아바타의 경로를 변수에 넣습니다.
$delfull = $path_to_90_directory.$filename;
unlink ($delfull);//원래 업로드된 이미지를 제거합니다. 더 이상 필요하지 않습니다. 작업은 미니어처를 얻는 것이 었습니다.
}
또 다른
{
// 형식이 일치하지 않는 경우 적절한 메시지를 발행합니다.
exit("아바타의 형식은 다음과 같아야 합니다. JPG, GIF 또는 PNG");
}
//로딩 프로세스 종료 및 로드된 ava의 주소를 $avatar 변수에 할당
}



// 새로운 추가 ********************************************* ****
// 기사의 첫 번째 부분부터 모든 내용이 이어지지만 데이터베이스 쿼리에 변경 사항을 추가해야 합니다.
//데이터베이스에 접속
// 동일한 로그인을 가진 사용자가 존재하는지 확인
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("죄송합니다. 입력하신 아이디는 이미 등록되어 있습니다. 다른 아이디를 입력해주세요.");
}
// 없으면 데이터 저장
$result2 = mysql_query("INSERT INTO users (login,password,avatar) VALUES("$login","$password","$avatar")");
// 오류가 있는지 확인
if ($result2=="참")
{
echo "성공적으로 등록되었습니다! 이제 사이트에 들어갈 수 있습니다. 메인 페이지";
}
또 다른(
echo "오류! 로그인하지 않았습니다.";
}
?>

4. 동일한 데이터베이스에 하나의 테이블을 추가해야 합니다. 로그인할 때 오류가 발생한 IP 주소를 저장합니다. 따라서 연속 3회 이상 오류를 범한 사람에 대해서는 약 15분 동안 접근을 제한할 수 있는데, 비밀번호를 추측하는 프로그램은 오랫동안 헤매어야 할 것 같습니다.
phpmyadmin으로 이동하여 3개의 필드가 있는 새 테이블을 생성해 보겠습니다.


IP - IP 주소.
날짜 - 주어진 IP를 가진 사용자가 지난 15분 동안 로그인에 실패한 날짜입니다. col - 주어진 IP를 가진 사용자에 대한 지난 15분 동안의 오류 수.
엄청난! 이제 비밀번호가 암호화되었으므로 이제 로그인 및 비밀번호 확인 파일을 변경하겠습니다. testreg.php를 열고 로그인 및 암호에서 공백을 제거하는 것 이외의 모든 것을 삭제하십시오. 다음으로 다음 코드를 추가합니다.

// 여분의 공백 제거
$로그인 = 트림($로그인);
$password = trim($password);

// new*********************************************로 교체 ***
// 데이터베이스에 연결
include("bd.php");// bd.php 파일은 다른 사람과 같은 폴더에 있어야 합니다. 그렇지 않은 경우 경로를 변경하십시오.
// 비밀번호 추측을 위한 미니체크
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=="unknown") ( $ip=getenv("REMOTE_ADDR"); )//IP 검색
mysql_query("DELETE FROM error WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//15분 후 로그인 오류가 발생한 사용자의 IP 주소를 삭제합니다.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);// 데이터베이스에서 수량 검색 실패한 시도이 IP를 사용하는 사용자의 최근 15개 로그인
$myrow = mysql_fetch_array($result);
if ($myrow["col"] > 2) (
//오류가 2개 이상(예: 3개)이면 메시지를 발행합니다.
exit("사용자 이름 또는 비밀번호를 3회 잘못 입력하셨습니다. 15분 후에 다시 시도하십시오.");
}
$password = md5($password);//비밀번호 암호화
$password = strrev($password);// 안정성을 위해 반전을 추가합니다.
$password = $password."b3p6f";
//예를 들어 "b3p6f"를 입력하여 원하는 문자를 추가할 수 있습니다. 이 암호가 동일한 md5의 서버에서 무차별 대입으로 해킹되면 분명히 아무 소용이 없습니다. 하지만 줄의 시작 부분이나 중간에 다른 문자를 입력하는 것이 좋습니다.
//이 경우 데이터베이스에서 암호 필드의 길이를 늘려야 합니다. 암호화된 암호는 훨씬 클 수 있습니다.

$result = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$password"",$db); //데이터베이스에서 입력한 로그인 및 비밀번호를 사용하여 사용자에 대한 모든 데이터 검색
$myrow = mysql_fetch_array($result);
if (empty($myrow["id"]))
{
//입력한 로그인과 비밀번호를 가진 사용자가 존재하지 않는 경우
//주어진 IP가 로그인할 수 없다는 기록을 만듭니다.
$select = mysql_query("SELECT ip FROM error WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (// "oshibka" 테이블에 사용자가 있는지 확인
$result52 = mysql_query("SELECT col FROM 오류 WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($result52);
$col = $myrow52 + 1;//실패한 다른 로그인 시도 추가
mysql_query("UPDATE 오류 SET col=$col,date=NOW() WHERE ip="$ip"");
}
또 다른(
mysql_query("INSERT INTO 오류(ip,date,col) VALUES("$ip",NOW(),"1")");
//지난 15분 동안 오류가 없으면 삽입 새로운 기록테이블 "오류"
}

exit("죄송합니다. 입력한 사용자 이름 또는 비밀번호가 올바르지 않습니다.");
}
또 다른(
nbsp; //비밀번호가 일치하면 사용자를 위한 세션을 시작합니다! 당신은 그를 축하할 수 있습니다, 그는 입력했습니다!
$_SESSION["비밀번호"]=$myrow["비밀번호"];
$_SESSION["로그인"]=$myrow["로그인"];
$_SESSION["id"]=$myrow["id"];//이 데이터는 매우 자주 사용되므로 로그인한 사용자가 "운반"합니다.

//다음으로 나중에 로그인할 수 있도록 데이터를 쿠키에 저장합니다.
//주목!!! 데이터는 암호화 없이 쿠키에 저장되므로 귀하의 재량에 따라 이 작업을 수행하십시오.
if ($_POST["저장"] == 1) (
//사용자가 나중에 로그인하기 위해 자신의 데이터를 저장하려는 경우 브라우저의 쿠키에 저장합니다.
setcookie("로그인", $_POST["로그인"], time()+9999999);
setcookie("비밀번호", $_POST["비밀번호"], time()+9999999);
}}
에코 " ";//사용자를 기본 페이지로 리디렉션하여 성공적인 로그인을 알립니다.
?>

5. 메인 페이지를 완전히 변경합니다. 사용자의 아바타를 표시하고, 계정에서 로그아웃할 수 있는 링크를 표시하고, 로그인할 때 암호를 기억하는 확인란을 추가해야 합니다.
인덱스.php

// 전체 절차는 세션에서 작동합니다. 사용자가 사이트에 있는 동안 사용자의 데이터가 저장됩니다. 페이지 맨 처음에 시작하는 것이 매우 중요합니다!!!
session_start();
include("bd.php");// bd.php 파일은 다른 사람과 같은 폴더에 있어야 합니다. 그렇지 않은 경우 경로를 변경하십시오.
if (!empty($_SESSION["로그인"]) 및 !empty($_SESSION["비밀번호"]))
{
//세션에 로그인과 비밀번호가 있으면 확인 후 아바타 추출
$login = $_SESSION["로그인"];
$password = $_SESSION["비밀번호"];
$result = mysql_query("SELECT id,avatar FROM users WHERE login="$login" AND password="$password"",$db);
$myrow = mysql_fetch_array($result);
//필요한 사용자 데이터 검색
}
?>


메인 페이지


메인 페이지

if (!isset($myrow["avatar"]) 또는 $myrow["avatar"]=="") (
//사용자의 데이터가 데이터베이스에서 검색되는지 확인합니다. 그렇지 않은 경우 로그인하지 않았거나 세션의 암호가 잘못된 것입니다. 로그인 창을 표시합니다. 그러나 입력한 사람들에게는 표시하지 않으며 더 이상 필요하지 않습니다.
인쇄<<


여기;

If (isset($_COOKIE["login"])) //COOKIE에 로그인 변수가 있는지. 사용자가 이전 로그인 중에 "기억하기" 확인란을 클릭한 경우여야 합니다.
{
//예인 경우 해당 값을 양식에 삽입합니다. 이 경우 사용자는 로그인이 필수 열에 이미 입력되어 있음이 표시됩니다.
echo "value="".$_COOKIE["login"]."">";
}

인쇄<<




여기;

If (isset($_COOKIE["password"]))//COOKIE에 비밀번호 변수가 있는지. 사용자가 이전 로그인 중에 "기억하기" 확인란을 클릭한 경우여야 합니다.
{
//예인 경우 해당 값을 양식에 삽입합니다. 이 경우 사용자는 비밀번호가 필수 열에 이미 입력되어 있음을 알 수 있습니다.
echo "value="".$_COOKIE["password"]."">";
}

인쇄<<



날 기억해.






등록하다



손님으로 로그인하셨습니다

여기;
}
또 다른
{
// 로그인에 성공하면 아래 별표 사이에 있는 모든 항목이 사용자에게 제공됩니다.

인쇄<<
$_SESSION(로그아웃)으로 로그인되었습니다.


이 링크는 등록된 사용자만 사용할 수 있습니다.

당신의 아바타:




여기;

//************************************************************************************
//로그인에 성공하면 별표 사이에 있는 모든 항목이 사용자에게 제공됩니다.
}
?>



6. 로그인한 사용자가 로그아웃할 수 있도록 하기 위해 필요합니다. ~에 홈페이지종료 링크가 이미 있습니다. 하지만 이 파일은 아직 존재하지 않습니다. 그래서 생성하자 새로운 파일 exit.php코드:

session_start();
if (empty($_SESSION["login"]) 또는 empty($_SESSION["password"]))
{
//로그인 및 비밀번호가 있는 세션이 없으면 이 파일은 로그인되지 않은 사용자가 액세스합니다. 그는 여기에 속하지 않습니다. 오류 메시지 발행, 스크립트 중지
종료("이 페이지에 대한 액세스는 등록된 사용자에게만 허용됩니다. 등록된 경우 사용자 이름과 비밀번호를 사용하여 사이트에 들어가십시오.
메인 페이지");
}

unset($_SESSION["비밀번호"]);
unset($_SESSION["로그인"]);
unset($_SESSION["id"]);// 세션에서 변수 삭제
출구(" ");
// 사용자를 메인 페이지로 보냅니다.
?>

좋아 이제 다 끝났어! 건강에 사용! 행운을 빌어요!

브라우저에서 JavaScript가 차단되었습니다. 이 사이트가 작동하려면 JavaScript를 허용하십시오!

완전 전역 배열 $_SERVER

배열하려면 $_서버 PHP 인터프리터는 서버에서 받은 변수를 넣습니다. 이러한 변수가 없으면 웹 응용 프로그램에 대한 완전한 지원을 구성하기 어렵습니다. 다음은 초전역 배열의 가장 중요한 요소에 대한 설명입니다. $_서버.

논평

  • 보다 전체 목록$_SERVER 배열 요소
  • 배열 덤프를 인쇄하는 print_r() 함수를 사용하거나 PHP 인터프리터에 대한 정보를 표시하는 phpinfo() 함수를 사용할 수 있습니다.

    배열( => on => 200 => on => htmlweb.ru => https => 443 => 닫기 => Mozilla/5.0(호환 가능; 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(데비안) 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 => [이메일 보호]=>.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"] 요소는 서버의 루트 디렉터리에 대한 경로를 포함하며 스크립트가 가상 호스트에서 실행되는 경우 이 요소는 가상 호스트의 루트 디렉터리에 대한 경로를 지정합니다. 저것들. httpd.conf 구성 파일에서 가상 호스트에는 "D:/main"으로 설정된 DocumentRoot 지시문이 있고 $_SERVER["DOCUMENT_ROOT"] 요소에는 "D:main" 값이 포함됩니다.

    $_서버[" REMOTE_ADDR"]

    $_SERVER["REMOTE_ADDR"] 요소에는 클라이언트의 IP 주소가 포함됩니다. 로컬 컴퓨터에서 테스트할 때 이 주소는 127.0.0.1입니다. 그러나 네트워크에서 테스트할 때 변수는 클라이언트의 IP 주소 또는 클라이언트가 서버에 도달한 마지막 프록시 서버를 반환합니다. 클라이언트가 프록시 서버를 사용하는 경우 getenv() 함수를 사용하여 값을 얻을 수 있는 HTTP_X_FORWARDED_FOR 환경 변수를 사용하여 해당 IP 주소를 찾을 수 있습니다.

    논평

    프록시 서버는 트래픽 압축, 데이터 인코딩, 모바일 장치 적응 등 특수한 유형의 서비스를 제공하는 특수 중간 서버입니다. 많은 프록시 서버 중에는 클라이언트의 실제 IP 주소를 숨길 수 있는 소위 익명 프록시 서버가 있으며 이러한 서버는 HTTP_X_FORWARDED_FOR 환경 변수를 반환하지 않습니다.

    환경 변수 검색 HTTP_X_FORWARDED_FOR

    echo @getenv(HTTP_X_FORWARDED_FOR);

    $_서버[" SCRIPT_FILENAME"]

    $_SERVER["SCRIPT_FILENAME"] 요소에는 드라이브의 루트에서 파일에 대한 절대 경로가 포함됩니다. 따라서 서버가 Windows 운영 체제에서 실행 중인 경우 이러한 경로는 다음과 같습니다. "d:main estindex.php", 즉 경로는 디스크에서 지정되며 UNIX와 같은 운영 체제에서 경로는 루트 디렉토리 /에서 지정됩니다(예: "/var/share/www/test/index.php").

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

    $_서버[" 서버 이름"]

    $_SERVER["SERVER_NAME"] 요소에는 일반적으로 서버에서 호스팅되는 사이트의 도메인 이름과 일치하는 서버 이름이 포함됩니다. 예를 들어,

    $_SERVER["SERVER_NAME"] 요소의 내용은 종종 $_SERVER["HTTP_HOST"] 요소의 내용과 동일합니다. 서버 이름 외에도 $_SERVER superglobal 배열을 사용하면 서버 IP 주소, 수신 포트, 설치된 웹 서버 및 HTTP 프로토콜 버전과 같은 여러 서버 매개 변수를 찾을 수 있습니다. 이 정보는 각각 $_SERVER["SERVER_ADDR"], $_SERVER["SERVER_PORT"], $_SERVER["SERVER_SOFTWARE"] 및 $_SERVER["SERVER_PROTOCOL"] 요소에 배치됩니다. 다음은 이러한 요소를 사용하는 예입니다.

    $_SERVER 배열의 요소 사용

    echo "서버 이름은 ".$_SERVER["SERVER_NAME"]입니다."
    "; echo "서버 IP 주소는 ".$_SERVER["SERVER_ADDR"]입니다."
    "; echo "서버 포트는 ".$_SERVER["SERVER_PORT"]입니다."
    "; echo "웹 서버 - ".$_SERVER["SERVER_SOFTWARE"]."
    "; echo "HTTP 프로토콜 버전은 ".$_SERVER["SERVER_PROTOCOL"]입니다."
    ";

    서버 이름 - 사이트
    서버 IP 주소 - 185.12.92.137
    서버 포트 - 80
    웹 서버 - Apache/2.4.25(Debian) mpm-itk/2.4.7-04 OpenSSL/1.0.2l
    HTTP 프로토콜 버전 - HTTP/1.0

    $_서버[" 요청_메소드"]

    $_SERVER["REQUEST_METHOD"] 요소에는 스크립트를 호출하는 데 사용되는 요청 메서드(GET 또는 POST)가 포함되어 있습니다.

    echo $_SERVER["REQUEST_METHOD"];

    $_서버[" QUERY_STRING"]

    $_SERVER["QUERY_STRING"] 요소는 쿼리 문자열이 주소인 경우 스크립트에 전달된 매개변수를 포함합니다.

    예를 들어 다음을 참조할 때:
    $_SERVER["QUERY_STRING"] 요소는 "?" 기호 뒤의 모든 텍스트를 포함합니다.

    echo $_SERVER["QUERY_STRING"];

    id=1&test=습식&id_theme=512

    $_서버[" PHP_셀프"]

    $_SERVER["PHP_SELF"] 요소는 가상 호스트의 루트 디렉토리에서 시작하는 스크립트 이름을 포함합니다. 쿼리 문자열이 주소인 경우 http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 그러면 $_SERVER["PHP_SELF"] 요소에 조각이 포함됩니다. "/테스트/index.php". 일반적으로 동일한 조각이 $_SERVER["SCRIPT_NAME"] 요소에 배치됩니다.

    $_서버[" REQUEST_URI"]

    $_SERVER["REQUEST_URI"] 요소에는 가상 호스트의 루트 디렉터리에서 시작하는 스크립트 이름과 매개 변수가 포함됩니다. 쿼리 문자열이 주소인 경우: http://www.mysite.ru/test/index.php?id=1&test=wet&id_theme=512 그러면 $_SERVER["REQUEST_URI"] 요소에 조각이 포함됩니다. "/test/index.php?id=1&test=wet&id_theme=512". 쿼리 문자열에 있는 스크립트의 전체 주소를 복원하려면 아래에 제시된 $_SERVER 배열의 요소 조합을 사용하면 됩니다.

    스크립트의 전체 URL

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

    관련 기사: