Categories
MySQL PHP

Converting IP addresses to sortable form in MySQL & PHP

IP addresses can't readily be sorted numerically because they are strings and the periods in the dotted-quad format common to IP addresses confuses things.  For instance, in a sorted list, 143.16.20.11 will sort before 23.45.1.78 even though what you really want is to sort by the first octet (23 & 143), then by the second octed (16 & 45) and so on.

PHP and MySQL provide functions to convert IP addresses to sortable format.

MySQL

Two functions are provided for use in MySQL query.  When your IP addresses are stored in a database, you can pull them ready to sort.

INET_ATON() Returns the numeric value of an IP address
INET_NTOA() Returns the IP address converted from a numeric value

Remember that if you need both representations you can pull the value twice in the same query, i.e.

SELECT ip AS ip_dotted_quat,INET_ATON(ip) as ip_sortable FROM mytable

This provides a clean set of data for your PHP or other scripting code to work with.

PHP

You have similar options in PHP.

ip2long("127.0.0.1") converts the IP to a long integer.

long2ip() converts the long integer back to a dotted-quad IP address.

The online PHP manual suggests using the two in combination to validate an IP as shown here

<?php
// make sure IPs are valid. also converts a non-complete IP into
// a proper dotted quad as explained below.
$ip = long2ip(ip2long("127.0.0.1")); // "127.0.0.1"
$ip = long2ip(ip2long("10.0.0")); // "10.0.0.0"
$ip = long2ip(ip2long("10.0.256")); // "10.0.1.0"
?>
Categories
Operating Systems

Using Remote Desktop Connection

Jake Ludington has written a great article on using Remote Desktop at this URL.  This Windows utility allows you to connect to your desktop from anywhere on the Internet.  Configured properly, it is quite secure.

http://www.jakeludington.com/ask_jake/20051122_how_to_use_remote_desktop_connection_rdc.html

Categories
WordPress

WordPress Themes Uncluttered

For all its many merits, WordPress is weighed down by themes that are bloated and overdone, like 20th century web pages with tiresome animated graphics and far too many fonts.

Here is a list of themes that get it, letting the content take centre stage.  This list will grow over time.

Categories
PHP

Converting row attributes to variables

When you read a row from your dataset and want to work with it, like building table rows, it can be hard to write, debug and maintain your code using the conventional syntax that requires you to move in and out of a quoted string, inserting elements from the row array like this;

while ($row = mysql_fetch_assoc($result)) {
// work with the data from your row
echo "<tr><td>".row['name']."</td><td>".row['address']."</td></tr>";
}

It's a lot easier to do this if you convert your row elements to simple variables which can be placed directly in the quoted string, like this;

[sourcecode language="php"]
while ($row = mysql_fetch_assoc($result)) {
// create a variable for each attribute
foreach($row as $var => $value){
$$var = $value;
}

// now work with the data from your row
echo "

$name $address

";
}
[/sourcecode]

Your variables are created with the name of the table attribute, thus $row['address'] becomes $address.

The benefits of this second approach would far outweigh the processing cost of converting the row to simple variables unless you're working with a very high volume site where processor cycles are a significant issue.  In that case, this simplified method would serve you well during the development phase, switching to row elements just before final testing.

Categories
PHP

Setting a time zone offset in PHP

If your server is in a different time zone than your operations or your user-base, you're going to face some confusion when you use time formats to display things like time last updated, or post times.

The way to resolve this is to use the putenv() function.

[sourcecode language='php']
putenv("TZ=US/Eastern");
[/sourcecode]

To see this in action, run the following bit of code on one of your pages:

[sourcecode language='php']
echo "Original Time: ". date("h:i:s")."\n";
putenv("TZ=US/Eastern");
echo "Adjusted Time: ". date("h:i:s")."\n";
[/sourcecode]

I found a good listing of the time zones at http://www.theprojects.org/dev/zone.txt.

This is a good thing to put in the include that provides the opening page structure for your site.