PHPThumb – Your GD installation does not support JPG image types

Category : PHP, Programação

Uma solução rápida para quem utiliza a PHPThumb em seus projetos e de uns tempos pra cá vem se deparando com mensagens semelhantes a esta:

Fatal error: Uncaught exception 'Exception' with message 'Your GD installation does not support JPG image types' in '(...)\phpthumb\ThumbBase.inc.php:165 Stack trace: #0 (...)\phpthumb\GdThumb.inc.php(1081): ThumbBase->triggerError('Your GD install...') #1 (...)\phpthumb\GdThumb.inc.php(101): GdThumb->verifyFormatCompatiblity() #2 (...)\phpthumb\ThumbLib.inc.php(127): GdThumb->__construct('D:/xampp/htdocs...', Array) #3 (...)\phpthumb\ThumbBase.inc.php on line 165

A solução é mais simples do que você pode imaginar. Se você tem certeza que sua biblioteca GD está instalada corretamente, tente o seguinte:

No arquivo GdThumb.lib.php, procure por volta da linha 1060 pelo método verifyFormatCompatiblity(). Substitua as linhas:

case 'JPG':
case 'PNG':
$isCompatible = $gdInfo[$this->format . ' Support'];
break;

Pelo código abaixo:

case 'JPG':
$isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
break;
case 'PNG':
$isCompatible = $gdInfo['PNG Support'];
break;

O método completo deverá ficar assim:

	protected function verifyFormatCompatiblity ()
	{
		$isCompatible 	= true;
		$gdInfo			= gd_info();

		switch ($this->format)
		{

			case 'GIF':
				$isCompatible = $gdInfo['GIF Create Support'];
				break;
      case 'JPG':
        $isCompatible = (isset($gdInfo['JPG Support'])) ? $gdInfo['JPG Support'] : $gdInfo['JPEG Support'];
        break;
      case 'PNG':
        $isCompatible = $gdInfo['PNG Support'];
        break;
      default:
				$isCompatible = false;
		}

		if (!$isCompatible)
		{
			$this->triggerError('Your GD installation does not support ' . $this->format . ' image types');
		}
	}

Salve o arquivo e teste.

Resolvendo os problemas com datas no PHP + MySQL

1

Category : MySQL, PHP

Muitos iniciantes, e até mesmo alguns programadores experientes tem algum problema quanto o assunto é o armazenamento de datas em banco de dados MySQL, utilizando o PHP. Isso porque o MySQL armazena os dados no campo classificado com Date de uma maneira não muito condizente com aquilo que estamos acostumados. Vamos pegar como exemplo o dia 06 de Novembro de 2009 (aniversário da Isabella! Te amo, minha princesa!). Nós podemos facilmente abreviá-la para o formato 06/10/2009.

Imagine um formulário onde essa data é informada nesse formato. Ao ser feio o INSERT no MySQL o resultado, ela seria armazenada como um valor nulo, ou na melhor das hipóteses em algo totalmente diferente daquilo que você pretendia. Enquanto nós costumamos utilizar datas abreviadas usando o formato DIA/MÊS/ANO, o MySQL o faz utilizando o formato ANO-MES-DIA. Qualquer coisa que venha fora desses padrões, será completamente ignorado pelo MySQL.

Já vi alguns tentando contornar esse problema tratando a data no PHP antes de enviá-la para ser salva no MySQL. Esse tratamento consiste basicamente em inverter as posições dos algarismos e trocar as barras por hífens. Algo mais ou menos assim:

<?php

$data="17/08/2009";
$arr=explode('/',$data);
$data=$arr[2].'-'.$arr[1].'-'.$arr[0];

?>

O exemplo acima até que funciona, apesar do POG… Outra variação desse método é a utilização de Regex ou até mesmo as funções de tratamento de strings que o PHP fornece.

Eu, pessoalmente, sou adepto do que costumo chamar de “trabalho preguiçoso”. Não entenda “preguiçoso” como algo mal feito, ou feito com má vontade; mas sim como a busca de uma solução mais rápida, clara e objetiva, e que consuma o menor tempo possível. ;-)

Então porque você não deixa o MySQL fazer esse trabalho pra você? Em vez de você quebrar a cabeça com a criação de códigos, funções, classes e loops, porque não utilizar as funções de tratamento de Data do MySQL?

Basta fazer o seguinte:

INSERT INTO nomedatabela (seucampodate) VALUES (STR_TO_DATE('06/11/2009', '%d/%m/%Y'));

Note o uso da função STR_TO_DATE(). Ela exige basicamente dois parâmetros:

- O primeiro é a string contendo a data, seja em qual formato for.

- O segundo parâmetro é o segredo para a mágica da coisa. Ele recebe a máscara que o MySQL deve utilizar para interpretar a data. Nesse caso, %d significa o dia (dois dígitos), %m o mês (dois dígitos) e %Y o ano (com quatro dígitos).

A conversão da data abreviada como estamos acostumados, para o formato do MySQL será feita automaticamente.

Confira também outras funções para o tratamento de datas no MySQL acessando a documentação do MySQL, clicando aqui.

10 dicas para programar melhor em PHP

Category : PHP, Sem categoria

Esta manhã eu estava navegando pela internet quando encontrei este artigo interessante. Estas dicas estão no no site www.vivaolinux.com.br, e foram publicadas por Cândido Tominaga.

1 – Usar echo ao invés de print.
2 – Usar argumentos no echo ao invés de concatenar.

echo 'Meu programa ',$nome,' funciona perfeitamente.'

3 – Prefira sempre usar ‘ ao invés de “, pois quando se usa aspas simples o php trata como uma string literal, ou seja, não vai interpretá-la. Portanto, se não precisar, não use aspas duplas.

$registros = 100;
echo 'Total de $registros'; // resultará em Total de $registros
echo "Total de $registros"; // resultará em Total de 10

4 – Use require ao invés de require_once.

5 – Evite de usar @ antes das variáveis ou outros lugares para suprimir as mensagens de erros.

6 – Em array, $linha['id'] é até 7 vezes mais rápido do que $linha[id].

7 – Evite de usar for($i=0; $i < count($_linhas); $i++. Use:

$total = count($_linhas);
for($i=0; $i < $total; $i++)

Pois o for sempre irá executar a função count, pesando na velocidade do seu programa.

8 – Habilite o mod_deflate do apache, você poderá ganhar consumo de banda, ou seja, ele vai comprimir os dados para ser enviado para o cliente (navegador). Dependendo da página, poderá ter uma compressão perto dos 90%. Assim sendo, economia de banda, e carregamento mais rápido para o cliente.

9 – Prefira sempre usar HTML se não tiver nada de dinâmico na sua página, pois scripts PHP podem ser de 2-10 vezes mais lento.

10 – Com uso de banco de dados, também prefira por usar cache de objetos ou resultados, se está tendo muitas consultas no Banco de Dados, pode ser que uma hora o seu banco de dados não suporte muitas requisições simultâneas, então com cache poderá diminuir em muito estas requisições e assim melhorando a velocidade de respostas. Procure por memcache, este é bom para isso.

Link para o post original

Economizando nos caracteres

1

Category : PHP

Cada vez mais me convenço de que a programação é uma arte! E como cada artista tem seu próprio estilo, cara programador é capaz de desenvolver seu próprio método de organizar seu código fonte.

É muito comum em alguns sistemas, dependendo do estudo de caso, testar a existência de uma determinada variável antes de exibí-la na tela. E cada programador tem sua forma favorita de fazer isso em PHP. Seja com if em sintaxe clássica:

if(isset($menu)){
print($menu);
}

Ou uma forma mais resumida, em casos simples:

if(isset($menu)) print($menu);

Outro método muito utilizado utilizado é o if ternário:

echo isset($menu) ? $menu : '';

Hoje pela manhã, recebemos no grupo de discussão sobre o CodeIgniter, uma sugestão do nosso amigo Edinho era basicamente substituir esta sequência de aninhamentos por um código simples, de apenas uma linha:

isset($menu) AND print($menu);

Em teoria, o PHP só executa o segunto teste (após o AND) se o primeiro for verdadeiro. Ou seja, a variável $menu só será exibida se o valor retornado por isset() for true, caso contrário o print() nem será executado.

Um outro exemplo:

$a=1;
true OR $a=2;
echo $a; //imprimirá 1

O resultado de $a será 1, já que a primeira condição é verdadeira. Caso fosse falsa, o código após o operador OR seria executado, alterando assim o valor de $a para 2.

Um terceiro caso:

!empty($valor) OR $valor=3;

Em palavras, a variável $valor não pode ser vazia ‘ou’ será atribuido 3 a ele.

Esse método de programação é muito utilizado em Ruby, e também incentivado no framework Kohana. Mas o pessoal do Zend Framework pregam um estilo mais tradicional de programação, onde são utilizados <?php echo $var; ?> em vez do simpático <?= $var; ?>.

Talvez esse possa não ser o mais eficaz dos métodos; talvez você prefira utilizar métodos de verificação mais simples de ler; mas em uma coisa temos que concordar: programadores são verdadeiros artistas! ;-)

Switch to our mobile site