1<?php 2 3function timestamp_to_soap_datetime($t) { 4 return date('Y-m-d\TH:i:sO',$t); 5} 6 7function soap_datetime_to_timestamp($t) { 8 /* Ignore Microsecconds */ 9 $iso8601 = '(-?[0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(\.[0-9]*)?(Z|[+\-][0-9]{4}|[+\-][0-9]{2}:[0-9]{2})?'; 10 if (!is_int($t)) { 11 if (!ereg($iso8601,$t,$r)) { 12 return false; 13 } 14 $t = gmmktime($r[4],$r[5],$r[6],$r[2],$r[3],$r[1]); 15 if (!empty($r[8]) && $r[8] != 'Z') { 16 $op = substr($r[8],0,1); 17 $h = substr($r[8],1,2); 18 if (strstr($r[8],':')) { 19 $m = substr($r[8],4,2); 20 } else { 21 $m = substr($r[8],3,2); 22 } 23 $t += (($op == "-"?1:-1) * $h * 60 + $m) * 60; 24 } 25 } 26 return $t; 27} 28 29function date_compare($f1,$f2) 30{ 31 return soap_datetime_to_timestamp($f1) == soap_datetime_to_timestamp($f2); 32} 33 34function hex_compare($f1, $f2) 35{ 36 return strcasecmp($f1,$f2) == 0; 37} 38 39function number_compare($f1, $f2) 40{ 41 # figure out which has the least fractional digits 42 preg_match('/.*?\.(.*)/',$f1,$m1); 43 preg_match('/.*?\.(.*)/',$f2,$m2); 44 #print_r($m1); 45 # always use at least 2 digits of precision 46 $d = max(min(strlen(count($m1)?$m1[1]:'0'),strlen(count($m2)?$m2[1]:'0')),2); 47 $f1 = round($f1, $d); 48 $f2 = round($f2, $d); 49 return $f1 == $f2; 50// return bccomp($f1, $f2, $d) == 0; 51} 52 53function boolean_compare($f1, $f2) 54{ 55 if (($f1 == 'true' || $f1 === TRUE || $f1 != 0) && 56 ($f2 == 'true' || $f2 === TRUE || $f2 != 0)) return TRUE; 57 if (($f1 == 'false' || $f1 === FALSE || $f1 == 0) && 58 ($f2 == 'false' || $f2 === FALSE || $f2 == 0)) return TRUE; 59 return FALSE; 60} 61 62function string_compare($e1, $e2) 63{ 64 if (is_numeric($e1) && is_numeric($e2)) { 65 return number_compare($e1, $e2); 66 } 67 # handle dateTime comparison 68 $e1_type = gettype($e1); 69 $e2_type = gettype($e2); 70 $ok = FALSE; 71 if ($e1_type == "string") { 72// $dt = new SOAP_Type_dateTime(); 73// $ok = $dt->compare($e1, $e2) == 0; 74 $oj = false; 75 } 76 return $ok || $e1 == $e2 || strcasecmp(trim($e1), trim($e2)) == 0; 77} 78 79function array_compare(&$ar1, &$ar2) { 80 if (gettype($ar1) != 'array' || gettype($ar2) != 'array') return FALSE; 81 if (count($ar1) != count($ar2)) return FALSE; 82 foreach ($ar1 as $k => $v) { 83 if (!array_key_exists($k,$ar2)) return FALSE; 84 if (!compare($v,$ar2[$k])) return FALSE; 85 } 86 return TRUE; 87} 88 89function object_compare(&$obj1, &$obj2) { 90 if (gettype($obj1) != 'object' || gettype($obj2) != 'object') return FALSE; 91// if (class_name(obj1) != class_name(obj2)) return FALSE; 92 $ar1 = (array)$obj1; 93 $ar2 = (array)$obj2; 94 return array_compare($ar1,$ar2); 95} 96 97function compare(&$x,&$y) { 98 $ok = 0; 99 $x_type = gettype($x); 100 $y_type = gettype($y); 101 if ($x_type == $y_type) { 102 if ($x_type == "array") { 103 $ok = array_compare($x, $y); 104 } else if ($x_type == "object") { 105 $ok = object_compare($x, $y); 106 } else if ($x_type == "double") { 107 $ok = number_compare($x, $y); 108// } else if ($x_type == 'boolean') { 109// $ok = boolean_compare($x, $y); 110 } else { 111 $ok = ($x == $y); 112// $ok = string_compare($expect, $result); 113 } 114 } 115 return $ok; 116} 117 118 119function parseMessage($msg) 120{ 121 # strip line endings 122 #$msg = preg_replace('/\r|\n/', ' ', $msg); 123 $response = new SOAP_Parser($msg); 124 if ($response->fault) { 125 return $response->fault->getFault(); 126 } 127 $return = $response->getResponse(); 128 $v = $response->decode($return); 129 if (gettype($v) == 'array' && count($v)==1) { 130 return array_shift($v); 131 } 132 return $v; 133} 134 135function var_dump_str($var) { 136 ob_start(); 137 var_dump($var); 138 $res = ob_get_contents(); 139 ob_end_clean(); 140 return $res; 141} 142 143?>