Ejemplo n.º 1
0
 function phpThumbDebug()
 {
     if ($this->config_disable_debug) {
         return $this->ErrorImage('phpThumbDebug disabled');
     }
     $FunctionsExistance = array('exif_thumbnail', 'gd_info', 'image_type_to_mime_type', 'ImageCopyResampled', 'ImageCopyResized', 'ImageCreate', 'ImageCreateFromString', 'ImageCreateTrueColor', 'ImageIsTrueColor', 'ImageRotate', 'ImageTypes', 'version_compare', 'ImageCreateFromGIF', 'ImageCreateFromJPEG', 'ImageCreateFromPNG', 'ImageCreateFromWBMP', 'ImageCreateFromXBM', 'ImageCreateFromXPM', 'ImageCreateFromString', 'ImageCreateFromGD', 'ImageCreateFromGD2', 'ImageCreateFromGD2Part', 'ImageJPEG', 'ImageGIF', 'ImagePNG', 'ImageWBMP');
     $ParameterNames = array('src', 'new', 'w', 'h', 'f', 'q', 'sx', 'sy', 'sw', 'sh', 'far', 'bg', 'bc', 'file', 'goto', 'err', 'xto', 'ra', 'ar', 'aoe', 'iar', 'maxb');
     $OtherVariableNames = array('phpThumbDebug', 'thumbnailQuality', 'thumbnailFormat', 'gdimg_output', 'gdimg_source', 'sourceFilename', 'source_width', 'source_height', 'thumbnailCropX', 'thumbnailCropY', 'thumbnailCropW', 'thumbnailCropH', 'exif_thumbnail_width', 'exif_thumbnail_height', 'exif_thumbnail_type', 'thumbnail_width', 'thumbnail_height', 'thumbnail_image_width', 'thumbnail_image_height');
     $DebugOutput = array();
     $DebugOutput[] = 'phpThumb() version          = ' . $this->phpthumb_version;
     $DebugOutput[] = 'phpversion()                = ' . @phpversion();
     $DebugOutput[] = 'PHP_OS                      = ' . PHP_OS;
     $DebugOutput[] = '__FILE__                    = ' . __FILE__;
     $DebugOutput[] = 'realpath(.)                 = ' . @realpath('.');
     $DebugOutput[] = '$_SERVER[PHP_SELF]          = ' . @$_SERVER['PHP_SELF'];
     $DebugOutput[] = '$_SERVER[HTTP_REFERER]      = ' . @$_SERVER['HTTP_REFERER'];
     $DebugOutput[] = '$_SERVER[QUERY_STRING]      = ' . @$_SERVER['QUERY_STRING'];
     $DebugOutput[] = '$_SERVER[PATH_INFO]         = ' . @$_SERVER['PATH_INFO'];
     $DebugOutput[] = '$_SERVER[DOCUMENT_ROOT]     = ' . @$_SERVER['DOCUMENT_ROOT'];
     $DebugOutput[] = 'getenv(DOCUMENT_ROOT)       = ' . @getenv('DOCUMENT_ROOT');
     $DebugOutput[] = '';
     $DebugOutput[] = 'get_magic_quotes_gpc()      = ' . $this->phpThumbDebugVarDump(@get_magic_quotes_gpc());
     $DebugOutput[] = 'get_magic_quotes_runtime()  = ' . $this->phpThumbDebugVarDump(@get_magic_quotes_runtime());
     $DebugOutput[] = 'error_reporting()           = ' . $this->phpThumbDebugVarDump(error_reporting());
     $DebugOutput[] = 'ini_get(error_reporting)    = ' . $this->phpThumbDebugVarDump(@ini_get('error_reporting'));
     $DebugOutput[] = 'ini_get(display_errors)     = ' . $this->phpThumbDebugVarDump(@ini_get('display_errors'));
     $DebugOutput[] = 'ini_get(allow_url_fopen)    = ' . $this->phpThumbDebugVarDump(@ini_get('allow_url_fopen'));
     $DebugOutput[] = 'ini_get(disable_functions)  = ' . $this->phpThumbDebugVarDump(@ini_get('disable_functions'));
     $DebugOutput[] = 'ini_get(safe_mode)          = ' . $this->phpThumbDebugVarDump(@ini_get('safe_mode'));
     $DebugOutput[] = 'ini_get(open_basedir)       = ' . $this->phpThumbDebugVarDump(@ini_get('open_basedir'));
     $DebugOutput[] = 'ini_get(memory_limit)       = ' . $this->phpThumbDebugVarDump(@ini_get('memory_limit'));
     $DebugOutput[] = 'ini_get(max_execution_time) = ' . $this->phpThumbDebugVarDump(@ini_get('max_execution_time'));
     $DebugOutput[] = 'get_cfg_var(memory_limit)   = ' . $this->phpThumbDebugVarDump(@get_cfg_var('memory_limit'));
     $DebugOutput[] = 'memory_get_usage()          = ' . (function_exists('memory_get_usage') ? $this->phpThumbDebugVarDump(@memory_get_usage()) : 'n/a');
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_prefer_imagemagick            = ' . $this->phpThumbDebugVarDump($this->config_prefer_imagemagick);
     $DebugOutput[] = '$this->config_imagemagick_path              = ' . $this->phpThumbDebugVarDump($this->config_imagemagick_path);
     $DebugOutput[] = 'SafeExec(which convert)                     = ' . trim(phpthumb_functions::SafeExec('which convert'));
     $IMpathUsed = $this->config_imagemagick_path ? $this->config_imagemagick_path : trim(phpthumb_functions::SafeExec('which convert'));
     $DebugOutput[] = '[actual ImageMagick path used]              = ' . $this->phpThumbDebugVarDump($IMpathUsed);
     $DebugOutput[] = 'file_exists([actual ImageMagick path used]) = ' . $this->phpThumbDebugVarDump(file_exists($IMpathUsed));
     $DebugOutput[] = 'ImageMagickVersion()                        = ' . $this->ImageMagickVersion();
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_cache_directory               = ' . $this->phpThumbDebugVarDump($this->config_cache_directory);
     $DebugOutput[] = '$this->config_cache_disable_warning         = ' . $this->phpThumbDebugVarDump($this->config_cache_disable_warning);
     $DebugOutput[] = '$this->config_cache_maxage                  = ' . $this->phpThumbDebugVarDump($this->config_cache_maxage);
     $DebugOutput[] = '$this->config_cache_maxsize                 = ' . $this->phpThumbDebugVarDump($this->config_cache_maxsize);
     $DebugOutput[] = '$this->config_cache_maxfiles                = ' . $this->phpThumbDebugVarDump($this->config_cache_maxfiles);
     $DebugOutput[] = '$this->cache_filename                       = ' . $this->phpThumbDebugVarDump($this->cache_filename);
     $DebugOutput[] = 'is_readable($this->config_cache_directory)  = ' . $this->phpThumbDebugVarDump(is_readable($this->config_cache_directory));
     $DebugOutput[] = 'is_writable($this->config_cache_directory)  = ' . $this->phpThumbDebugVarDump(is_writable($this->config_cache_directory));
     $DebugOutput[] = 'is_readable($this->cache_filename)          = ' . $this->phpThumbDebugVarDump(is_readable($this->cache_filename));
     $DebugOutput[] = 'is_writable($this->cache_filename)          = ' . (file_exists($this->cache_filename) ? $this->phpThumbDebugVarDump(is_writable($this->cache_filename)) : 'n/a');
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_document_root                 = ' . $this->phpThumbDebugVarDump($this->config_document_root);
     $DebugOutput[] = '$this->config_temp_directory                = ' . $this->phpThumbDebugVarDump($this->config_temp_directory);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_output_format                 = ' . $this->phpThumbDebugVarDump($this->config_output_format);
     $DebugOutput[] = '$this->config_output_maxwidth               = ' . $this->phpThumbDebugVarDump($this->config_output_maxwidth);
     $DebugOutput[] = '$this->config_output_maxheight              = ' . $this->phpThumbDebugVarDump($this->config_output_maxheight);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_error_message_image_default   = ' . $this->phpThumbDebugVarDump($this->config_error_message_image_default);
     $DebugOutput[] = '$this->config_error_bgcolor                 = ' . $this->phpThumbDebugVarDump($this->config_error_bgcolor);
     $DebugOutput[] = '$this->config_error_textcolor               = ' . $this->phpThumbDebugVarDump($this->config_error_textcolor);
     $DebugOutput[] = '$this->config_error_fontsize                = ' . $this->phpThumbDebugVarDump($this->config_error_fontsize);
     $DebugOutput[] = '$this->config_error_die_on_error            = ' . $this->phpThumbDebugVarDump($this->config_error_die_on_error);
     $DebugOutput[] = '$this->config_error_silent_die_on_error     = ' . $this->phpThumbDebugVarDump($this->config_error_silent_die_on_error);
     $DebugOutput[] = '$this->config_error_die_on_source_failure   = ' . $this->phpThumbDebugVarDump($this->config_error_die_on_source_failure);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_nohotlink_enabled             = ' . $this->phpThumbDebugVarDump($this->config_nohotlink_enabled);
     $DebugOutput[] = '$this->config_nohotlink_valid_domains       = ' . $this->phpThumbDebugVarDump($this->config_nohotlink_valid_domains);
     $DebugOutput[] = '$this->config_nohotlink_erase_image         = ' . $this->phpThumbDebugVarDump($this->config_nohotlink_erase_image);
     $DebugOutput[] = '$this->config_nohotlink_text_message        = ' . $this->phpThumbDebugVarDump($this->config_nohotlink_text_message);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_nooffsitelink_enabled         = ' . $this->phpThumbDebugVarDump($this->config_nooffsitelink_enabled);
     $DebugOutput[] = '$this->config_nooffsitelink_valid_domains   = ' . $this->phpThumbDebugVarDump($this->config_nooffsitelink_valid_domains);
     $DebugOutput[] = '$this->config_nooffsitelink_require_refer   = ' . $this->phpThumbDebugVarDump($this->config_nooffsitelink_require_refer);
     $DebugOutput[] = '$this->config_nooffsitelink_erase_image     = ' . $this->phpThumbDebugVarDump($this->config_nooffsitelink_erase_image);
     $DebugOutput[] = '$this->config_nooffsitelink_text_message    = ' . $this->phpThumbDebugVarDump($this->config_nooffsitelink_text_message);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_high_security_enabled         = ' . $this->phpThumbDebugVarDump($this->config_high_security_enabled);
     $DebugOutput[] = '$this->config_allow_src_above_docroot       = ' . $this->phpThumbDebugVarDump($this->config_allow_src_above_docroot);
     $DebugOutput[] = '$this->config_allow_src_above_phpthumb      = ' . $this->phpThumbDebugVarDump($this->config_allow_src_above_phpthumb);
     $DebugOutput[] = '$this->config_allow_parameter_file          = ' . $this->phpThumbDebugVarDump($this->config_allow_parameter_file);
     $DebugOutput[] = '$this->config_allow_parameter_goto          = ' . $this->phpThumbDebugVarDump($this->config_allow_parameter_goto);
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->config_max_source_pixels             = ' . $this->phpThumbDebugVarDump($this->config_max_source_pixels);
     $DebugOutput[] = '$this->config_use_exif_thumbnail_for_speed  = ' . $this->phpThumbDebugVarDump($this->config_use_exif_thumbnail_for_speed);
     $DebugOutput[] = '$this->config_border_hexcolor               = ' . $this->phpThumbDebugVarDump($this->config_border_hexcolor);
     $DebugOutput[] = '$this->config_background_hexcolor           = ' . $this->phpThumbDebugVarDump($this->config_background_hexcolor);
     $DebugOutput[] = '$this->config_ttf_directory                 = ' . $this->phpThumbDebugVarDump($this->config_ttf_directory);
     $DebugOutput[] = '';
     foreach ($OtherVariableNames as $varname) {
         $value = $this->{$varname};
         $DebugOutput[] = '$this->' . str_pad($varname, 27, ' ', STR_PAD_RIGHT) . ' = ' . $this->phpThumbDebugVarDump($value);
     }
     $DebugOutput[] = 'strlen($this->rawImageData)        = ' . strlen(@$this->rawImageData);
     $DebugOutput[] = 'strlen($this->exif_thumbnail_data) = ' . strlen(@$this->exif_thumbnail_data);
     $DebugOutput[] = '';
     foreach ($ParameterNames as $varname) {
         $value = $this->{$varname};
         $DebugOutput[] = '$this->' . str_pad($varname, 4, ' ', STR_PAD_RIGHT) . ' = ' . $this->phpThumbDebugVarDump($value);
     }
     $DebugOutput[] = '';
     foreach ($FunctionsExistance as $functionname) {
         $DebugOutput[] = 'builtin_function_exists(' . $functionname . ')' . str_repeat(' ', 23 - strlen($functionname)) . ' = ' . $this->phpThumbDebugVarDump(phpthumb_functions::builtin_function_exists($functionname));
     }
     $DebugOutput[] = '';
     $gd_info = phpthumb_functions::gd_info();
     foreach ($gd_info as $key => $value) {
         $DebugOutput[] = 'gd_info.' . str_pad($key, 34, ' ', STR_PAD_RIGHT) . ' = ' . $this->phpThumbDebugVarDump($value);
     }
     $DebugOutput[] = '';
     $exif_info = phpthumb_functions::exif_info();
     foreach ($exif_info as $key => $value) {
         $DebugOutput[] = 'exif_info.' . str_pad($key, 26, ' ', STR_PAD_RIGHT) . ' = ' . $this->phpThumbDebugVarDump($value);
     }
     $DebugOutput[] = '';
     if ($ApacheLookupURIarray = phpthumb_functions::ApacheLookupURIarray(dirname(@$_SERVER['PHP_SELF']))) {
         foreach ($ApacheLookupURIarray as $key => $value) {
             $DebugOutput[] = 'ApacheLookupURIarray.' . str_pad($key, 15, ' ', STR_PAD_RIGHT) . ' = ' . $this->phpThumbDebugVarDump($value);
         }
     } else {
         $DebugOutput[] = 'ApacheLookupURIarray() -- FAILED';
     }
     $DebugOutput[] = '';
     if (isset($_GET) && is_array($_GET)) {
         foreach ($_GET as $key => $value) {
             $DebugOutput[] = '$_GET[' . $key . ']' . str_repeat(' ', 30 - strlen($key)) . '= ' . $this->phpThumbDebugVarDump($value);
         }
     }
     if (isset($_POST) && is_array($_POST)) {
         foreach ($_POST as $key => $value) {
             $DebugOutput[] = '$_POST[' . $key . ']' . str_repeat(' ', 29 - strlen($key)) . '= ' . $this->phpThumbDebugVarDump($value);
         }
     }
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->debugmessages:';
     foreach ($this->debugmessages as $errorstring) {
         $DebugOutput[] = '  * ' . $errorstring;
     }
     $DebugOutput[] = '';
     $DebugOutput[] = '$this->debugtiming:';
     foreach ($this->debugtiming as $timestamp => $timingstring) {
         $DebugOutput[] = '  * ' . $timestamp . ' ' . $timingstring;
     }
     $DebugOutput[] = '  * Total processing time: ' . number_format(max(array_keys($this->debugtiming)) - min(array_keys($this->debugtiming)), 6);
     return $this->ErrorImage(implode("\n", $DebugOutput), 700, 500);
 }
 function ImageCreateFromStringReplacement(&$RawImageData, $DieOnErrors = false)
 {
     // there are serious bugs in the non-bundled versions of GD which may cause
     // PHP to segfault when calling ImageCreateFromString() - avoid if at all possible
     // when not using a bundled version of GD2
     $gd_info = phpthumb_functions::gd_info();
     if (strpos($gd_info['GD Version'], 'bundled') !== false) {
         return @ImageCreateFromString($RawImageData);
     }
     switch (substr($RawImageData, 0, 3)) {
         case 'GIF':
             $ICFSreplacementFunctionName = 'ImageCreateFromGIF';
             break;
         case "ÿØÿ":
             $ICFSreplacementFunctionName = 'ImageCreateFromJPEG';
             break;
         case "‰" . 'PN':
             $ICFSreplacementFunctionName = 'ImageCreateFromPNG';
             break;
         default:
             $this->ErrorImage('Unknown image type identified by "' . substr($this->rawImageData, 0, 3) . '" (' . phpthumb_functions::HexCharDisplay(substr($this->rawImageData, 0, 3)) . ') in ImageCreateFromStringReplacement()');
             break;
     }
     if ($tempnam = tempnam($this->config_temp_directory, 'pThumb')) {
         if ($fp_tempnam = @fopen($tempnam, 'wb')) {
             fwrite($fp_tempnam, $RawImageData);
             fclose($fp_tempnam);
             if ($ICFSreplacementFunctionName == 'ImageCreateFromGIF' && !function_exists($ICFSreplacementFunctionName)) {
                 // Need to create from GIF file, but ImageCreateFromGIF does not exist
                 if (@(include_once 'phpthumb.gif.php')) {
                     // gif_loadFileToGDimageResource() cannot read from raw data, write to file first
                     if ($tempfilename = tempnam($this->config_temp_directory, 'pThumb')) {
                         if ($fp_tempfile = @fopen($tempfilename, 'wb')) {
                             fwrite($fp_tempfile, $RawImageData);
                             fclose($fp_tempfile);
                             $gdimg_source = gif_loadFileToGDimageResource($tempfilename);
                             unlink($tempfilename);
                             return $gdimg_source;
                             break;
                         } else {
                             $ErrorMessage = 'Failed to open tempfile in ' . __FILE__ . ' on line ' . __LINE__;
                         }
                     } else {
                         $ErrorMessage = 'Failed to open generate tempfile name in ' . __FILE__ . ' on line ' . __LINE__;
                     }
                 } else {
                     $ErrorMessage = 'Failed to include required file "phpthumb.gif.php" in ' . __FILE__ . ' on line ' . __LINE__;
                 }
             } elseif (function_exists($ICFSreplacementFunctionName) && ($gdimg_source = $ICFSreplacementFunctionName($tempnam))) {
                 // great
                 unlink($tempnam);
                 return $gdimg_source;
             } else {
                 // GD functions not available
                 // base64-encoded error image in GIF format
                 $ERROR_NOGD = 'R0lGODlhIAAgALMAAAAAABQUFCQkJDY2NkZGRldXV2ZmZnJycoaGhpSUlKWlpbe3t8XFxdXV1eTk5P7+/iwAAAAAIAAgAAAE/vDJSau9WILtTAACUinDNijZtAHfCojS4W5H+qxD8xibIDE9h0OwWaRWDIljJSkUJYsN4bihMB8th3IToAKs1VtYM75cyV8sZ8vygtOE5yMKmGbO4jRdICQCjHdlZzwzNW4qZSQmKDaNjhUMBX4BBAlmMywFSRWEmAI6b5gAlhNxokGhooAIK5o/pi9vEw4Lfj4OLTAUpj6IabMtCwlSFw0DCKBoFqwAB04AjI54PyZ+yY3TD0ss2YcVmN/gvpcu4TOyFivWqYJlbAHPpOntvxNAACcmGHjZzAZqzSzcq5fNjxFmAFw9iFRunD1epU6tsIPmFCAJnWYE0FURk7wJDA0MTKpEzoWAAskiAAA7';
                 header('Content-type: image/gif');
                 echo base64_decode($ERROR_NOGD);
                 exit;
             }
         } else {
             $ErrorMessage = 'Failed to fopen(' . $tempnam . ', "wb") in ' . __FILE__ . ' on line ' . __LINE__ . "\n" . 'You may need to set $PHPTHUMB_CONFIG[temp_directory] in phpthumb.config.php';
         }
         unlink($tempnam);
     } else {
         $ErrorMessage = 'Failed to generate tempnam() in ' . __FILE__ . ' on line ' . __LINE__ . "\n" . 'You may need to set $PHPTHUMB_CONFIG[temp_directory] in phpthumb.config.php';
     }
     if ($DieOnErrors && !empty($ErrorMessage)) {
         die($ErrorMessage);
     }
     return false;
 }
 function gd_version($fullstring = false)
 {
     static $cache_gd_version = array();
     if (empty($cache_gd_version)) {
         $gd_info = phpthumb_functions::gd_info();
         if (substr($gd_info['GD Version'], 0, strlen('bundled (')) == 'bundled (') {
             $cache_gd_version[1] = $gd_info['GD Version'];
             // e.g. "bundled (2.0.15 compatible)"
             $cache_gd_version[0] = (double) substr($gd_info['GD Version'], strlen('bundled ('), 3);
             // e.g. "2.0" (not "bundled (2.0.15 compatible)")
         } else {
             $cache_gd_version[1] = $gd_info['GD Version'];
             // e.g. "1.6.2 or higher"
             $cache_gd_version[0] = (double) substr($gd_info['GD Version'], 0, 3);
             // e.g. "1.6" (not "1.6.2 or higher")
         }
     }
     return $cache_gd_version[intval($fullstring)];
 }