Jump to content

Escaping a PHP variable


synritical

Recommended Posts

Hello!

 

I'm very new to PHP, and I'm sure this is a noob question - still, its got me stuck!

 

How would I best escape this properly?

 

$resizeObj = new resize('C:\xampp\htdocs\images_test\$file');

 

so that $file is parsed?

 

the whole script is as follows:

 

<?php
	// *** Include Nathan's class
	include("resize-class.php");	

	// Define the full path to your folder from root 
	$path = 'C:\xampp\htdocs\images_test'; 

	// Open the folder 
	$dir_handle = @opendir($path) or die("Unable to open $path"); 

    // Loop through the files 
    while ($file = readdir($dir_handle)) { 

    if($file == "." || $file == ".." || $file == "index.php" ) 

        continue; 

		// *** 1) Initialise / load image
		$resizeObj = new resize('C:\xampp\htdocs\images_test\$file');
		// *** 2) Resize image 
		$resizeObj -> resizeImage(100, 100, 'auto');
		// *** 3) Save image
		$resizeObj -> saveImage('C:\xampp\htdocs\images_test\$file', 90);

        echo "<a href=\"$file\">$file</a><br />"; 
	echo $path;

    } 
    // Close 
    closedir($dir_handle); 



?>

Link to comment
Share on other sites

Error is:

 

Warning: imagesx() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\resize-class.php on line 30

 

Warning: imagesy() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\resize-class.php on line 31

 

Warning: imagecopyresampled() expects parameter 2 to be resource, boolean given in C:\xampp\htdocs\resize-class.php on line 73

 

I'm guessing it has something to do with the class, which is

 

		Class resize
	{
		// *** Class variables
		private $image;
	    private $width;
	    private $height;
		private $imageResized;

		function __construct($fileName)
		{
			// *** Open up the file
			$this->image = $this->openImage($fileName);

		    // *** Get width and height
		    $this->width  = imagesx($this->image);
		    $this->height = imagesy($this->image);
		}

		## --------------------------------------------------------

		private function openImage($file)
		{
			// *** Get extension
			$extension = strtolower(strrchr($file, '.'));

			switch($extension)
			{
				case '.jpg':
				case '.jpeg':
					$img = @imagecreatefromjpeg($file);
					break;
				case '.gif':
					$img = @imagecreatefromgif($file);
					break;
				case '.png':
					$img = @imagecreatefrompng($file);
					break;
				default:
					$img = false;
					break;
			}
			return $img;
		}

		## --------------------------------------------------------

		public function resizeImage($newWidth, $newHeight, $option="auto")
		{

			$optionArray = $this->getDimensions($newWidth, $newHeight, $option);

			$optimalWidth  = $optionArray['optimalWidth'];
			$optimalHeight = $optionArray['optimalHeight'];


			$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
			imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);


			if ($option == 'crop') {
				$this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
			}
		}

		## --------------------------------------------------------

		private function getDimensions($newWidth, $newHeight, $option)
		{

		   switch ($option)
			{
				case 'exact':
					$optimalWidth = $newWidth;
					$optimalHeight= $newHeight;
					break;
				case 'portrait':
					$optimalWidth = $this->getSizeByFixedHeight($newHeight);
					$optimalHeight= $newHeight;
					break;
				case 'landscape':
					$optimalWidth = $newWidth;
					$optimalHeight= $this->getSizeByFixedWidth($newWidth);
					break;
				case 'auto':
					$optionArray = $this->getSizeByAuto($newWidth, $newHeight);
					$optimalWidth = $optionArray['optimalWidth'];
					$optimalHeight = $optionArray['optimalHeight'];
					break;
				case 'crop':
					$optionArray = $this->getOptimalCrop($newWidth, $newHeight);
					$optimalWidth = $optionArray['optimalWidth'];
					$optimalHeight = $optionArray['optimalHeight'];
					break;
			}
			return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
		}

		## --------------------------------------------------------

		private function getSizeByFixedHeight($newHeight)
		{
			$ratio = $this->width / $this->height;
			$newWidth = $newHeight * $ratio;
			return $newWidth;
		}

		private function getSizeByFixedWidth($newWidth)
		{
			$ratio = $this->height / $this->width;
			$newHeight = $newWidth * $ratio;
			return $newHeight;
		}

		private function getSizeByAuto($newWidth, $newHeight)
		{
			if ($this->height < $this->width)
			// *** Image to be resized is wider (landscape)
			{
				$optimalWidth = $newWidth;
				$optimalHeight= $this->getSizeByFixedWidth($newWidth);
			}
			elseif ($this->height > $this->width)
			// *** Image to be resized is taller (portrait)
			{
				$optimalWidth = $this->getSizeByFixedHeight($newHeight);
				$optimalHeight= $newHeight;
			}
			else
			// *** Image to be resizerd is a square
			{
				if ($newHeight < $newWidth) {
					$optimalWidth = $newWidth;
					$optimalHeight= $this->getSizeByFixedWidth($newWidth);
				} else if ($newHeight > $newWidth) {
					$optimalWidth = $this->getSizeByFixedHeight($newHeight);
					$optimalHeight= $newHeight;
				} else {
					// *** Sqaure being resized to a square
					$optimalWidth = $newWidth;
					$optimalHeight= $newHeight;
				}
			}

			return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
		}

		## --------------------------------------------------------

		private function getOptimalCrop($newWidth, $newHeight)
		{

			$heightRatio = $this->height / $newHeight;
			$widthRatio  = $this->width /  $newWidth;

			if ($heightRatio < $widthRatio) {
				$optimalRatio = $heightRatio;
			} else {
				$optimalRatio = $widthRatio;
			}

			$optimalHeight = $this->height / $optimalRatio;
			$optimalWidth  = $this->width  / $optimalRatio;

			return array('optimalWidth' => $optimalWidth, 'optimalHeight' => $optimalHeight);
		}

		## --------------------------------------------------------

		private function crop($optimalWidth, $optimalHeight, $newWidth, $newHeight)
		{
			$cropStartX = ( $optimalWidth / 2) - ( $newWidth /2 );
			$cropStartY = ( $optimalHeight/ 2) - ( $newHeight/2 );

			$crop = $this->imageResized;

			$this->imageResized = imagecreatetruecolor($newWidth , $newHeight);
			imagecopyresampled($this->imageResized, $crop , 0, 0, $cropStartX, $cropStartY, $newWidth, $newHeight , $newWidth, $newHeight);
		}

		## --------------------------------------------------------

		public function saveImage($savePath, $imageQuality="100")
		{
			// *** Get extension
        		$extension = strrchr($savePath, '.');
       			$extension = strtolower($extension);

			switch($extension)
			{
				case '.jpg':
				case '.jpeg':
					if (imagetypes() & IMG_JPG) {
						imagejpeg($this->imageResized, $savePath, $imageQuality);
					}
					break;

				case '.gif':
					if (imagetypes() & IMG_GIF) {
						imagegif($this->imageResized, $savePath);
					}
					break;

				case '.png':
					// *** Scale quality from 0-100 to 0-9
					$scaleQuality = round(($imageQuality/100) * 9);

					// *** Invert quality setting as 0 is best, not 9
					$invertScaleQuality = 9 - $scaleQuality;

					if (imagetypes() & IMG_PNG) {
						 imagepng($this->imageResized, $savePath, $invertScaleQuality);
					}
					break;

				// ... etc

				default:
					// *** THIS REQUIRES RECEPTION TO BE SOMEWHAT CLEVER. THEY MUST SPECIFY THE EXTENSION!!!
					break;
			}

			imagedestroy($this->imageResized);
		}

Link to comment
Share on other sites

two choices:

<?php
$resizeObj = new resize('C:\xampp\htdocs\images_test\'. $file .'');

or use double quotes:

<?php
$resizeObj = new resize("C:\xampp\htdocs\images_test\$file");

 

Neither of those will work, because in the first one, you are escaping the quote, and the second one, you are escaping the dollar sign.

 

<?php
$resizeObj = new resize('C:\xampp\htdocs\images_test\\'. $file);

 

OR

 

<?php
$resizeObj = new resize("C:\xampp\htdocs\images_test\\$file");

 

See the interpreter here actually catches it.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.