Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Recommended Posts

Posted

Hello

 

I just installed OTF_Auto Thumb.

 

The problem is that no pictures are coming when the file name of the picture contains the '+' sign.

 

I know that it would be better to not use this sign in file name but I really need it.

 

Do you have any idea how to modify the following code to make it accepting '+' sign in my pictures names ?

 

It will be very helpfull for me.

 

Thanks for your help

 

Florent

 

 

<?php
// This is "On the Fly Thumbnailer with Caching Option" by Pallieter Koopmans.
// Based on Marcello Colaruotolo (1.5.1) which builds upon Nathan Welch (1.5)
// and Roberto Ghizzi. With improvements by @Quest WebDesign, [url="http://atQuest.nl/"]http://atQuest.nl/[/url],
// Martijn Loeffen (browser-caching and thumbnail-cache-dir) and Richard Burford
// aka psynaptic (admin control and documentation)
//
// Scales product images dynamically, resulting in smaller file sizes, and keeps
// proper image ratio.
//
// Used in conjunction with modified tep_image in html_output.php (see: readme.html).

// get config values from the database
require('includes/configure.php'); // include server parameters
$server = DB_SERVER;
$username = DB_SERVER_USERNAME;
$password = DB_SERVER_PASSWORD;
$database = DB_DATABASE;
$connect=@mysql_connect($server,$username,$password) or http_headers('','Error,Database Connection');
@mysql_select_db($database,$connect) or http_headers('','Error,Database Connection');
$query="select configuration_key as cfgKey, configuration_value as cfgValue from configuration where configuration_group_id='100'";
$output=@mysql_query($query,$connect) or http_headers('','Error,Database Connection');
while ($row = @mysql_fetch_array($output)) {define($row['cfgKey'], $row['cfgValue']);}

// CONFIGURATION SETTINGS
//
// Server cache directory. Set the value below to true to generate resampled thumbnails
// resulting in smoother-looking images. Not supported in GD ver. < 2.01
$use_resampling = true; if (THUMBNAIL_USE_RESAMPLING === 'false') {$use_resampling = false;}
//
// Create True Color Thumbnails? Better quality overall but set to false if you
// have GD version < 2.01 or if creating transparent thumbnails.
$use_truecolor = true; if (THUMBNAIL_TRUE_COLOUR === 'false') {$use_truecolor = false;}
//
// Output GIFs as JPEGS? Set this option to true if you have GD version > 1.6
// and want to output GIF thumbnails as JPGs instead of GIFs or PNGs. Note that your
// GIF transparencies will not be retained in the thumbnail if you output them
// as JPGs. If you have GD Library < 1.6 with GIF create support, GIFs will
// be output as GIFs. Set the "matte" color below if setting this option to true.
$gif_as_jpeg = false; if (THUMBNAIL_OUTPUT_JPEG === 'true') {$gif_as_jpeg = true;}
//
// Cache Images on the server? Set to true if you want to save requested thumbnails
// on disk. This will add to disk space but will save your processor from having to
// create the thumbnail for every visitor.
$tn_server_cache = true; if (THUMBNAIL_CACHE_SERVER === 'false') {$tn_server_cache = false;}
//
// Thumbnail Path. If server-caching is enabled, specify a sub-directory
// where the thumbnails should be kept. Use '' for the default images-directory,
// which is /catalog/images/
// Note: Make sure this path actually exists as a subdirectory and is writeable!
$tn_path = THUMBNAIL_PATH; // The default is 'thumbnails/', should be chmod 777
//
// Cache Images in Browser-Cache? Set to true if you want browsers to be able to
// cache viewed thumbnails in their own cache. This will save bandwidth for every
// visitor that views the same thumbnail again. The default is true
$tn_browser_cache = true; if (THUMBNAIL_CACHE_BROWSER === 'false') {$tn_browser_cache = false;}
//
// Send a 404 http response when an image is not found
// If set to false, will show a small error-image (as in version < 2.0.0)
$use404 = true; // The default is true
//
// Define RGB Color Value for background matte color if outputting GIFs as JPEGs
// Example: white is r=255, b=255, g=255; black is r=0, b=0, g=0; red is r=255, b=0, g=0;
$tn_colours = explode(",", THUMBNAIL_BACKGROUND_MATTE);
$r = $tn_colours[0]; $g = $tn_colours[1]; $b = $tn_colours[2];
//
// Allow the creation of thumbnail images that are larger than the original images:
$allow_larger = false; if (THUMBNAIL_ALLOW_LARGER === 'true') {$allow_larger = true;}
//
// If allow_larger is set to false, you can opt to output the original image:
// Better leave it true if you want pixel_trans_* to work as expected
$show_original = true; if (THUMBNAIL_SHOW_ORIGINAL == 'false') {$show_original = false;}
//
// Set jpeg compression quality for resampled images.
$jpeg_quality=THUMBNAIL_JPEG_COMPRESSION; // The default is 100.
// END CONFIGURATION SETTINGS

// Note: In order to manually debug this script, you might want to comment
// some header() lines -- otherwise no output is shown.

// reverse strrchr(), taken from [url="http://nl2.php.net/manual/en/function.strrchr.php"]http://nl2.php.net/manual/en/function.strrchr.php[/url]
function reverse_strrchr($haystack, $needle)
{
return strrpos($haystack, $needle) ? substr($haystack, 0, strrpos($haystack, $needle) +1 ) : false;
}

function modify_tn_path($file)
{
global $tn_path;

if ($tn_path=='') return $file;
else{
	// append the thumbnail-path to the path
	$pathSep = "/";	//$pathSep = strstr(PHP_OS, "WIN") ? "\\" : "/";;
	$path = reverse_strrchr($file,$pathSep);
	error_reporting(E_ALL);
	if ($path===false) return $tn_path . $file;
	else return str_replace($path,$path . $tn_path,$file);
}
}

function http_headers($file='')
{
//
// This function supports the use of browser-caching (optional)
//
// A 304 (Not Modified) will be sent when the thumbnail has not changed
//       since the time it was last cached by the client
// A 200 (OK) will be sent when the thumbnail was not cached by the client
//       or when the thumbnail was cached but changed afterwards
// A 404 (Not Found) will be sent when the thumbnail is not found (optional)
global $use404, $tn_browser_cache;

if (isset($_SERVER["SERVER_PROTOCOL"]) && $_SERVER["SERVER_PROTOCOL"] == "HTTP/1.1")
	$httpProtocol = "HTTP/1.1";
else
	$httpProtocol = "HTTP/1.0";

if (file_exists($file))
{

	if (isset ($_SERVER["HTTP_CACHE_CONTROL"])) {
		$tn_browser_cache = strtolower($_SERVER["HTTP_CACHE_CONTROL"]) == "no-cache" ? false : $tn_browser_cache ;
	}

	//Build our entity tag, which is "inode-lastmodtime-filesize"
	$lastModified = filemtime($file);
	$lastModifiedGMT = $lastModified - date('Z');
	$lastModifiedHttpFormat = gmstrftime("%a, %d %b %Y %T %Z", $lastModified);
	// Don't use inode in eTag when you have multiple webservers, instead I use a dummy value (1fa44b7)
	$eTag = '"1fa44b7-' . dechex(filesize($file)) . "-" . dechex($lastModifiedGMT) . '"';

	if ($tn_browser_cache){

		$lastModifiedFromHttp = "xxx";
		if (isset ($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
			$lastModifiedFromHttp = ($_SERVER["HTTP_IF_MODIFIED_SINCE"] === "") ? "xxx" : $_SERVER["HTTP_IF_MODIFIED_SINCE"] ;
		}

		// Read sent eTag by browser
		$foundETag = "";
		if (isset ($_SERVER["HTTP_IF_NONE_MATCH"])) {
			$foundETag = stripslashes($_SERVER["HTTP_IF_NONE_MATCH"]);
		}

		// Last Modification Time
		if ($lastModifiedFromHttp == $lastModifiedHttpFormat) {
			$sameLastModified = true;
		}
		elseif (strpos($lastModifiedFromHttp,$lastModifiedHttpFormat) !== false){
			$sameLastModified = true;
		}
		else {
			$sameLastModified = false;
		}

		if (($eTag == $foundETag) && $sameLastModified){
			// same eTag and Last Modification Time (e.g. with Firefox)
			$is304 = true;
		}
		else
			// no eTag supplied, but Last Modification Time is unchanged (e.g. with IE 6.0)
		$is304 = (($foundETag == "") && $sameLastModified);

		if ($is304)
		{
			//
			// They already have an up to date copy so tell them
			if ($lastModifiedGMT > 946080000) {        // 946080000 = Dec 24, 1999 4PM
				// only send if valid eTag
				header("ETag: " . $eTag);
			}
			header("Status: 304 Not Modified");
			header($httpProtocol . " 304 Not Modified");
			header("Connection: close");
			exit();
		}
	}

	//
	// We have to send them the whole page
	header('Pragma: ');
	header('Expires: ');
	if ($tn_browser_cache){
		if ($lastModifiedGMT > 946080000) {        // 946080000 = Dec 24, 1999 4PM
			header('ETag: ' . $eTag);
		}
		header('Last-Modified: ' . $lastModifiedHttpFormat);
		header('Cache-Control: private');
	}
	else {
		header('Cache-Control: no-cache');
	}

}
else
{
	if ($use404)
	{
		//
		// send them a 404 http response header
		header("TEST404: TEST404");
		header("Status: 404 Not Found");
		header($httpProtocol . " 404 Not Found");
		exit();
	}
	else
	{
		//
		// show a custom error-image (non-cacheable by the browser)
		header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");				// Date in the past
		header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");	// Always modified
		header("Cache-Control: no-store, no-cache, must-revalidate");	// HTTP/1.1
		header("Cache-Control: post-check=0, pre-check=0", false);		// HTTP/1.1
		header("Pragma: no-cache");										// HTTP/1.0
		header('Content-type: image/jpeg');
		$src = imagecreate($_GET['w'], $_GET['h']);						// Create a blank image.
		$bgc = imagecolorallocate($src, 255, 255, 255);
		$tc  = imagecolorallocate($src, 0, 0, 0);
		imagefilledrectangle($src, 0, 0, $_GET['w'], $_GET['h'], $bgc);
		imagestring($src, 1, 5, 5, 'Error', $tc);
		imagejpeg($src, '', $jpeg_quality);
		imagedestroy($src);
		exit();
	}
}
}

// Get the size of the image:
$image = @getimagesize($_GET['img']);

// Check the input variables and decide what to do:
if (empty($image) || empty($_GET['w']) || empty($_GET['h']) || (empty($allow_larger) && ($_GET['w'] > $image[0] || $_GET['h'] > $image[1])))
{
if (empty($image) || empty($show_original))
{
	http_headers();
}
else
{
// 2Do: Return the original image w/o making a copy (as that is what we currently do):
// 	$_GET['w'] = $image[0];
// 	$_GET['h'] = $image[1];
}
}

// Create appropriate image header:
if ($image[2] == 2 || ($image[2] == 1 && $gif_as_jpeg))
{
header('Content-type: image/jpeg');
if ($tn_server_cache) $filename = modify_tn_path($_GET['img'] .'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.jpg');
}
elseif ($image[2] == 1 && function_exists('imagegif'))
{
header('Content-type: image/gif');
if ($tn_server_cache) $filename = modify_tn_path($_GET['img'] .'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.gif');
}
elseif ($image[2] == 3 || $image[2] == 1)
{
header('Content-type: image/png');
if ($tn_server_cache) $filename = modify_tn_path($_GET['img'] .'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.png');
}

// If you are required to set the full path for file_exists(), set this:
// $filename = '/your/path/to/catalog/'.$filename;

// Protect against visitors resizing images at will and eating up your server resources (only allows images up to 4x the original).
if ($_GET['w'] < $image[0] * 4 && $_GET['h'] < $image[1] * 4) {

if (file_exists($filename) && $tn_server_cache && filemtime($filename) > filemtime($_GET['img']))
{
// Output Cache Headers
http_headers($filename);

if ($image[2] == 2 || ($image[2] == 1 && $gif_as_jpeg))
{
	$src = imagecreatefromjpeg($filename);
	imagejpeg($src, '', $jpeg_quality);
}
elseif ($image[2] == 1 && function_exists('imagegif'))
{
	$src = imagecreatefromgif($filename);
	imagegif($src);
}
elseif ($image[2] == 3 || $image[2] == 1)
{
	$src = imagecreatefrompng($filename);
	imagepng($src);
}
else
{
	// Not an image or imagecreatefrom...-function does not exits.
	// Let's output an error
	http_headers();
}
}
else
{
// create thumbnail directory if not exist.
$tmp_path = str_replace(basename($filename), '', $filename);
if (is_dir($tmp_path) == false) mkdir($tmp_path);

// Create a new, empty image based on settings:
if (function_exists('imagecreatetruecolor') && $use_truecolor && ($image[2] == 2 || $image[2] == 3))
{
	$tmp_img = imagecreatetruecolor($_GET['w'],$_GET['h']);
}
else
{
	$tmp_img = imagecreate($_GET['w'],$_GET['h']);
}

$th_bg_color = imagecolorallocate($tmp_img, $r, $g, $B);

imagefill($tmp_img, 0, 0, $th_bg_color);
imagecolortransparent($tmp_img, $th_bg_color);

// Create the image to be scaled:
if ($image[2] == 2 && function_exists('imagecreatefromjpeg'))
{
	$src = imagecreatefromjpeg($_GET['img']);
}
elseif ($image[2] == 1 && function_exists('imagecreatefromgif'))
{
	$src = imagecreatefromgif($_GET['img']);
}
elseif (($image[2] == 3 || $image[2] == 1) && function_exists('imagecreatefrompng'))
{
	$src = imagecreatefrompng($_GET['img']);
}
else
{
	// Not an image or imagecreatefrom...-function does not exits.
	// Let's output an error
	http_headers();
}


// Scale the image based on settings:
if (empty($allow_larger) && ($_GET['w'] > $image[0] || $_GET['h'] > $image[1]))
{
	// existing image is smaller than thumbnail so create the thumbnail
	// with the smaller original image centred on it
	$dx = ($_GET['w'] - $image[0]) / 2;
	$dy = ($_GET['h'] - $image[1]) / 2;
	imagecopy($tmp_img, $src, $dx, $dy, 0, 0, $image[0], $image[1]);
	} else
		if (function_exists('imagecopyresampled') && $use_resampling)
	{
		imagecopyresampled($tmp_img, $src, 0, 0, 0, 0, $_GET['w'], $_GET['h'], $image[0], $image[1]);
	}
	else
	{
		imagecopyresized($tmp_img, $src, 0, 0, 0, 0, $_GET['w'], $_GET['h'], $image[0], $image[1]);
	}

	// Output the image:
	if ($image[2] == 2 || ($image[2] == 1 && $gif_as_jpeg))
	{
		if ($tn_server_cache)
		{
			$thumbnail = modify_tn_path($_GET['img'].'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.jpg');
			imagejpeg($tmp_img,$thumbnail, $jpeg_quality);
			http_headers($thumbnail);
		}
		else
		{
			http_headers($_GET['img']);
		}
		imagejpeg($tmp_img, '', $jpeg_quality);
	}
	elseif ($image[2] == 1 && function_exists('imagegif'))
	{
		if ($tn_server_cache)
		{
			$thumbnail = modify_tn_path($_GET['img'].'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.gif');
			imagegif($tmp_img,$thumbnail);
			http_headers($thumbnail);
		}
		else
		{
			http_headers($_GET['img']);
		}
		imagegif($tmp_img);
	}
	elseif ($image[2] == 3 || $image[2] == 1)
	{
		if ($tn_server_cache)
		{
			$thumbnail = modify_tn_path($_GET['img'].'.thumb_'.$_GET['w'].'x'.$_GET['h'].'.png');
			imagepng($tmp_img,$thumbnail);
			http_headers($thumbnail);
		}
		else
		{
			http_headers($_GET['img']);
		}
		imagepng($tmp_img);
	}
	else
	{
		// Not an image or image...-function not supported
		// Let's output an error:
		http_headers();
	}

	// Clear the image from memory:
	imagedestroy($src);
	imagedestroy($tmp_img);
}
}
?>

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...