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
https://forums.phpfreaks.com/topic/249849-escaping-a-php-variable/
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);
		}

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.

Archived

This topic is now archived and is closed to further replies.

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