Archive for the ‘PHP’ Category

Daily Random PHP Book – 12/21/2008

Sunday, December 21st, 2008

Daily Random PHP Book – 12/20/2008

Saturday, December 20th, 2008

Daily Random PHP Book – 12/19/2008

Friday, December 19th, 2008

PHP File Listing Script

Tuesday, October 28th, 2008

I had a need for a script to read directories for users, listing only files and not sub-directories, so this is the script that ended up being what worked. One of the features was to exclude a few system files on the Linux file system that are present in directories and to list the last modified time so that the users uploading and downloading files could see the different timestamps to differentiate more recent files.

This script handled the uploading of files, after a user was logged into the system. Proper validation and security measures need to be taken before using a script such as this. This may include user logins, ip-restrictions or other measures.

The code explanation follows the code below:

Quick Code


<?php

//define the path
//using the "." sets it to the current path
//any relative or absolute path that the web
//server use can read with will work

$path = "."; 

//using the opendir function
$dir_handle = @opendir($path) or die("Unable to open files.");

echo "<h3>List of items.</h3><p>";

//running the while loop

echo "<ul>";
while ($file = readdir($dir_handle)) 
{
//remove . and .. from the list
   if($file!="." && $file!=".." && $file!=".htaccess")
   {  
       $modified = date("F d Y H:i:s", filectime($path."/".$file));
      echo "<li><a href='$path/$file'>$file</a>&nbsp;&nbsp;Last Modified: $modified</li>";
  }

}
echo "</ul>";
//closing the directory
closedir($dir_handle);
echo "</p>"
?> 
</div>

The script first sets up the directory path that we want to open, in this case I wanted to open the current path, so I used a period to signify the current working directory. Next, we open the directory using the opendir command passing in the $path variable. We have to loop through the entire directory to get all the files. **Note this script does not take in to account sub-directories.**

At this point, the script tests for the directories . and .. and also to not list the .htaccess file if it is present. Within the file check, we get the last modified date of the file, this is done by doing a date format on the filectime function, which accepts the path/filename combination. The script then simply adds each file to an unordered list, and makes each file name (represented by the $file variable) a link so that they can be clicked on to be viewed or downloaded.

The last important line of code closes the directory handle resource by calling the closedir function.

While simple, this script accomplished reading a directory of files and making a linked list of them. As I mentioned I had this was only presented to users who had successfully logged into the system, presenting them with a list of files they could easily download. It was created as a direct replace for an FTP system that was not working well for users – the entire package was a login control, the file listing control (presented here), a way for the user to upload files back and the automatic deletion of files that were older than a set time frame.

I will post about the other parts of the system in the future, and in the end, wrap it up with a complete user managed file transfer system.

PHP & ImageMagick Image Resize Script

Thursday, October 23rd, 2008

This simple script takes a source image, and up to two parameters to re-size the image using ImageMagick. This allows you to use a large source image that is suitable for a zoomed in view, and dynamically re-size it using the simple script which will make it fit the x,y constraints necessary for a site, and reduce the file size.

In testing the script, a sample PNG image with transparency was originally 500×500 pixels and 202.76kb in size. Using the script to set the x,y to 200×200 the file size was reduced to 44.73kb. The script could be easily extended to perform other ImageMagick functions, and to reduce the end result file size even more.

Quick Code


<?php
if(!extension_loaded('imagick'))
{
  dl('imagick.so');
}
$img = strip_tags($_GET['imagename']);
if(isset($_GET['size']))
{
  $size = strip_tags($_GET['size']);
}
else
{
  $size = 0;
}
if(isset($_GET['vsize']))
{
  $vsize = strip_tags($_GET['vsize']);
}
else
{
  $vsize = 0;
}

$image = new Imagick($img);
$image->thumbnailImage($size, $vsize);
header("Content-type: image/png");
print $image;
?>

Quick synopsis of the code: It first checks to make sure the imagick PHP extension is loaded, and if it is not, it will dynamically load the extension. It then checks for the URL parameter ‘imagename’ and runs a simple strip_tags to clean any extraneous attempts to send in other code with the image name. The script then does two checks for the size (horizontal) and vsize (vertical). If either is set, it will strip_tags on them and assign them to a variable for use.

The script then takes the sizes and instantiates a new Imagick object passing in the image name as set from the URL parameter. It then calls the thumbnailImage function of the Imagick library and passes in the $size and $vsize variables. We then set the header type to be image/png since we worked only with PNG images in this version, and finally print the results, which are contained in the $image object.

The nice thing about the script, is thumbnail image will take two parameters for the size, and if only one is set, it will auto-constrain the image (eg. 200, 0 it will autoscale the 0 axis). The other nice thing is we can check the type of image so that we output the same type so we can work with GIF, JPEG, and PNG among others.