Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brcontainer

[Resolvido] Verificar magic_quote com OOP

Recommended Posts

A um bom tempo eu li a respeito que magic_quote estaria em desuso a partir do php5.3.0 e no PHP6 não existiria mais, pensei então assim, como fazer algo que indentifique se o magic_quote estaria ON? Foi ae que li no site PHP.NET( http://www.php.net/manual/en/function.get-magic-quotes-gpc.php ), varias soluções, tudo bem até ae, peguei varios códigos postados e briquei com eles, porem a mais de um ano estou programando somente em OOP e percebi que este código o qual usava não era tão bom assim:

<?php
       if(  
           (  function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()  )
            || (  ini_get('magic_quotes_sybase') && ( strtolower(ini_get('magic_quotes_sybase')) != "off" )  )
          ){
           foreach($_GET as $k => $v) $_GET[$k] = stripslashes($v);
           foreach($_POST as $k => $v) $_POST[$k] = stripslashes($v);
           foreach($_COOKIE as $k => $v) $_COOKIE[$k] = stripslashes($v);
       }
?>

Motivo: pois as vezes algumas das variaveis GPC(GET,POST,COOKIE,SESSION) são do tipo array, então como faze-lo? Foi ae que lembrei que havia mais códigos e resolvei testar, encontrei este que é otimo:

<?php
function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

if((function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc())    || (ini_get('magic_quotes_sybase') && (strtolower(ini_get('magic_quotes_sybase'))!="off")) ){
    stripslashes_deep($_GET);
    stripslashes_deep($_POST);
    stripslashes_deep($_COOKIE);
}
?>

Porem havia outro problema, como usar a função array_map, se ela chama função pelo nome, como fazer isto em OOP?

Tentei isto:

array_map('Classe::stripslashes_deep', $value)
Porem não funcionava, foi ae que me lembrei, quase todas funções do PHP que aceitam string tambem aceitam ARRAY, então pensei em olhar no site do PHP sobre ARRAY_MAP, foi ae que li iste:

callback

 

Callback function to run for each element in each array.

então busquei um pouco mais no google para ter certeza e li sobre a função call_user_func, nela uma classe que normalmente é chamada assim:

Classe::funcao();

deveriamos chamar assim:

call_user_func(Array('Classe','funcao'));

Então resolvi fazer a função em OOP:

<?php
Class MinhaClasse{
public function __construct(){
	$this->GPC();
}

private function GPC(){
	if (!function_exists('get_magic_quotes_gpc') { return false; } /*Verifica se o Magic_quotes existe [futuro PHP6]*/
	if (!get_magic_quotes_gpc()) { return false; } /*Verifica se o Magic_quotes_gpc está ativo*/

	 $_POST = array_map(Array($this,'limpar'), $_POST);
	 $_GET = array_map(Array($this,'limpar'), $_GET);
	 $_COOKIE = array_map(Array($this,'limpar'), $_COOKIE);
	 $_REQUEST = array_map(Array($this,'limpar'), $_REQUEST);
}

public function limpar($valor){/*Esta função deve ser public*/
	/*Se for Array chama novamente a função limpa se for String chama a função stripslashes*/
	return is_array($valor)? array_map(Array($this,'limpar'), $valor):(stripslashes($valor));
}


public function exibe(){
	echo '<pre>';		/*apenas para visualização*/
	print_r($_GET);		/*Exibe GET*/
	print_r($_REQUEST); 	/*Exibe GET, POST, COOKIE e SESSION*/
	echo '</pre>';		/*apenas para visualização*/
}
}

$oop = new MinhaClasse();
$oop->exibe();
?>

Não precisam seguir igual ao que eu fiz, podem apenas se basear

 

 

Fontes:

http://www.php.net/manual/en/function.array-map.php

http://www.php.net/manual/en/function.get-magic-quotes-gpc.php

http://php.net/manual/en/function.function-exists.php

http://www.php.net/manual/en/function.call-user-func.php

 

Procurei no forum ver se já havia solução para sobre array_map ou call_user_func com OOP, mas não achei, se este tópico já possuir conteudo igual em outro local me perdõem não sabia.

 

Se quiserem dar sugestões, opinar, criticar, perguntar, fiquem a vontade.

 

Atenciosamente SilverFOX.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.