>  기사  >  백엔드 개발  >  PHP는 시간을 얻습니다 (시스템 시간과 네트워크 시간)

PHP는 시간을 얻습니다 (시스템 시간과 네트워크 시간)

WBOY
WBOY원래의
2016-07-29 09:15:002184검색

PHP를 사용할 때 표준시를 사용하는 경우가 많습니다. 2가지 방법이 있습니다.

첫 번째 방법:

서버 시간 가져오기

먼저 php.ini에서 date.timezone = PRC를 구성하거나 date_default_timezone_set("PRC");을 프로그램 페이지에 직접 추가한 다음 사용할 수 있습니다. 그것 time() 또는 date(''Y-m-d H:i:s)

두 번째 방법: 네트워크 시간 가져오기(인터넷에서 빌려온 것입니다. 원래 주소: http://justcoding.iteye.com/blog/843645)

항공권 사업의 예약 프로세스와 같은 상황이 있습니다. 이를 지원하려면 매우 신뢰할 수 있는 현재 시간이 필요합니다. 일부 서버에서는 시간 동기화를 위한 ntp(Network Time Protocol)가 활성화되어 있지 않으며 하드웨어 환경 등의 요인으로 인해 시간이 몇 분 정도 차이가 날 수 있습니다. , 같은 웹사이트에서 같은 시간을 사용하기 때문에 상황이 최대 몇 시간인 것은 이해할 수 있지만 때로는 이것이 나쁩니다. 인터넷에는 NTP 프로토콜을 사용하여 UTC 시간 수정을 특별히 제공하는 무료 타이밍 서버가 있습니다. 자세한 내용은 이전 링크를 참조하세요. 그가 제공하는 시간 오류는 약 20ms입니다(데이터 전송 중에 소비되는 시간은 말할 것도 없고 NTP는 오랫동안 이를 고려했습니다). 따라서 이 타이밍 서버를 통해 우리는 매우 안정적인 현재 시간을 얻을 수 있습니다.

이제 PHP를 사용하여 매우 정확한 UTC 시간을 얻는 방법을 살펴보겠습니다. NTP 프로토콜은 사용하기가 약간 어렵기 때문에 더 나은 프로토콜인 Daytime Protocol을 사용합니다. 이 프로토콜을 통해 텍스트 데이터를 직접 얻을 수 있어 처리가 더욱 편리해집니다. 우리는 time.nist.gov의 시간 서비스를 사용합니다. 코드는 매우 간단합니다. TCP를 사용하여 포트 13에 연결하면 됩니다.

<code><span>$fp</span>=fsockopen(<span>'time.nist.gov'</span>,<span>13</span>,<span>$errno</span>,<span>$errstr</span>,<span>90</span>);  
<span>echo</span> fread(<span>$fp</span>,<span>2010</span>);  </code>

얻은 데이터는 다음과 유사합니다.

<code>55545 10<span>-12-15</span> 21<span>:40</span><span>:47</span> 00 0 0 113<span>.1</span><span>UTC</span>(<span>NIST</span>) *  </code>

이 문자열의 모든 부분은 의미가 있습니다. 자세한 내용은 http://www.nist를 참조하세요. pml/div688/grp40/its.cfm에서 이제 중간 부분과 206.9 앞의 0만 고려합니다. 이는 서버의 상태를 나타내며 현재 시간을 신뢰할 수 있는지 여부도 반영합니다.

알겠습니다. 정확한 UTC 시간을 얻으려면 PHP를 사용하세요. 이 애플리케이션은 시간 요구 사항이 매우 엄격한 상황에서도 매우 유용합니다. 이제 문제가 해결되었습니다.

UTC 표준시를 알고 나면 남은 것은 세계 시간으로 변환하는 것뿐입니다. PHP를 참조하여 현지 시간대를 알아보세요

<code><span>$fp</span>=fsockopen(<span>'time.nist.gov'</span>,<span>13</span>,<span>$errno</span>,<span>$errstr</span>,<span>90</span>);  
<span>$ufc</span> = explode(<span>' '</span>,fread(<span>$fp</span>,date(<span>'Y'</span>)));  
<span>$date</span> = explode(<span>'-'</span>,<span>$ufc</span>[<span>1</span>]);  
<span>$processdate</span> = <span>$date</span>[<span>1</span>].<span>'-'</span>.<span>$date</span>[<span>2</span>].<span>'-'</span>. date(<span>'Y'</span>).<span>' '</span>.<span>$ufc</span>[<span>2</span>];  

<span>switch</span>(<span>$ufc</span>[<span>5</span>])  
{  
    <span>case</span><span>0</span>: <span>echo</span><span>'精确'</span>; <span>break</span>;  

    <span>case</span><span>1</span>: <span>echo</span><span>'误差:0-5s'</span>; <span>break</span>;    

    <span>case</span><span>2</span>: <span>echo</span><span>'误差: > 5s'</span>; <span>break</span>;  

    <span>default</span>: <span>echo</span><span>'硬件出错!'</span>; <span>break</span>;  
}  

<span>echo</span> gmttolocal(<span>$processdate</span>,<span>8</span>); <span>// 中国  </span><span><span>function</span><span>gmttolocal</span><span>(<span>$mydate</span>,<span>$mydifference</span>)</span>{</span><span>$datetime</span> = explode(<span>" "</span>,<span>$mydate</span>);  
    <span>$dateexplode</span> = explode(<span>"-"</span>,<span>$datetime</span>[<span>0</span>]);  
    <span>$timeexplode</span> = explode(<span>":"</span>,<span>$datetime</span>[<span>1</span>]);  
    <span>$unixdatetime</span> = mktime(<span>$timeexplode</span>[<span>0</span>]+<span>$mydifference</span>,<span>$timeexplode</span>[<span>1</span>],<span>0</span>,<span>$dateexplode</span>[<span>0</span>],<span>$dateexplode</span>[<span>1</span>],<span>$dateexplode</span>[<span>2</span>]);  
    <span>return</span> date(<span>"m/d/Y H:i:s"</span>,<span>$unixdatetime</span>);  
}  </code>

fsockopen 설명:

네트워크 소켓 링크를 엽니다.
구문: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
반환 값: 정수
기능 유형: 네트워크 시스템

내용 설명 현재 이 기능은 두 개의 소켓 데이터 흐름 인터페이스, 즉 인터넷용 AF_INET과 Unix용 AF_UNIX를 제공합니다. 인터넷 환경에서 사용될 때 매개변수 호스트 이름과 포트는 각각 URL과 포트 번호를 나타냅니다. UNIX에서는 IPC를 수행할 수 있으며, 호스트 이름 매개변수는 소켓에 대한 경로를 나타내며 포트는 0으로 구성됩니다. 생략된 시간 초과 옵션은 연결이 중단되기까지 걸리는 시간을 나타냅니다. 이 함수를 사용한 후에는 fgets(), fgetss(), fputs(), fclose() 및 feof()를 포함한 파일 함수에서 사용할 수 있도록 파일 포인터가 반환됩니다. errno 및 errstr 매개변수도 생략되었으며 주로 오류 처리에 사용됩니다. 이 함수를 사용하면 set_socket_blocking()을 사용하여 비차단 모드로 변환할 수 있는 차단 모드 처리를 사용하게 됩니다.

작성자: leedaning
이 글의 URL: http://blog.csdn.net/leedaning/article/details/48547123

위에는 관련 내용을 포함하여 PHP 취득 시간(시스템 시간, 네트워크 시간)을 소개하고 있으니, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.