Arquivo

Textos com Etiquetas ‘php’

Vaga desenvolvimento para Joinville

17, janeiro, 2010 Sem comentários

Olá.

Temos disponível uma vaga para desenvolvimento web em Joinville – SC.

Requisitos:

  • Conhecimento em PHP 5;
  • Conhecimento em Javascript;
  • Bom conhecimento de lógica de programação;
  • Flexibilidade para adaptar-se à mudanças;

Desejável:

  • Conhecimento em Zend Framework 1.8+;
  • Conhecimento em framework Javascript (preferenciamente ExtJS);
  • Experiência com RIA;

Contato: enviar e-mail para kassner@gmail.com.

Até mais.

Javascript e permissões de acesso

20, outubro, 2009 Sem comentários

Olá a todos.

Depois de algum tempo sem postar (ocupado em alguns projetos), estou de volta. Desta vez trago uma espécie de idéia que estou tentando aperfeiçoar e qualquer incremento à ela será muito bem vindo.

Estou entrando em um projeto onde utilizamos ExtJS, uma biblioteca Javascript que permite a criação de interfaces ricas, principalmente para desenvolver sistemas web. Um exemplo básico você pode encontrar no site do ExtJS ou neste pequeno aplicativo base que desenvolvi (usuário: admin, senha: 1234).

Se você reparar neste aplicativo base, existe uma área onde configuram-se permissões aos grupos de usuários (atrelados aos usuários), de tal modo que a idéia é que se um usuário não tenha acesso à determinada área (por exemplo, adicionar um novo usuário), a opção não seja exibida (e preferenciamente nada referente seja carregado para evitar Javascript Injection).

No lado do servidor, que processa as requisições Ajax, nenhum problema. Se o usuário logado não tem permissão para listar os grupos, o acesso à essa lista é bloqueado, com uma classe simples que desenvolvi:

<?php

class DMG_Acl {
	// algumas implementações anteriores
	public function canAccess ($rule) {
		/* aqui são executadas algumas verificações no banco de dados para determinar se o usuário logado atualmente tem acesso à área que eu designo, referenciada em $rule dentro deste método. A saída é basicamente true para acesso permitido e false para acesso negado. */
	}
	// algumas implementações posteriores
}

Certo. A questão é como fazer com que o Javascript utilizado para montar as interfaces no ExtJS seja mínimo e seguro, carregando apenas o necessário, sem furos para possíveis injeções de Javascript.

A solução xula que encontrei foi, juntar o Javascript ao PHP, e fazer verificações internas. Por exemplo, se o usuário não tem acesso à regra 10, que permite o acesso à inserção de novos usuários, o método que utilizei fica próximo à:

<?php if (DMG_Acl::canAccess(10)): ?>
			{
				text: 'Adicionar usuário',
				iconCls: 'silk-add',
				scope: this,
				handler: this._onBtnNovoUsuarioClick
			},
<?php endif; ?>

Ok. Eu processo os arquivos como PHP normalmente, e recebo em Javascript somente o código do qual as permissões do usuário deixam, logo, o código acima só seria retornado caso o usuário possuir permissão de acesso na regra 10.

O grande problema: essa implementação é falha durante a mudança de permissões. Se um usuário retirar as permissões de outro usuário enquanto este está utilizando o sistema, a os botões ou links não irão sumir. No lado do servidor a regra surtirá efeito, porém não na interface.

Outro grande problema é a mistura do PHP com o Javascript e uma pequena gambiarra para fazer esse sistema de permissões funcionar, que não me agrada nem um pouco.

Queria deixar aqui uma dica para quem precisa de uma implementação deste tipo, mas também um alerta, que, acredito eu, não seja a maneira mais eficaz de se fazer isso, e ainda, um pedido de ajuda à quem tiver idéias para resolver este problema de forma mais correta.

Até mais,
Rafael.

Problema: Cotação de moedas

23, junho, 2009 6 comentários

Olá a todos.

Esta semana quebrei a cabeça com cotações de moedas. Precisava obter a cotação do dia anterior e exibir no site. Parece algo simples, mas precisava disto automatizado. Lembrei que no República Virtual existia (verbo no passado, para minha felicidade) um Webservice de cotação.

A solução, apesar de não ser muito eficaz, é pegar do próprio HTML de outros sites, já que nenhum deles fornece algum tipo de WebService. Abaixo um exemplo para pegar as cotações do site de economia da UOL, porém, isso pode parar de funcionar a qualquer momento:

<?php

$s = file_get_contents("http://economia.uol.com.br/cotacoes/");

$a = explode("<div class=\"col-1-direita\">", $s);
$b = explode("<script", $a[1]);
$c = str_replace("<th>VARIAÇÃO</th>", "", trim($b[0]));
$c = eregi_replace("<td><span class=\"variacao\">(.[0-9,%]*)</span></td>", "", $c);
$c = explode("\n", $c);

$bov = file_get_contents("http://cotacoes.economia.uol.com.br/index.html");
$d = explode("<tbody>", $bov);
$e = explode("<td title=", $d[1]);
$f = explode(">", $e[1]);
$g = explode("<", $f[1]);

$dc = explode("<td>", $c[8]);
$dp = explode("<td>", $c[11]);
$dt = explode("<td>", $c[14]);
$eu = explode("<td>", $c[17]);

$dolar_comercial_compra = substr($dc[1], 0, strpos($dc[1], "<"));
$dolar_comercial_venda = substr($dc[2], 0, strpos($dc[2], "<"));
$dolar_paralelo_compra = substr($dp[1], 0, strpos($dp[1], "<"));
$dolar_paralelo_venda = substr($dp[2], 0, strpos($dp[2], "<"));
$dolar_turismo_compra = substr($dt[1], 0, strpos($dt[1], "<"));
$dolar_turismo_venda = substr($dt[2], 0, strpos($dt[2], "<"));
$euro_compra = substr($eu[1], 0, strpos($eu[1], "<"));
$euro_venda = substr($eu[2], 0, strpos($eu[2], "<"));
$indice_bovespa = $g[0];

?>

O Banco Central fornece um CSV com diversas cotações, porém sua URL vai variando conforme o dia. Quem tiver interesse de utilizar, segue o endereço base: http://www4.bcb.gov.br/pec/taxas/batch/cotacaomoedas.asp?id=txtodas&id=txtodas. Vale lembrar que o Banco Central não informa valores para Dólar Turismo e Dólar Paralelo.

Até mais,
Rafael.

Palestra de Frameworks PHP no PHP SC Conf

30, maio, 2009 2 comentários

Olá.

Nesta sexta e sábado (29 e 30 de maio) houve o PHP SC conf, no campus da Univali em Itajaí. Rolaram diversas palestras sobre PHP e derivados. Eu levei uma palestra sobre Frameworks PHP, onde houve uma discussão no final, junto com o Elton Minetto da Drimio, o Silvano Girardi do PHP SC e outras pessoas da platéia.

Quem quiser, pode efetuar o download dos slides da palestra de Frameworks PHP (ou visualizar no SlideShare.net), e se tiverem dúvidas sobre Frameworks, precisarem de ajuda ou seja lá o que for sobre Frameworks, entre em contato comigo (e-mail, telefone, skype, twitter, sinal de fumaça, etc).

Atenciosamente,
Rafael.

Iconv: convertendo a codificação de uma String

22, maio, 2009 1 comentário

Olá a todos.

Durante o desenvolvimento do Guiaville, nos deparamos com muitos problemas. Um deles foi a codificação de caracteres, o qual apresentou um comportamento estranho depois que publicamos. Como os testes foram feitos fora de produção, não conseguimos detectar o problema.

Antes da correção, se você procurasse por tattoo no Guiaville, um dos resultados apresentava o seguinte problema:

Problema de codificação no Guiaville

Antes das reticências,  existe um ícone de ? (no Mozilla Firefox). Bem, isso aconteceu por que cortamos o resultado para aparecerem apenas os primeiros 190 caracteres da descrição. Até aí tudo certo, se não fosse o fato dos acentos serem contados como dois caracteres. É só fazer o teste com a função strlen(). Cada letra acentuada (ou cedilha) equivale a dois caracteres. Isso é claro, em UTF-8, codificação que trabalhamos.

A solução é o iconv, uma biblioteca de conversão de codificações. Para comprovar a eficácia, façamos o teste:

<?php
$texto = "Olá, isto é um teste de codificação";
echo "Tamanho de \$texto com strlen(): " . strlen($texto);
echo "<br />";
echo "Tamanho de \$texto com iconv_strlen(): " . iconv_strlen($texto, 'UTF-8');
?>

O resultado:

Tamanho de $texto com strlen(): 39
Tamanho de $texto com iconv_strlen(): 35

Então, para podermos efetuar o corte dos 190 primeiros caracteres da descrição, utilizamos a função iconv_substr(). Veja o comparativo:

<?php
$texto = "Olá, isto é um teste de codificação";
echo substr($texto, 0, 35);
echo "<br />";
echo iconv_substr($texto, 0, 33, 'UTF-8');
?>

O resultado:

Olá, isto é um teste de codifica�
Olá, isto é um teste de codificaç

Desta maneira, podemos cortar a string onde quisermos, sem nos preocupar com o maldito caracter �.

Até mais,
Rafael.