Apache HTTP Logo

Avoiding URL Canonicalisation With mod_rewrite And Apache

22nd February 2008 - 3 minutes read time

URL canonicalisation is where you have a website with different URLs outputting the same content. When search engine spiders see all this content that is the same they can get confused as to what page to display in search engine result pages. The following URLs, although they are different, actually produce the same content.


http://www.example.com
http://example.com
http://www.example.com/
http://www.example.com/index.html

The way to solve this issue is to redirect any requests to a single page using mod_rewrite. Add a .htaccess file to your root directory and include the following line to turn on the engine.


RewriteEngine On

The following rule will redirect the www page to the non-www page.

WordPress Logo

Creating A Widget Proof Wordpress Theme

21st February 2008 - 5 minutes read time

Wordpress widgets are a way to customise the sidebar of your blog very easily and where included with the default Wordpress instillation from version 2.2 onwards. With a widgetised theme all you need to do to change the menu system on your blog is drag and drop features and edit some simple parameters like heading.

To include widgets on your blog you need a widget ready Wordpress theme. However, this isn't as easy as it sounds because only a small section of themes are widget enabled.

To make a widget enabled theme you can use any existing theme and just a few lines of code. First off, find the file called sidebar.php in your Wordpress theme directory. You might not have this file, but you are looking for the section of code that displays the navigation menu.

PHP Logo

Display Wordpress Feeds On Your Site With SimplePie

20th February 2008 - 2 minutes read time

You can display your latest Wordpress posts anywhere on your site by using an RSS reader called SimplePie and a few lines of code. SimplePie is a fast and efficient RSS reader, and it will also cache feeds to reduce the amount of processing time taken.

Download simple pie from the website and upload the simplepie.inc file to your web server. Next include the following section of code anywhere on your site that you want to display the latest post on.

PHP Logo

Force File Download With PHP

19th February 2008 - 4 minutes read time

When you supply files that web browsers can open they are usually opened inside the browser, rather than being downloaded. This can be annoying, especially where PDF documents are involved. You could supply the files in a compressed format in order to force users to download them, but this is also annoying as the user then has to uncompress the file.

You can force the web browser to supply the file as a download by using the header() function in PHP. The following little bit of code will take any filename and supply it as a download.


<?php
$file = $_GET['file'];
header('Content-type: octet/stream');
header('Content-disposition: attachment; filename='.$file.';');
header('Content-Length: '.filesize($file));
readfile($file);
exit;
?>

All you have to do is link to this script with the argument being the file name you want your users to be able to download.

JavaScript Logo

JavaScript Simple Loop Optimisation

18th February 2008 - 3 minutes read time

When writing JavaScript applications I normally write for loops like this.


for (var i = 0; i < elements.length; ++i) {
  // loop...
}

There isn't anything wrong with this, but it is not an efficient way of doing things. All it takes is a little knowledge of what the for loop does every time it runs. The loop can be split into three sections like this.

PHP Logo

Passing Values By Reference In PHP

16th February 2008 - 3 minutes read time

For most functions it is normal for have the function return the output of a calculation. With PHP it is also possible to pass values to the function by reference. A better way of saying this is rather than pass the value of the variable you pass a pointer to the variable itself. When you do this anything that you do to the variable inside the function is also done outside, so if you interact with the variable again it will contain a different value.

The ampersand (&) character is used in the parameters of the function to stipulate that a parameter will be passed by reference.

Here is an example of this at work.

PHP Logo

Recursive Directory Listing With PHP

15th February 2008 - 2 minutes read time

Use the following function to list the contents of one or more nested directories.

function recursive_directory($dirname,$maxdepth=10, $depth=0){
 if ($depth >= $maxdepth) {
  return false;
 }
 $subdirectories = array();
 $files = array();
 if (is_dir($dirname) && is_readable($dirname)) {
  $d = dir($dirname);
  while (false !== ($f = $d->read())) {
   $file = $d->path.'/'.$f;
   // skip . and ..
   if (('.'==$f) || ('..'==$f)) {
    continue;
   };
   if (is_dir($dirname.'/'.$f)) {
    array_push($subdirectories,$dirname.'/'.$f);
   } else {
    array_push($files,$dirname.'/'.$f);
   };
  };
  $d->close();
  foreach ($subdirectories as $subdirectory) {
    $files = array_merge($files, recursive_directory($subdirectory, $maxdepth, $depth+1));
  };
 }
 return $files;
}

Use this in the following way.

PHP Logo

PHP Headers Already Sent Error

14th February 2008 - 4 minutes read time

Try running the following PHP script.


<?php
 echo 'browser output';
 session_start();
?>

You will either see normal output or get the following error messages.

This is because when you try to start the session it adds items to the headers outputted by the browser, including the setting up of cookies. To stop this happening you need to ensure that the session_start() function call is put before any output from the browser. This is the case for all header modifying functions including set_cookie() and header().

PHP Logo

Custom Error Handling In PHP Using set_error_handler()

13th February 2008 - 4 minutes read time

The set_error_handler() function can be used in PHP to allow you to catch any run time errors and act accordingly. This function can take two parameters:

  • Error Handler : This a string which is the name of the function that will be called if an error is encountered.
  • Error Types (optional) : This is an optional parameter used to tell PHP on what error codes to act. This is the same error reporting setting.

The function that is defined in the function must have the following footprint as a minimum.


function handler($errno,$errstr)

You can also get a lot more information out by using other parameters.


function handler($errno,$errstr,$errfile,$errline,$errcontext)

Here is some code that will print two errors to screen with as much information as possible.

PHP Logo

Append One Array To Another In PHP

12th February 2008 - 3 minutes read time

Appending arrays in PHP can be done with the array_merge() function. The array will take any number of arrays as arguments and will return a single array. Here is an example using just two arrays.

$array1 = array('item1', 'item2');
$array2 = array('item3', 'item4');
$array3 = array_merge($array1, $array2);
print_r($array3);

Will print out.

Array
(
 [0] => item1
 [1] => item2
 [2] => item3
 [3] => item4
)

You can also create arrays using the array command inside the parameter list.