Optimering af thumbnail script
HejJeg har følgende script som løber alle underfoldere igennem og genererer et thumb af enhvert billedfil den støder på. Det virker fint, men problemet er at det foregår lidt langsomt. Derfor kommer 30sek grænsen (ved ikke om det er en generel tidsgrænse eller hva, men der kommer en fatal fejl når den har arbejdet i 30 sek).
Så derfor: Enten skal mit script optimeres, ellers skal der en work-around til 30 sek grænsen (web-hotel!).
//----------------------------------------------------
class CThumbnailGenerator
{
//--- Settings ---
var $m_thumbnailPrefix = "tn_";
var $m_thumbnailPath = "/thumbs/";
//--- Member variables ---
var $m_directories = array();
/************************************************
*
*/
function GenerateThumbnails($newWidth=80, $quality=75)
{
// List all directories in m_directories[]
$this->AquireDirectories();
// Iterate through each directory
foreach($this->m_directories as $dir)
{
// Open directory
if($hndDir = opendir($dir))
{
// Loop through all files in directory
while($file = readdir($hndDir))
{
$dst_file = $dir."/".$this->m_thumbnailPath.$this->m_thumbnailPrefix.$file;
if(!file_exists($dst_file))
{
// Get extension of file
$extension = substr($file, -4);
// Check for valid image file
if(($extension == ".JPG") || ($extension == ".jpg") || ($extension == ".gif") || ($extension == ".png") )
{
// Find the image size of current imagefile
if(($imginfo = @getimagesize($dir."/".$file)) == NULL){
return false;
}
// height/width
$srcWidth = $imginfo[0];
$srcHeight = $imginfo[1];
$ratioWidth = $srcWidth/$newWidth;
$ratioHeight = 0;
$destWidth = $newWidth;
$destHeight = $srcHeight / $ratioWidth;
$src_img = imagecreatefromjpeg($dir."/".$file);
$dst_img = imagecreatetruecolor($destWidth, $destHeight);
ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $destWidth, (int)$destHeight, $srcWidth, $srcHeight);
imagejpeg($dst_img, $dst_file, $quality);
imagedestroy($src_img);
imagedestroy($dst_img);
}
}
}
}
closedir($hndDir);
}
}
/************************************************
* Searches through a directory and lists any
* subdirectories in an array
*/
function AquireDirectories()
{
// Open directory
if( $hndDir = opendir("./") )
{
// Loop through all files
while($curDir = readdir($hndDir))
{
// Select only directories
if(is_dir($curDir)){
// Deselect toplevel dirs
if($curDir != "." && $curDir != ".."){
$this->m_directories[] = $curDir;
}
}
}
// Close directory
closedir($hndDir);
}
}
} //end class 'CThumbnailGenerator'