// // available at http://phpthumb.sourceforge.net /// ////////////////////////////////////////////////////////////// /// // // phpthumb.functions.php - general support functions // // /// ////////////////////////////////////////////////////////////// class phpthumb_functions { function user_function_exists($functionname) { if (function_exists('get_defined_functions')) { static $get_defined_functions = array(); if (empty($get_defined_functions)) { $get_defined_functions = get_defined_functions(); } return in_array(strtolower($functionname), $get_defined_functions['user']); } return function_exists($functionname); } function builtin_function_exists($functionname) { if (function_exists('get_defined_functions')) { static $get_defined_functions = array(); if (empty($get_defined_functions)) { $get_defined_functions = get_defined_functions(); } return in_array(strtolower($functionname), $get_defined_functions['internal']); } return function_exists($functionname); } function version_compare_replacement_sub($version1, $version2, $operator='') { // If you specify the third optional operator argument, you can test for a particular relationship. // The possible operators are: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne respectively. // Using this argument, the function will return 1 if the relationship is the one specified by the operator, 0 otherwise. // If a part contains special version strings these are handled in the following order: dev < (alpha = a) < (beta = b) < RC < pl static $versiontype_lookup = array(); if (empty($versiontype_lookup)) { $versiontype_lookup['dev'] = 10001; $versiontype_lookup['a'] = 10002; $versiontype_lookup['alpha'] = 10002; $versiontype_lookup['b'] = 10003; $versiontype_lookup['beta'] = 10003; $versiontype_lookup['RC'] = 10004; $versiontype_lookup['pl'] = 10005; } if (isset($versiontype_lookup[$version1])) { $version1 = $versiontype_lookup[$version1]; } if (isset($versiontype_lookup[$version2])) { $version2 = $versiontype_lookup[$version2]; } switch ($operator) { case '<': case 'lt': return intval($version1 < $version2); break; case '<=': case 'le': return intval($version1 <= $version2); break; case '>': case 'gt': return intval($version1 > $version2); break; case '>=': case 'ge': return intval($version1 >= $version2); break; case '==': case '=': case 'eq': return intval($version1 == $version2); break; case '!=': case '<>': case 'ne': return intval($version1 != $version2); break; } if ($version1 == $version2) { return 0; } elseif ($version1 < $version2) { return -1; } return 1; } function version_compare_replacement($version1, $version2, $operator='') { if (function_exists('version_compare')) { // built into PHP v4.1.0+ return version_compare($version1, $version2, $operator); } // The function first replaces _, - and + with a dot . in the version strings $version1 = strtr($version1, '_-+', '...'); $version2 = strtr($version2, '_-+', '...'); // and also inserts dots . before and after any non number so that for example '4.3.2RC1' becomes '4.3.2.RC.1'. // Then it splits the results like if you were using explode('.',$ver). Then it compares the parts starting from left to right. $version1 = eregi_replace('([0-9]+)([A-Z]+)([0-9]+)', '\\1.\\2.\\3', $version1); $version2 = eregi_replace('([0-9]+)([A-Z]+)([0-9]+)', '\\1.\\2.\\3', $version2); $parts1 = explode('.', $version1); $parts2 = explode('.', $version1); $parts_count = max(count($parts1), count($parts2)); for ($i = 0; $i < $parts_count; $i++) { $comparison = phpthumb_functions::version_compare_replacement_sub($version1, $version2, $operator); if ($comparison != 0) { return $comparison; } } return 0; } function phpinfo_array() { static $phpinfo_array = array(); if (empty($phpinfo_array)) { ob_start(); phpinfo(); $phpinfo = ob_get_contents(); ob_end_clean(); $phpinfo_array = explode("\n", $phpinfo); } return $phpinfo_array; } function exif_info() { static $exif_info = array(); if (empty($exif_info)) { // based on code by johnschaefer at gmx dot de // from PHP help on gd_info() $exif_info = array( 'EXIF Support' => '', 'EXIF Version' => '', 'Supported EXIF Version' => '', 'Supported filetypes' => '' ); $phpinfo_array = phpthumb_functions::phpinfo_array(); foreach ($phpinfo_array as $line) { $line = trim(strip_tags($line)); foreach ($exif_info as $key => $value) { if (strpos($line, $key) === 0) { $newvalue = trim(str_replace($key, '', $line)); $exif_info[$key] = $newvalue; } } } } return $exif_info; } function ImageTypeToMIMEtype($imagetype) { if (function_exists('image_type_to_mime_type')) { return image_type_to_mime_type($imagetype); } static $image_type_to_mime_type = array( 1 => 'image/gif', // IMAGETYPE_GIF 2 => 'image/jpeg', // IMAGETYPE_JPEG 3 => 'image/png', // IMAGETYPE_PNG 4 => 'application/x-shockwave-flash', // IMAGETYPE_SWF 5 => 'image/psd', // IMAGETYPE_PSD 6 => 'image/bmp', // IMAGETYPE_BMP 7 => 'image/tiff', // IMAGETYPE_TIFF_II (intel byte order) 8 => 'image/tiff', // IMAGETYPE_TIFF_MM (motorola byte order) 9 => 'application/octet-stream', // IMAGETYPE_JPC 10 => 'image/jp2', // IMAGETYPE_JP2 11 => 'application/octet-stream', // IMAGETYPE_JPX 12 => 'application/octet-stream', // IMAGETYPE_JB2 13 => 'application/x-shockwave-flash', // IMAGETYPE_SWC 14 => 'image/iff', // IMAGETYPE_IFF 15 => 'image/vnd.wap.wbmp', // IMAGETYPE_WBMP 16 => 'image/xbm'); // IMAGETYPE_XBM return (isset($image_type_to_mime_type[$imagetype]) ? $image_type_to_mime_type[$imagetype] : false); } function HexCharDisplay($string) { $len = strlen($string); $output = ''; for ($i = 0; $i < $len; $i++) { $output .= ' 0x'.str_pad(dechex(ord($string{$i})), 2, '0', STR_PAD_LEFT); } return $output; } function ImageHexColorAllocate(&$gdimg_hexcolorallocate, $HexColorString, $dieOnInvalid=false) { if (!is_resource($gdimg_hexcolorallocate)) { die('$gdimg_hexcolorallocate is not a GD resource in ImageHexColorAllocate()'); } if (eregi('^[0-9A-F]{6}$', $HexColorString)) { $R = hexdec(substr($HexColorString, 0, 2)); $G = hexdec(substr($HexColorString, 2, 2)); $B = hexdec(substr($HexColorString, 4, 2)); return ImageColorAllocate($gdimg_hexcolorallocate, $R, $G, $B); } if ($dieOnInvalid) { die('Invalid hex color string: "'.$HexColorString.'"'); } return ImageColorAllocate($gdimg_hexcolorallocate, 0, 0, 0); } function SafeBackTick($command) { static $BacktickDisabled = null; if (is_null($BacktickDisabled)) { $disable_functions = explode(',', ini_get('disable_functions')); if (in_array('shell_exec', $disable_functions) || in_array('exec', $disable_functions) || in_array('system', $disable_functions)) { $BacktickDisabled = true; } else { $BacktickDisabled = false; } } if ($BacktickDisabled) { return ''; } return `$command`; } function ApacheLookupURIarray($filename) { // apache_lookup_uri() only works when PHP is installed as an Apache module. if (php_sapi_name() == 'apache') { $keys = array('status', 'the_request', 'status_line', 'method', 'content_type', 'handler', 'uri', 'filename', 'path_info', 'args', 'boundary', 'no_cache', 'no_local_copy', 'allowed', 'send_bodyct', 'bytes_sent', 'byterange', 'clength', 'unparsed_uri', 'mtime', 'request_time'); if ($apacheLookupURIobject = @apache_lookup_uri($filename)) { $apacheLookupURIarray = array(); foreach ($keys as $key) { $apacheLookupURIarray[$key] = @$apacheLookupURIobject->$key; } return $apacheLookupURIarray; } } return false; } } ?>