Премини към съдържанието
hoho1234

Запитване за една грешка

Препоръчан отговор


Здравеите искам да попитам дали може да ми помогнете за отстраняването на един проблем

 

Warning: array_key_exists(): The second argument should be either an array or an  object in C:Documents and Settingsmicr0My Documentsdecompiler_aidecompiler _aifunction.php on line 199 Warning: array_key_exists(): The second argument should be either an array or an  object in C:Documents and Settingsmicr0My Documentsdecompiler_aidecompiler _aifunction.php on line 199 Warning: array_key_exists(): The second argument should be either an array or an  object in C:Documents and Settingsmicr0My Documentsdecompiler_aidecompiler _aifunction.php on line 199 Warning: array_key_exists(): The second argument should be either an array or an  object in C:Documents and Settingsmicr0My Documentsdecompiler_aidecompiler _aifunction.php on line 199

 

 

самият фаил

<?php$orig = './ai.obj';include("import.php");function reduce_array($array, $e){	for($i=1; $i <= $e; $i++)		array_pop($array);	return $array;}function write($text) {	global $fh, $indent, $cache;	if(count($cache) > 2) {		@fputs($fh, $cache[0]."rn");		$cache = array_slice($cache, 1);	}	array_push($cache, str_repeat('	', $indent).$text);}function opcode_for($text){	global $cache, $stack, $sp;	write('for('.str_replace('	','',$cache[1]).' '.str_replace('	','',$cache[2]).'; '.$text.')');	$cache = array_slice($cache, 2);}function opcode_elseif(){	global $cache, $bracket, $indent;	if(str_replace('	','',$cache[0]) == 'else'){		$cache[0] .= ' '.str_replace('	','',$cache[2]);		$cache = reduce_array($cache, 1);		return true;	}  else	return false;}function separate($row){	$data = explode(' ', trim($row));	return $data;}function copyright(){return $header ="/****************************************************************************                                Change Log*                            ------------------*   ".date("d.m.Y", time())."*   Script Decompiled by SauDecompiler build 102306.2****************************************************************************/rn";}function is_while($ai, $label, $old, $z){	$data = explode(' ', trim($ai[$z]));	while($data[0] != $label){		$z++;		$data = explode(' ', trim($ai[$z]));	}	$prev = separate($ai[($z-1)]);	if($prev[0] == 'jump') if($prev[1] == $old) return true; else return false; else return false;}function is_selectcase($ai, $label, $z){	$data = explode(' ', trim($ai[$z]));	while($data[0] != $label){		$z++;		$data = explode(' ', trim($ai[$z]));	}	$prev = separate($ai[($z-1)]);	$next = separate($ai[($z+1)]); 	if($prev[0] == 'jump') if($next[0] == 'push_reg_sp') return true; else return false; else return false;}function split_stack($data){	$data = explode(' ', $data);	return $data;}function process_class($ai){	global $fh, $indent, $cache, $bracket, $functions, $vars, $events, $handlers, $params;	$handler_written = false;	$path = './decompiled/'; $status = ""; $bracket = array(); $cache = array(); $stack = array(); $case = array();	$indent = 0; $sp = -1; $sm = -1; $line = 0;	for($z = 0; $z <= count($ai); $z++){	$data = explode(' ', trim($ai[$z]));if(count($data) > 0)		switch (trim($data[0])) {			case 'class':				$data[1] = "";				print('Processing: '.$data[2]);				$name = $data[2];				$fh = fopen($path.$name.'.txt', 'w');				write(copyright());				write("class ".$data[2]." : ".$data[4]."rn{");				$indent++;				break;			case 'class_end':				$indent = 0;				write('}');				for($i=0;$i < count($cache); $i++) @fputs($fh, $cache[$i]."rn");				fclose($fh);				print("   [ Completed ]rn");				break;			case 'handler':				$list = '';				if (!$handler_written) {					$indent = 0;					write('handler:');					$handler_written = true;				}				$indent = 0;				$handler = $data[5];				$list = 'EventHandler '.$data[5].'(';				$indent++;				$sp = -1;				break;			case 'handler_end':				$indent--;				write("}rn");				break;			case 'variable_begin':				$status = 'ST_VAR';				$w = 0;				break;			case 'variable_end':				$status = "";				if($w == 1) write(substr($list, 0, strlen($list) - 1).')'); else write($list.')');				write('{');				$indent = 2;				break;			case 'parameter_define_begin':				$list = '';				$status = 'ST_PARAM';				$indent = 0;				write('parameter:');				break;			case 'parameter_define_end':				$status = 'ST_PARSE';				write('');				$indent = 1;				break;			case 'buyselllist_begin':				$list = '';				$bs_status = $status;				$status = 'ST_BUYSELL';				$list = "BuySellList ".$data[1]." = {";				break;			case 'buyselllist_end':				$indent = 1;				$status = $bs_status;				if(strlen($list) > 28) $list = substr($list, 0, strlen($list) - 1);				write($list."};");				break;			case 'telposlist_begin':				$list = '';				$tp_status = $status;				$status = 'ST_TELPOS';				$list = "TelPosList ".$data[1]." = {";				break;			case 'telposlist_end':				$indent = 1;				$status = $tp_status;				write(substr($list, 0, strlen($list) - 1)."};");				break;			case 'property_define_begin':				$list = '';				$indent = 0;				$p_status = $status;				$status = 'ST_PROP';				write('property:');				break;			case 'property_define_end':				$indent = 0;				$status = $p_status;				write('');				break;			case 'call_super':				write('super;');				break;			case 'exit_handler':				write('return;');				break;				case 'fetch_f':					case 'fetch_i4':			case 'fetch_d':			case 'fetch_i':				$status = "";				break;			case 'push_const':				$prev = separate($ai[($z-1)]);				switch(@$prev[0]){					case 'push_event':						$sp++; $status = "event";						if (array_key_exists($handler, $events[$data[1]])){							$stack[$sp] = $events[$data[1]][$handler];						}						else{							$stack[$sp] = $events[$data[1]]['default'];						}			//			if($prev[1] == 'target') die();			//			print($sp);			//			print_r($stack);						break;					case 'fetch_f':						case 'fetch_i4':					case 'fetch_d':					case 'fetch_i':						if(count($prev) > 2){							$status = "event";							if (array_key_exists($handler, $vars[$data[1]])){								$stack[$sp] .= ".".$vars[$data[1]][$handler];							}							else{								$stack[$sp] .= ".".$vars[$data[1]]['default'];							}										} else {							$sp++; $status = 'const';							$stack[$sp] = $data[1];						}						break;					default:						$sp++; $status = 'const';						$stack[$sp] = $data[1];				}				break;			case 'add':				if($status != 'event') {				$stack[$sp-1] =  $stack[$sp-1].' + '.$stack[$sp];				if($sp != 0) $stack[$sp-1] = '( '.$stack[$sp-1].' )';				$sp--; array_pop($stack);				}				break;			case 'sub':				$stack[$sp-1] =  $stack[$sp-1].' - '.$stack[$sp];				if($sp != 0) $stack[$sp-1] = '( '.$stack[$sp-1].' )';				$sp--; array_pop($stack);				break;			case 'div':				$stack[$sp-1] =  $stack[$sp-1].' / '.$stack[$sp];				if($sp != 0) $stack[$sp-1] = '( '.$stack[$sp-1].' )';				$sp--; array_pop($stack);				break;			case 'mul':				$stack[$sp-1] =  $stack[$sp-1].' * '.$stack[$sp];				if($sp != 0) $stack[$sp-1] = '( '.$stack[$sp-1].' )';				$sp--; array_pop($stack);				break;			case 'negate':				$stack[$sp] *= -1;				break;			case 'push_string':				$sp++;				$stack[$sp] = $string[$data[1]];				break;			case 'add_string':				$stack[$sp-1] .= ' + '.$stack[$sp];				$sp--; array_pop($stack);				break;			case 'push_parameter':			case 'push_property':				$sp++;				$stack[$sp] = $data[1];				break;			case 'push_reg_sp':				$next = separate($ai[($z+2)]);				if($next[0] == 'push_reg_sp'){					$sp++;					$stack[$sp] = $stack[$sp-1];				}				break;			case 'assign4':			case 'assign':				if($case[$sm] == 'for_var'){					opcode_for($stack[$sp-1].' = '.$stack[$sp]);					write('{');					$indent++;					$case[$sm] = 'for';					unset($stack); $sp = -1;				}				else				{					if(count($stack) > 2){						$stack[$sp-1] .= ' = '.$stack[$sp];					}					else					{						$stack[$sp-1] .= ' = '.$stack[$sp].';';					}					$sp--; array_pop($stack);				}				break;			case 'func_call':				$funct = $functions[$data[1]];		//		if($data[1] == 184746121) { print_r($stack); die(); }		//		print_r($stack);				if($funct[2] == 1){					$sp -= $funct[1];					if($funct[1] == 0) write($funct[0].'();'); else					write($stack[$sp]."->".$funct[0]."(".implode(',' , array_slice($stack, ($funct[1]*-1))).");");					$stack = reduce_array($stack, $funct[1]);					unset($stack); $sp = -1;				} else {					$sp -= $funct[1];			//		print('#'.$sp.' | '.$funct[1]);					if($funct[1] == 0) $stack[$sp] .= "->".$funct[0].'()'; else			//		$stack[$sp] .= $stack[$sp]."->".$funct[0];					$stack[$sp] .= "->".$funct[0]."(".implode(',',array_slice($stack, ($funct[1]*-1))).")";					$stack = reduce_array($stack, $funct[1]);				}		//		print_r($stack);				break;			case 'equal':				if(count($stack)>1){					$stack[$sp-1] .=  ' == '.$stack[$sp];					$sp--; array_pop($stack);				}				break;			case 'greater':				$stack[$sp-1] .=  ' > '.$stack[$sp];				$sp--; array_pop($stack);				break;			case 'greater_equal':				$stack[$sp-1] .= ' >= '.$stack[$sp];				$sp--; array_pop($stack);				break;			case 'not_equal':				$stack[$sp-1] .= ' != '.$stack[$sp];				$sp--; array_pop($stack);				break;			case 'less_equal':				$stack[$sp-1] .= ' <= '.$stack[$sp];				$sp--; array_pop($stack);				break;			case 'less':				$stack[$sp-1] .= ' < '.$stack[$sp];				$sp--; array_pop($stack);				break;				case 'and':				$sp--;				if($stack[$sp][0] == '(' && $stack[$sp][1] != '(' &&  substr_count($stack[$sp], '||') == 0)				$stack[$sp] = substr($stack[$sp],2,strlen($stack[$sp])-4);				$stack[$sp] =  '( '.$stack[$sp].' && '.$stack[$sp+1].' )';				break;			case 'or':				$sp--;				if($stack[$sp][0] == '(' && $stack[$sp][1] != '(' &&  substr_count($stack[$sp], '&&') == 0)				$stack[$sp] = substr($stack[$sp],2,strlen($stack[$sp])-4);				$stack[$sp] =  '( '.$stack[$sp].' || '.$stack[$sp+1].' )';				break;			case 'shift_sp':				if($data[1] == -1){					$prev = separate($ai[($z-1)]);					if($prev[0] != 'shift_sp' && $prev[0] != 'func_call' && count($stack)>0){						write($stack[$sp]);						if(count($stack) > 1) array_pop($stack); else unset($stack);						$sp--;											}				}				break;			case 'jump':				break;			case 'branch_false':				$next = separate($ai[($z+1)]);				if($case[$sm] == 'case'){					write('case '.$stack[$sp].':');					$bracket[$data[1]] = true;					$indent++; $sm--; array_pop($case);					$avoid = 1; $stack = reduce_array($stack,1);				}				elseif(is_selectcase($ai,$data[1],$z)){					$sm++;					$case[$sm] = 'select_case';					$aux = split_stack($stack[$sp]);					for($x=1; $x < count($aux)-2; $x++) $aux[0] .= $aux[$x];					write('select('.$aux[0].')');					write('{');					$indent++;					write('case '.$aux[count($aux)-1].':');					$indent++;					$bracket[$data[1]] = true;					unset($aux); unset($stack); $sp--;				}				elseif($next[0] == 'jump')	## opcode FOR				{					write($stack[$sp]);					$sm++;					$case[$sm] = 'for_var';					$bracket[$data[1]] = true;					}				else				{					if(substr_count($stack[$sp], '||') == 0 && substr_count($stack[$sp], '&&') == 0) $stack[$sp] = "( ".$stack[$sp]." )";					if(is_while($ai,$data[1],$old,$z)){			//			die();						write('while'.$stack[$sp]);						write('{');						$indent++;						$sm++; $case[$sm] = 'else';						$bracket[$data[1]] = true;						unset($stack); $sp--;					}					elseif($next[0][0] == 'L')					{			//			print('&&&');			//			print_r($stack);						write('if'.$stack[$sp]);						if(!opcode_elseif()) { 							## if							$sm++; $case[$sm] = 'if';							write('{');							$indent++;							} else {							## else if							$case[$sm] = 'if';							array_pop($bracket);						}						$bracket[$data[1]] = true;						unset($stack); $sp--;					}					}				break;			default:				if(@$data[0][0] == 'S'){					if(count($data) > 2) for($e = 2; $e < count($data); $e++) $data[1] .= " ".$data[$e]; 					$string[substr($data[0], 0, strlen($data[0])-1)] = $data[1];				}				elseif(@$data[0][0] == 'L'){					if(array_key_exists($data[0],$bracket)){						if($case[$sm] == 'if'){							$sm--; array_pop($case); $indent--;							write('}');							$prev = separate($ai[($z-1)]);							if($prev[0] == 'jump'){								$sm++; $case[$sm] = 'else';								write('else'); write('{');								$indent++;								$bracket[$prev[1]] = true;							}						}						elseif($case[$sm] == 'else'){							$sm--; array_pop($case); $indent--;							if(str_replace('	','',$cache[1]) == 'else')  $cache = reduce_array($cache,2);							else write('}');						}						elseif($case[$sm] == 'for'){							$indent--;							write('}');							$sm--; array_pop($case);						}						elseif($case[$sm] == 'select_case'){							$prev = separate($ai[($z-2)]);																		if($prev[0] == 'jump') {			//					$bracket[$prev[1]] = true;								write('break;');							}							$indent--;							$next = separate($ai[($z+1)]);							if($next[0] == 'push_reg_sp'){								$sm++; $case[$sm] = 'case';							}							else 							{								$indent--; $sm--; array_pop($case);								write('}');							}						}					}					else $old = $data[0];							}				else				{									switch ($status) {						case 'ST_IGNORE':							break;						case 'ST_BUYSELL':							if(count($data) == 5){								$i = substr($data[0], 1, strlen($data[0]) - 2);								if (array_key_exists($i, $params['item'])) {									$i = $params['item'][$i];								}								$list .= ('{"'.$i.'";'.substr($data[1], 0, strlen($data[1]) - 1).'};');			//					print("{"".$i."";".$data[1].$data[2]."};rn");							}							else							{								$i = substr($data[0], 1, strlen($data[0]) - 2);								if (array_key_exists($i, $params['item'])) {									$i = $params['item'][$i];								}								$list .= ('{"'.$i.'";'.$data[1].''.$data[2].';');							}							break;						case 'ST_TELPOS':									$list .= $ai[$z].";";							break;						case 'ST_PROP':							break;						case 'ST_PARAM':							write('	'.$data[0].'	'.$data[1].' = '.$data[2].';');							break;						case 'ST_VAR':							$e = substr($data[0], 1, strlen($data[0]) - 2);							if($e != "myself" && $e != "_choiceN" && $e != "_code" && $e != "_from_choice"){								$list .= substr($data[0], 1, strlen($data[0]) - 2).',';								$w = 1;								}							break;					}				}		}			//	print($sp);	//	print_r($stack);	}	}?>
Редактирано от hoho1234 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами то Warning-а си казва къде е проблема. Вторият параметър на функцията array_key_exists() трябва да е масива в който искаш да проверяваш дали съществува даден ключ.

Иначе как разчиташ PHP да разбере за кой масив става дума?

 

Гледам, че кода е част от някаква готова система най-вероятно, та може оправянето и да излезе голяма мъка, но все пак, ако скролнем до ред 199, където пищи за грешка, ще видим:

if (array_key_exists($handler, $events[$data[1]])){

И логично е да предположим, че $events[$data[1]] не е валиден масив по някакъв начин, и по-нагоре в кода се чупи нещо.

 

Идва момента в който трябва да разберем какво всъщност е $events[$data[1]], щом аджеба, според PHP явно не е масив.

 

За целта, най-лесно (но не най-правилно, но за правилно няма да говорим, щом целта ни е елементарен дебъг) е да сложим едно:

var_dump($events[$data[1]]);

... ред по-нагоре от проверката с array_key_exists, и на следващият ред да убием всичко долно с die(); , така, че да видим само резултата от var_dump-а, който ще ни покаже какво всъщност е $events[$data[1]].

 

Та от там, по веригата, което според мен е мазохизъм - да дебъгваш нещо, което не си писал ти.

Редактирано от programings (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами то Warning-а си казва къде е проблема. Вторият параметър на функцията array_key_exists() трябва да е масива в който искаш да проверяваш дали съществува даден ключ.

Иначе как разчиташ PHP да разбере за кой масив става дума?

 

Гледам, че кода е част от някаква готова система най-вероятно, та може оправянето и да излезе голяма мъка, но все пак, ако скролнем до ред 199, където пищи за грешка, ще видим:

if (array_key_exists($handler, $events[$data[1]])){

И логично е да предположим, че $events[$data[1]] не е валиден масив по някакъв начин, и по-нагоре в кода се чупи нещо.

 

Идва момента в който трябва да разберем какво всъщност е $events[$data[1]], щом аджеба, според PHP явно не е масив.

 

За целта, най-лесно (но не най-правилно, но за правилно няма да говорим, щом целта ни е елементарен дебъг) е да сложим едно:

var_dump($events[$data[1]]);

... ред по-нагоре от проверката с array_key_exists, и на следващият ред да убием всичко долно с die(); , така, че да видим само резултата от var_dump-а, който ще ни покаже какво всъщност е $events[$data[1]].

 

Та от там, по веригата, което според мен е мазохизъм - да дебъгваш нещо, което не си писал ти.

ами този скрипт взима информация от obj фаил не разбирам от php този ключ за които говориш го взима от дадения obj фаил

Извинявам се за двоиния пост може да се изтрие горният

след debuga илиза това

Warning: array_key_exists(): The second argument should be either an array or an object in C:Documents and Settingsmicr0My Documentsdecompiler_aidecompiler_aifunction.php on line 200array(1) {  ["default"]=>  string(6) "talker"}array(1) {  ["default"]=>  string(6) "talker"}NULL

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Гърми ти грешка заради неправилен data type - вместо масив или обект имаш стян

ясно вапроса е как може да се оправи :/


Сподели този отговор


Линк към този отговор
Сподели в други сайтове

ясно вапроса е как може да се оправи :/

 

Ами то е очевидно - $events[$data[1]] трябва да е масив.

 

Пример как e правилно:

 

Публикувано изображение

 

И пример как е грешно, както е в твоя случай:

 

Публикувано изображение

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.