mar 312018
 

Eita errinho chato!
Funciona mais ou menos assim: seu provedor altera o servidor de banco de dados, tu, via FileZilla, atualiza o wp-config.php da sua distribuição WordPress, faz o upload, e pronto, tá aí a zica!
Tu olhas, revê, verifica…nada, absolutamente nada fora do lugar no wp_config….

A anamnese:

Servidor linux, atualizado via FileZilla, com arquivos atualizados pelo Notepad++, rodando sobre Windows 10.

Se tentares abrir direto do servidor (sem download), o arquivo aparece assim: Continue reading »

dez 012014
 

Pois bem, para eliminar itens duplicados de um array unidimensional o comando array_unique() do PHP resolve perfeitamente, contudo, quando torna-se necessário realizar a operação com array multidimensionais (bi no caso) são necessários alguns truques.

Na lista quatro soluções com resultados idênticos e mesmo benckmarking:

<?php
 
 
$teste[0][0] = 'abc';
$teste[0][1] = 'def';
$teste[1][0] = 'ghi';
$teste[1][1] = 'jkl';
$teste[2][0] = 'mno';
$teste[2][1] = 'pql';
$teste[3][0] = 'abc';
$teste[3][1] = 'def';
$teste[4][0] = 'ghi';
$teste[4][1] = 'jkl';
$teste[5][0] = 'mno';
$teste[5][1] = 'pql';
$teste[6][0] = 'mno';
$teste[6][1] = 'pql';
$teste[7][0] = 'abc';
$teste[7][1] = 'va-kh';
 
 
print_r($teste);
 
//processamento de eliminação de duplicatas em array bidimensional:
 
 
 
	echo "<p>teste1</p>";
	$teste1 = multi2($teste);
	print_r($teste1);
 
 
 
echo "<p>teste2</p>";
$teste2=multi_unique($teste);
print_r($teste2);
 
 
echo "<p>teste3</p>";
$teste3=array_unique_multidimensional($teste);
print_r($teste3);
 
 
echo "<p>teste4</p>";
$teste4=multi3($teste);
print_r($teste4);
 
 
 
 
//------------------------------------------------------------------------------------------
function multi3($a)
{
foreach($a as $i => $suba)
    foreach($a as $i2 => $suba2)
        if($suba==$suba2 && $i!=$i2)
            unset($a[$i]);
return $a;
			}
 
function multi_unique($array) {
        foreach ($array as $k=>$na)
            $new[$k] = serialize($na);
        $uniq = array_unique($new);
        foreach($uniq as $k=>$ser)
            $new1[$k] = unserialize($ser);
        return ($new1);
		//from php.net , searching array_unique
    }
 
function array_unique_multidimensional($input)
{
    $serialized = array_map('serialize', $input);
    $unique = array_unique($serialized);
    return array_intersect_key($input, $unique);
}
 
function multi2($teste)
{
return array_map("unserialize", array_unique(array_map("serialize", $teste)));
}
?>

 

 

nov 022014
 

Muito bem, direto ao problema:

Qual codificação de caracteres utilizar em seus aplicativos? Qual o Charset ideal?

Se usa algum framework, como Bootstrap e ou jQuery por exemplo, melhor usar UTF-8. Na Academia nosso padrão é UTF-8 sem BOM.

Porém, a maioria dos windows usa o padrão ISO 8859-1, causando os transtornos das imagens abaixo quando alguma de nossas configurações foi esquecida (em especial no Internet Explorer):

Capturar

Na imagem, a tela da mesma aplicação no Firefox é interpretada corretamente como UTF-8, O mesmo no Chrome, já no I.E…..aparece desconfigurado.

Cabe apontar que a página HTML informa corretamente a codificação:

html

Porém, nada feito! o I.E. Não reconhece….

E aqui mais uma dica, a declaração de charset deve estar dentre as primeiras no HEAD, na Academia por padrão usamos como a primeira, pois esta declaração deve estar dentre os primeiros 1024 bytes do arquivo, registrando a dica: Evite comentários demasiados no início do HTML, mais pode ser visto em: http://www.w3.org/International/questions/qa-html-encoding-declarations.en

A solução?

Usar um “hack” nos arquivos PHP, no início de cada arquivo PHP que retorna conteúdo utilizamos (também por padrão) a declaração:

header('Content-Type: text/html; charset=UTF-8');

Tal comando não necessária precisa estar no início do arquivo (o fazemos por questões de padronização).

E quanto ao UTF-8 com ou sem BOM?

O BOM, ou Byte Order Mark é um conjunto de caracteres enviados no início de cada arquivo codificado em UTF-8 com BOM. Tal conjunto tem utilidade no UTF-16 ou 32, sendo inútil no 8. Além de inútil ainda traz alguns problemas: com o BOM não é possível utilizar os comandos header do PHP, além de provocar retornos indevidos em aplicações AJAX, como na imagem abaixo (aliás, estes caracteres são o BOM…):

Byte Order Mark

 

Então, o resumo de como padronizamos cá na Academia, evitando muitos problemas:

  1. Todos os nossos editores de texto e IDE são configurados para adotar o UTF-8 sem BOM como padrão.
  2.  Todos os arquivos HTML tem a declaração de charset no início do Header, dentro do limite de 1024 bytes;
  3. Todos os arquivos PHP que retornam algum HTML tem a declaração  “header(…” no início do arquivo;
  4. Os bancos de dados são configurados como collation UTF-8 general_ci (no caso do MySQL).

Isto feito, raramente terá problemas com os malditos charset, principalmente no I.E..

É isso, até a próxima.

fev 122012
 

Pois bem, no desenvolvimento de aplicações em plataforma WEB a codificação de caracteres tende a ser um pesadelo.

Ora toma-se o padrão regional (ISO-8859-1) ora o padrão internacional UTF-8, e aí a coisa complica…

Se todos os elementos da aplicação WEB (nagevador, servidor WEB, servidor de aplicação (PHP) e servidor de banco de dados) não estiverem operando na mesma nota paracerão os acaracteres estranhos…

A solução para usar PHP, HTML e MySQL em UTF-8, padrão que adotamos na academis é:

No header de suas páginas HTML, aponte a codificação UTF-8:

<head>
      <meta http-equiv="Content-type" content="text/html; charset=UTF-8" />
</head>

Já na sua aplicação PHP inclua:

     ini_set('default_charset','UTF-8');

O mesmo deve ser feito logo após a conexão com o banco de dados, através do comando:

    mysql_query("SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'", $nome_da_sua_conexão);

Claro, por fim, configure seu banco de dados mySQL para utilizar a collation:
utf8_general_ci
Pronto, problema -aparentemente- resolvido.

fev 052012
 

Para criar uma função que receba parâmetros, comum que todos sejam obrigatóros:

function soma_numeros($numero1,$numero2)
{
return $numero1+$numero2;
}

Porém há casos em que alguns parametros podem ser opcionais.
Tratemos de duas situações hipotéticas:
1-A função recebe alguns parametros opcionais, de 1 a n desde que saibamos quanto é o n, no exemplo uma função que soma até 5 números:

function soma_numeros($numero1=0,$numero2=0,$numero3=0,$numero4=0,$numero5=0)
{
return $numero1+$numero2+$numero3+$numero4+$numero5;
}

No caso, a função deve ser chamada passando os argumentos de 0 a 5, se nada for passado o retorno será 0, se dois foram passados serão somados.
Vale ressaltar, serão considerados passados em ordem, ou seja, se houver argumentos obrigatórios e opcionais, os obrigatorios devem ficar no inicio e os opcionais no final.
Bem simples!

2-Porém há casos em que é necessário passar um número incerto de argumentos, nesta hipótese temos duas funções nativas do PHP que resolvem a questão:

func_num_args ( ) e func_get_args ( )

A primeira retorna um inteiro que diz quantos argumentos foram passados à função ao passo que a segunda retorna os argumentos, em formato array.

Assim, podemos reescrever nossa função de soma, agora de fato de 0 a n argumentos:

function soma_numeros()
{
 
 for ($i = 0;$i&lt; func_num_args(); $i++)
    {
        $total=$total+func_get_args($i);
    }
return $total;
}

3-Uma última hipótese, necessidade de passar uma série de argumentos complexos sem número definido. Como exemplo: suponhamos que é necessário imprimir a ficha de cadastro de um númexo x de alunos, sendo tal ficha composta de nome, classe, telefone e endereço.

Como fazer?

Simples, misturando as técnicas anteriores, passamos à função um array multi-dimensional, tratando-o dentro da função…simples e direto.

jun 082011
 

No conjunto PHP + Apache, mais especificamente no PHP, o limite de upload padrão é de 2Mb, o que atende a maioria dos usuários.

Porém algumas aplicações podem exigir uploads maiores, assim, há que se alterar o arquivo php.ini, nos seguintes pontos (e provavelmente eles não estarão juntos no seu php.ini):

file_uploads = On
upload_tmp_dir = e:\temp\php\
upload_max_filesize = 25M
post_max_size = 25M
max_input_time = 0
memory_limit=50M

A alteração proposta aumenta para 25Mb o limite de upload.