24 mars, 2010

PHP/MySQL: Konvertera från datetime till sekunder från epoch

English translation:MySQL and PHP Convert datetime to seconds

Undrar du hur man kan omvandla data från en kolumn i MySQL med datetime som datatyp till antalet sekunder från "epoch" (1970-01-01)? Det undrade jag och nu tänker jag dela med mig av lösningen.

Jag gillar att programmera med PHP och utveckla dynamiska hemsidor tillsammans med MySQL som backbone. Just nu för en liten stund sedan letade jag efter en lösning för att omvandla datetime till sekunder för att enklare formatera datum med PHP funktionen date().

Notis:
Jag vet att det finns utmärkta lösningar inbyggda i MySQL men i koden jag använder nu går det inte att lösa på det sättet. Det datum som returneras från databasen är alltid i formatet yy-mm-dd tt:mm:ss

<?php
echo strtotime('2010-03-24 12:26:00') .'<br/>';
echo strtotime('2010-03-24 12:27:00') .'<br/>';

// Resultat
// 1269458760
// 1269458820

// Verifiera att det fungerar
echo date('Y-m-d H:i:s', strtotime('2010-03-24 12:27:00') ) .'<br/>';

// Resultat
// 2010-03-24 12:27:00

// Ett annat format
echo date('l F j, Y, G:i', strtotime('2010-03-24 12:27:00'));

// Resultat
// Wednesday March 24, 2010, 12:27
?>

Men för er som verkligen vill lösa det på MySQL-viset kommer här ett exempel:

// Skriver ut 1269458820
SELECT UNIX_TIMESTAMP('2010-03-24 12:27:00')

Ganska enkelt eller hur? Vill ni veta mer om funktionen strtotime() [1] i PHP så hittar ni information i den grymma dokumentationen på www.php.net [2]

Lycka till med programmeringen

Referenser
[1] www.php.net/manual/en/function.strtotime.php
[2] www.php.net

10 mars, 2010

Nätverk: ARP - Address Resolution Protocol i datanätverk

Hej!

För er som undrar över hur kommunikation fungerar i ett nätverk mellan två enheter (t.ex två datorer) genom en switch och router kan ni läsa mitt svar här nedanför som jag gav till en utländsk student vid Halmstad högskola som jag hade i kursen IP-telefoni och trådlösa nätverk när jag var kursansvarig. Texten är på engelska. Om jag får in några kommentarer som vill ha en svensk översättning så fixar jag det.

Studenten frågade efter hur en PC känner till sin destinations IP-adress och hur datapaketen tar sig dit, utan att man specificerar subnätmasken i ICMP (ping) meddelandet. Allt har att göra med protokollet ARP - Address Resolution Protocol.

Till min hjälp har jag använt programmet Packet Tracer 5.2 för att felsöka kommunikationen. Jag har även bifogat en simpel topologi över nätverket.

--------------------------


(Klicka på bilden för att förstora)
--------------------------

Question: How does a PC know about the destination IP-address and how to get to it without sending the subnetmask in the ICMP (ping) message?

Answer:
Hi,
I tried a scenario in Packet Tracer just now and here it how it works.
  1. I choose to ping from 192.168.1.10 to 192.168.1.11
  2. ARP constructs a request for target IP-address 192.168.1.11, and sets the broadcast MAC-address to FF:FF:FF:FF:FF:FF
  3. ARP encapsulates PDU into Ethernet frame
  4. Frame goes to switch on the wire
  5. Switch receives frame on port fa0/2
  6. Switch processes frame up to OSi layer 2 "Data link"
  7. It is a broadcast (FF:FF:FF:FF:FF:FF), send out on all switch ports except the receiving port, so this is sending packets to router (192.168.1.1) and PC (192.168.1.11)
  8. Packets are sent out fa0/1 and fa0/3
  9. Router receives ARP request on port fa0/0
  10. The ARP request's target IP address does not match the receiving port's IP address, (192.168.1.11 is not matching routers IP of 192.168.1.1)
  11. The ARP process on the router checks the routing table whether the requested IP address is reachable, and the IP-address is reachable on source port fa0/0

    Router# show ip route
    C 192.168.1.0/24 is directly connected, FastEthernet0/0
    C 192.168.2.0/24 is directly connected, FastEthernet0/1

  12. ARP table on router is updated with souce IP-address (192.168.1.10) and MAC-address
  13. Router discards ARP-request
  14. Now the destination PC receives the ARP request on its ethernet port from the switch as a broadcast (FF:FF:FF:FF:FF:FF)
  15. The ARP request's target IP address matches the receiving port's IP address. (192.168.1.11 is matching 192.168.1.11)
  16. ARP-process on destination PC updates the ARP-table.
  17. ARP-process on destination PC replies to source PC with source port MAC-address, and encapsulates PDU into ethernet frame.
  18. Switch port fa0/3 receives request and looks in its ARP-table.
  19. The frame source MAC-address was found in its ARP-table.
  20. This is a uniucast frame (from PC 192.168.1.11 to PC 192.168.1.10) so switch looks in ARP-table for destination MAC-address
  21. Switch is sending unicast reply out fa0/2 port
  22. PC 192.168.1.10 receives ARP-reply on ethernet port and does now know about the PC 192.168.1.11 MAC-address on OSI layer 2
  23. It saves the information (mapping) MAC-address to IP-address.
  24. PC 0 can now send an ICMP (ping) message to PC 1 using only IP-addresses on OSI layer 3 "Network".

Now, if the ping is going to IP-address 192.168.2.10, then the ICMP-message will reach the router (which MAC-address is also in PC A's ARP-table). The router will check the routing table for destination IP-address network, if it's reachable. It is reachable through port router's fa0/1 to network 192.168.2.0/24

Then the ARP-process will start all over again on the other side, so the router will ask the switch, which in turn will broadcast the ARP out all switchports except receiving port (fa0/1). The request is going out fa0/2 to PC 2 with IP 192.168.2.10 and the IP is correct. An ARP-reply is then sent back to the router. ICMP (ping) can now continue.

I really recommend you to test Packet Tracer to look at TCP/IP and ARP messages going. You can also debug DHCP and some other protocols.

-----------------------------

Innan jag svarade studenten på hans fråga, trodde jag att jag kunde ARP, men efter en djupdykning i protokollet fick jag mer kunskap. Nu vet jag mycket bättre själv hur kommunikationen i ett datanätverk går till. Visst kunde jag detta utantill när jag studerande CCNA vid högskolan och gymnasiet men det är alltid bra att fräscha upp minnet lite.

Lycka till alla

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.