Heim >Backend-Entwicklung >PHP-Tutorial >PHP erhält Zeit (Systemzeit und Netzwerkzeit)

PHP erhält Zeit (Systemzeit und Netzwerkzeit)

WBOY
WBOYOriginal
2016-07-29 09:15:002230Durchsuche

Bei der Verwendung von PHP verwenden Sie häufig die Standardzeit. Es gibt zwei Methoden.

Die erste Methode:

Erhalten Sie die Serverzeit

Konfigurieren Sie zuerst date.timezone = PRC in php.ini oder fügen Sie date_default_timezone_set("PRC"); direkt zur Programmseite hinzu und dann können Sie es verwenden it time() oder date(''Y-m-d H:i:s)

Zweite Methode: Holen Sie sich die Netzwerkzeit (diese ist aus dem Internet entlehnt, Originaladresse: http://justcoding.iteye.com/blog/843645)

Es gibt eine Situation wie diese, wie zum Beispiel den Buchungsprozess im Flugticketgeschäft. Wir benötigen eine sehr zuverlässige aktuelle Zeit, um sie zu unterstützen. Obwohl die Zeit der meisten Server sehr genau ist, verwenden wir time() ist zuverlässig, es kann jedoch zu Ungenauigkeiten kommen. Auf einigen Servern ist NTP (Network Time Protocol) für die Zeitsynchronisierung nicht aktiviert. Aufgrund von Faktoren wie der Hardwareumgebung kann der Zeitunterschied jedoch nur wenige Minuten betragen. , bis zu ein paar Stunden ist verständlich, da dieselbe Website dieselbe Zeit verwendet, aber manchmal ist das schlecht. Im Internet gibt es kostenlose Timing-Server, die mithilfe des NTP-Protokolls speziell eine UTC-Zeitkorrektur ermöglichen. Weitere Informationen finden Sie unter dem vorherigen Link. Der von ihm bereitgestellte Zeitfehler beträgt etwa 20 ms (ganz zu schweigen von der Zeit, die während der Datenübertragung verbraucht wird, NTP hat dies seit langem berücksichtigt), sodass wir über diesen Timing-Server eine sehr zuverlässige aktuelle Zeit erhalten können.

Schauen wir uns nun an, wie man mit PHP eine sehr genaue UTC-Zeit erhält. Da das NTP-Protokoll etwas schwierig zu verwenden ist, haben wir ein besseres Protokoll, nämlich das Daytime-Protokoll. Über dieses Protokoll können wir Textdaten direkt abrufen, die bequemer zu verarbeiten sind. Wir nutzen den Zeitdienst von time.nist.gov. Der Code ist sehr einfach, um eine Verbindung zu seinem Port 13 herzustellen.

<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>

Die erhaltenen Daten ähneln diesen:

<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>

Einzelheiten finden Sie unter: http://www.nist/. pml/div688/grp40/its.cfm, jetzt kümmern wir uns nur noch um den mittleren Teil und die 0 vor 206,9, die den Gesundheitszustand des Servers anzeigt und auch widerspiegelt, ob die aktuelle Zeit vertrauenswürdig ist.

OK, verwenden Sie PHP, um die genaue UTC-Zeit zu erhalten. Diese Anwendung ist immer noch sehr wertvoll, wenn die Zeitanforderungen sehr streng sind. An diesem Punkt ist mein Problem gelöst.

Nachdem Sie die UTC-Standardzeit kennen, müssen Sie sie nur noch in Weltzeit umrechnen. Siehe PHP, um die lokale Zeitzone zu erhalten

<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 Erklärung:

Öffnen Sie den Netzwerk-Socket-Link.
Syntax: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);
Rückgabewert: Ganzzahl
Funktionstyp: Netzwerksystem

Inhaltsbeschreibung Derzeit stellt diese Funktion zwei Socket-Datenflussschnittstellen bereit, nämlich AF_INET für Internet und AF_UNIX für Unix. Bei Verwendung im Kontext des Internets stellen die Parameter Hostname und Port die URL bzw. die Portnummer dar. Unter UNIX können Sie IPC ausführen, der Hostname-Parameter gibt den Pfad zum Socket an und der Port ist als 0 konfiguriert. Die weggelassene Timeout-Option gibt an, wie lange es dauern wird, bis die Verbindung unterbrochen wird. Nach Verwendung dieser Funktion wird der Dateizeiger zur Verwendung durch Dateifunktionen zurückgegeben, einschließlich fgets(), fgetss(), fputs(), fclose() und feof(). Die Parameter errno und errstr entfallen ebenfalls und dienen hauptsächlich der Fehlerbehandlung. Bei Verwendung dieser Funktion wird die Verarbeitung im Blockierungsmodus verwendet, die mit set_socket_blocking() in den nicht blockierenden Modus umgewandelt werden kann.

Autor: leedaning
URL dieses Artikels: http://blog.csdn.net/leedaning/article/details/48547123

Das Obige stellt die PHP-Erfassungszeit (Systemzeit und Netzwerkzeit) vor, einschließlich der relevanten Inhalte. Ich hoffe, dass es für Freunde hilfreich ist, die sich für PHP-Tutorials interessieren.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn