Pegar Constantes Definidas no PHP Pelo Usuário

Publicado Dica, PHP, PHP 5 em July 22nd, 2010 por Gilberto Albino – Seja o primeiro a comentar

Ao desenvolver uma aplicação precisei fazer uns testes de verificação onde era necessário saber quais constantes eu já havia definido.
Na documentação do PHP existe uma função bem interessante que retorna todas as Constantes declaradas: get_defined_constants.

Entretanto, como a cada nova versão que surge, novos recursos são adicionados, e no meu caso, não prestei atenção na implementação do parametro “categorize” na função get_defined_constants a partir do PHP 5.00, de fato, bem pouco usei esta função, mas quando usei a primeira vez foi com PHP 4.x.x.

Desta forma, agora é possivel pedir ao PHP que mostre as constantes categorizadas por tipo ( mhash, calendar, date,  ftp, etc e tal )  e o melhor de tudo, colocaram a categoria “user“.

Vamos fazer alguns teste:

1) Somente get_defined_constants():

print '<pre>';
print_r( get_defined_constants() );
print '</pre>';

Note que o resultado foi uma constante debaixo da outra.

2) Agora get_defined_constants(true):

print '<pre>';
print_r( get_defined_constants(true) );
print '</pre>';

A coisa começou a melhorar! Temos agora um índice para categorizar.

Se você rolar a página de resultados para baixo até o final, vai encontrar o índice “user“.

Desta forma, para pegar somente as constantes definidas por nós, usuários, basta colocar o resultado de get_defined_constants dentro de uma variavel e chamar a impressão direto a partir do índice “user”.

3) Agora pegando somente as definidas pelo usuário:

print '<pre>';
$constantes = get_defined_constants(true);
print_r( $constantes['user'] );
print '</pre>';

Pronto! O milagre aconteceu e achei as constantes definidas por mim mesmo!

URL’s Amigáveis com PHP e Apache – Um padrão de projeto de software

Publicado Apache, Design Pattern, Dica, PHP, Tutorial em July 19th, 2010 por Gilberto Albino – 1 Comentário

Certo dia um amigo que conheci através deste blog, Scott, me questionou sobre o método que eu utilizo para gerar os URL amigáveis.

Por este motivo me dispus a postar aqui de forma mais simplificada como obter o resultado desejado para se obter URL’s amigáveis.
leia mais »

Bicicleta 2.0

Publicado Besteiras em June 24th, 2010 por Gilberto Albino – Seja o primeiro a comentar

Olha só que besteira, mas estes dias achei a Bicicleta 2.0.
É isto mesmo, é uma bicicleta nos padrões que a gente conhece para design na web 2.0 (gargalhadas )

Veja a imagem:

[ Dica jQuery ] – Como resetar um formulário com jQuery

Publicado Dica, Javascript, jQuery em June 23rd, 2010 por Gilberto Albino – 9 Comentários

Sim! Pegunta simples não é mesmo?
Bom, ao que tudo indica, o método reset() não serve para isto, embora seja bem sugestivo!

Então, fui inventar um cadastro de pesquisa de satisfação em Ajax na empresa que trabalho, e, é claro, precisava resetar o formulário após o cadastro para sugestivamente deixar o formulário limpo novamente.

Bom, jquery é cheia de utilidades e frescuras e como eu iniciei o post falando de reset(), a ideia é que ele deveria funcionar:

// E no final me engaram?
$('form').reset()

Então, para resolver esta situação, acabei por usar a lógica das coisa fazer meu jeito:

$(':input')
.not(':button, :submit, :reset, :hidden')
.val('')
.removeAttr('checked')
.removeAttr('selected');

Mas, é claro, fui verificar se algum louco na face da terra já não teria inventado um plugin para resolver isto, e, como suspeitei (risos), já inventaram:

// santa criatividade!
jQuery.fn.reset = function() {
	this.each(function(){
		if($(this).is('form')) {
			var button = jQuery(jQuery('<input type="reset" />'));
			button.hide();
			$(this).append(button);
			button.click().remove();
		} else if($(this).parent('form').size()) {
			var button = jQuery(jQuery('<input type="reset" />'));
			button.hide();
			$(this).parent('form').append(button);
			button.click().remove();
		} else if($(this).find('form').size()) {
			$(this).find('form').each(function(){
				var button = jQuery(jQuery('<input type="reset" />'));
				button.hide();
				$(this).append(button);
				button.click().remove();
			});
		}
	})
	return this;
};

[ Dica PHP ] Imagens aleatórias em PHP

Publicado Dica, PHP em June 12th, 2010 por Gilberto Albino – 3 Comentários

Já pensou em exibir imagens aleatórias em um site no carregar da página?
Existem várias formas de se fazer isto, mas a uma bem simples é criar um array com os nomes da imagem e sortear quem vai aparecer.

Vamos lá.

<?php
/**
 * Script para listar uma imagem aleatóriamente
 */
/**
 * Indexa a lista de imagens
 * a ser sorteada aleatoriamente
 * @var $imagem array
 */
$imagem = array(
    'nome-01.jpg',
    'nome-02.jpg',
    'nome-03.jpg',
    'nome-04.jpg',
    'nome-05.jpg'
);

/**
 * count() conta a quantidade de chaves no array
 * @var $totalImagens int
 */
$totalImagens = count( $imagem );

/**
 * mt_rand() sorteia um numero
 * entre 1 e o total de imagens no array
 * @var $numeroRandomico int
 */
$numeroRandomico = mt_rand( 1, $totalImagens );

/**
 * Exibição Teste
 */
printf(
    '<img src="%s" />',
    $imagem[ ( $numeroRandomico - 1 ) ] );

/**
 * Fim do script
 */

O que posso definir no ini_set() do php?

Publicado PHP em June 9th, 2010 por Gilberto Albino – 3 Comentários

Bom, estes dias eu pensei numa aplicação mais robusta que precisasse de alterações em muitas configurações do php, no entanto, tive que considerar o fato de muitos desenvolvedores não terem acesso ao arquivo php.ini, e me lembrei de uma situação que vivi alguns meses atrás: “O que posso definir no ini_set()“.

Para mais informações sobre ini_set, acesse a documentação da mesma em http://www.php.net/manual/pt_BR/function.ini-set.php.

Então, vamos explicar algumas coisas.

Diretivas do PHP

Diretivas são informações, tipo constantes, que o compilador usa para saber o que deve fazer com o código em questão na hora de realizar algum processamento. Geralmente, estas diretivas ficam em um arquivo de configuração (“.ini”), e que o administrador do sistema pode modificar para se adaptar às suas necessidades de processamento.

No php.ini o administrador pode modificar muita coisa da linguagem, e o desenvolvedor, pode usar da função ini_set() para alterar algumas configurações básicas dentro de um arquivo bootstrap ( bootstrap é um arquivo com algumas configurações da aplicação que pertencem propriamente ao PHP ou à aplicação em si ).

A chamada é simples:

init_set('diretiva', 'valor');

O uso mais comum é de display_errors.

Entrentanto, se quiséssemos modicar outras diretivas, quais poderíamos? Bom, ai está a questão, e precisamos entender como o PHP define as prioridades delas.

Existem basicamente 4 tipos de diretivas no PHP, são elas, que a referência define como “modos”:

PHP_INI_USER – A entrada pode ser definida nos scripts do usuário (como com ini_set()) ou no registro do Windows
PHP_INI_PERDIR – A entrada pode ser definida no php.ini, .htaccess ou httpd.conf
PHP_INI_SYSTEM – A entrada pode ser definida no php.ini ou httpd.conf
PHP_INI_ALL – Entrada pode ser definida em qualquer lugar

Então já temos uma luz ai. PHP_INI_USER e PHP_INI_ALL  possuem permissão para serem definidas num arquivo bootstrap ou em qualquer arquivo php.

Onde achar estas diretivas?

O PHP possui um lista de diretivas, bem generosa, que pode ser acessada neste link do manual:

http://www.php.net/manual/pt_BR/ini.list.php

Olhar para esta lista não vai ajudar em nada, se não entender para o que serve, e onde aplicá-las, mas quanso se sabe o que quer, faz sentido!

[ Dica PHP ] Como encontrar strings dentro de string ou arquivo

Publicado Dica, PHP em June 6th, 2010 por Gilberto Albino – Seja o primeiro a comentar

Eh, coisa besta!

Estes dias precisei disto, e embora, simples, tem quem não saiba por não dominar expressões regulares.


<?php

/*
 Procura todas as ocorrências
 dentro do string passado
 no segundo parametro
*/

$string = "inicio Esta é uma string a ser inspecionada fim"; // poderia ser um arquivo file_get_contents('nome-arquivo.extensao')

preg_match_all("/inicio(.*)fim/", $string, $resultados );

foreach ( $resultados[1] as $resultado ) {
print $resultado . '<br />';
}

// fim

Prezado Técnico

Publicado Besteiras em May 7th, 2010 por Gilberto Albino – 1 Comentário

Recebi um emails de um parceiro no serviço, e decidi postar aqui.

Segue abaixo a OS, do sujeito:

Prezado Técnico:

Troquei meu programa [Noiva 1.0] pelo [Esposa 1.0]
Verifiquei que o Programa gerou um aplicativo inesperado
chamado [ Bebê.exe ] que ocupa muito espaço no HD.
Por outro lado, o [Esposa1.0] se auto-instala em todos os outros programas
e é carregado automaticamente assim que eu abro qualquer aplicativo.
Aplicativos como [Cerveja_Com_A_Turma 0.3],
[Noite_De_Farra 2.5] ou [Domingo_De_Futebol 2.8],
não funcionam mais, e o sistema trava assim que eu tento carregá-los novamente.
Além disso, de tempos em tempos um executável oculto (vírus) chamado [Sogra 1.0] aparece, encerrando Abruptamente a execução de um comando.
Não consigo desinstalar este programa. Também não consigo diminuir o espaço ocupado pelo [Esposa 1.0] quando estou rodando meus aplicativos preferidos.
Sem falar também que o programa [Sexo 5.1] sumiu do HD.
Eu gostaria de voltar ao programa que eu usava antes,
o [Noiva 1.0], mas o comando [Uninstall.exe] não funciona adequadamente.
Poderia ajudar-me? Por favor!

Ass:
Usuário Arrependido

Multiplos operadores OR em uma cláusula WHERE na consulta SQL

Publicado MySQL em May 5th, 2010 por Gilberto Albino – Seja o primeiro a comentar

Me deparei com uma necessidade recentemente, que embora parecesse tão óbvia, eu nunca tinha precisado fazer.
Aninhar uma consulta com vários operadores OR seguido de um operador AND no final, foi onde descobri sem querer, na verdade, nem sei onde tem isto na documentação do MySQL, por exemplo:

Se executar a consulta:

SELECT * FROM tabela
WHERE
    campo1 = 'valor1'
OR
   campo1 = 'valor2'
OR
   campo1 = 'valor3'
AND
   campo2 = '0'

O resultado não vai ser o desejado, porque os operadores OR, vão anular o efeito do operador AND, então como resolver isto?
Bom, ai apareceu a mágica que descobri sozinho, colocar a parte dos operadores OR dentro de parenteses:

SELECT * FROM tabela
WHERE
(
       campo1 = 'valor1'
   OR
       campo1 = 'valor2'
   OR
       campo1 = 'valor3'
)
AND
   campo2 = '0'

Agora sim, a consulta vai verificar os operadores OR e incluir o operador AND!

[ Dica Javascript ] – Imprimir a página ao carregar a página

Publicado Dica, Javascript, jQuery em April 21st, 2010 por Gilberto Albino – Seja o primeiro a comentar

Utilize o código abaixo quando você precisar que a janela de impressão apareça logo que uma página é carregada (evento “onload”).

Abaixo seguem duas formas, a primeira em jQuery e a segunda em código convencional.

Carregue a biblioteca jQuery e abra a tag SCRIPT do bloco de código a ser utilizado:
* Nota: Se não for utilizar jQuery, remova as declarações condicionais!

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
/**
 * Imprimir a página ao carregar a página
 */
// Versão jQuery
if( jQuery ) {
	jQuery(
		function() {
			if ( typeof( window.print ) != 'undefined' ) {
				window.print();
			}
		}
	);
// Versão convencional
} else {
	window.onload = function()
	{
		if ( typeof( window.print ) != 'undefined' ) {
			//window.print();
		}

	}
}
</script>

Já precisei disto, espero que alguém também precise!