sexta-feira, 27 de maio de 2016

PhpPgAdmin - corrigindo erro na exportação de dados - Ubuntu 16.04

Observei que a função de exportar dados no PhpPgAdmin não está funcionando para as opções de COPY e SQL, a opção Download gera um arquivo vazio. Resolvi testar opção Exibir, mas apenas é mostrada uma página em branco, sem nenhuma pista do erro.
Procurei na internet por erros de dump no PhpPgAdmin, mas não obtive sucesso.
Buscando um pouco mais, esbarrei com um artigo que ensina instalar e configurar o PhpPgAdmin no ArchLinux e entre as explicações das configurações, uma me chamou a atenção, os arquivos de log. Então, seguindo o error.log do Apache vi que a última linha era exatamente um erro no pg_dump:

/usr/lib/postgresql/9.5/bin/pg_dump: invalid option -- 'i'
Try "pg_dump --help" for more information.

A minha chance de encontrar o erro no PhpPgAdmin ressurgiu, pesquisei um pouco mais e vi que no passado já houve casos de erros nas opções do pg_dump e que elas são carregadas no arquivo:

/usr/share/phppgadmin/dbexport.php

Abrindo o arquivo com o Gedit,

$ sudo  gedit /usr/share/phppgadmin/dbexport.php

Encontrei o erro na linha 76 explicada na linha 75:

// Build command for executing pg_dump.  '-i' means ignore version differences.
$cmd = $exe . ' -i';

Retirando a opção -i e deixando apenas a variável $exe, o erro desapareceu.
$cmd = $exe;

Os dumps do PhpPgAdmin voltaram a funcionar normalmente.

Para completar, pesquisando o a documentação do pg_dump, li que a opção -i foi marcada como deprecated na versão 9.1 do PostgreSQL (https://www.postgresql.org/docs/9.1/static/app-pgdump.html) e na versão atual, 9.5, ela já não aparece mais. Por isso o motivo do erro.

Francisco AC Lima






quinta-feira, 4 de dezembro de 2014

Php CodeSniffer validando seu estilo de código PHP no Eclipse

Quando comecei a programar em 2008 não tinha nenhuma preocupação com o estilo de escrita dos meus códigos, se funcionassem já era uma grande vitória. Só que conforme você vai aprendendo e se aprimorando, chega um momento em que ter um código "funcionando" já não é mais o suficiente, você começa a se preocupar com padrões, estilos, etc.
Como tenho como hábito utilizar o CakePHP foi natural começar a seguir suas regras estilo de codificação (http://book.cakephp.org/2.0/pt/contributing/cakephp-coding-conventions.html).
Para mim estava tudo bem, seguia o estilo do CakePHP e estava satisfeito, mas nunca me preocupei em validar, checar se meus códigos realmente estavam seguindo o estilo corretamente.
O tempo passou mais um pouco e dois artigos me fizeram ver que podia melhorar um pouco mais:
http://br.phptherightway.com/#guia_de_estilo_de_codigo
http://www.fititnt.org/padrao/php-psr.html
No segundo artigo mencionado acima, conheci o PHP CodeSniffer que pode ser instalado como um plugin do Eclipse e com mais um pouco de pesquisa, encontrei um pacote de regras do CakePHP para ser usado no CodeSniffer.


Preparando o Terreno

Para começar, precisamos do Eclipse instalado e configurado para uso com projetos PHP. Tenho um artigo explicando isso em http://linuxnomicro.blogspot.com.br/2014/03/utilizando-o-cakephp-no-eclipse.html. Nesse tutorial usei o Ubuntu 12.04 com o Eclipse Kleper, como troquei de notebook, preparei este novo tutorial com o Ubuntu 14.04 e a nova versão do Eclipse "Luna" já com o plugin PDT instalado http://www.eclipse.org/downloads/packages/eclipse-php-developers/lunasr.
Também temos que instalar o PHP-PEAR que vai baixar o pacote de estilos do CakePHP. Abrindo o gnome-terminal execute o comando:
$ sudo apt-get install php-pear


Instalando o Plugin Php_CodeSniffer no Eclipse

O plugin responsável por habilitar o CodeSniffer para o Eclipse é o PHP Toll Integration (PTI) mantido pelo PHPsrc.
Começamos abrindo a janela de instalação de plugins do Eclipse:
Eclipse - Install New Software
Em seguida adicionamos o repositório PTI http://www.phpsrc.org/eclipse/pti/
Eclipse add pti
  Com o repositório PTI adicionado, marcamos a instalação do PHP CodeSniffer e a PHP PEARLibrary.
Install Pear Library e CodeSniffer
Bom, agora é next, aceitar os termos e aguardar. No final o Eclipse  vai pedir um restart.

Instalando o CakePHP_CodeSniffer e habilitando no PHP_CodeSniffer do Eclipse 

O plugin CodeSniffer do Eclipse já traz alguns pacotes de estilos instalados, nada nos impede de baixar o pacote  do CakePHP_CodeSniffer manualmente e acrescentar dentro da pasta do plugin, mas vou optar por mostrar a instalação seguindo o descrito no site do projeto  http://pear.cakephp.org/ e depois cobfigurar o PEAR no Eclipse. Então, vamos abrir o terminal e seguir os passos indicados:
1. Registrar o canal
$ sudo pear channel-discover pear.cakephp.org
2.  Listar os pacotes disponíveis
$ sudo pear remote-list -c cakephp
3. Instalar
$ sudo pear install cakephp/CakePHP_CodeSniffer
Se der tudo certo, você vai receber a mensagem install:ok no terminal.
CakePHP_CodeSniffer instalado


Bom, agora vamos configurar alterar o PEAR no Eclipse para carregar o CakePHP_CodeSniffer. No Eclipse em Window - Preferences - PEAR clique em New.
PEAR Install Escolha o diretório onde o PEAR está instalado, no Ubuntu fica em /usr/share/php.
/usr/share/php
 Depois, é só aplicar.
PEAR - Apply
 Para que o CodeSniffer funcione no Eclipse, você indicar também onde o seu PHP client está instalado. No Ubuntu /usr/bin/php5.
/usr/bin/php5

Para terminar troque o PEAR interno do plugin CodeSniffer pelo PEAR que você acabou de configurar, aproveite para marcar também o executável do PHP, se não o CodeSniffer não vai funcionar dentro do Eclipse.
Configurar PEAR e PHP no plugin

É isso, está feito.
Vejam um exemplo em funcionamento. Criei um método chamado test() e deixei alguns erros: não indiquei o retorno do método na documentação e o CodeSniffer marcou um alerta(amarelo) e não usei o nome da variável new_Test corretamente e recebi uma marca de erro (vermelho).
PHP CodeSniffer em funcionamento











quarta-feira, 2 de abril de 2014

Instalando o TCPDF no CakePHP 2.4

Existe várias formas de gerar arquivos PDF no PHP, uma delas é através do TCPDF. Neste artigo vou explicar como instalar o TCPDF no CakePHP 2.4. Como exemplo, vamos partir da instalação do Cake explicado em  Utilizando o CakePHP no Eclipse.

Após a instalação do Cake 2.4.6, estamos então com esta página:
CakePHP Instalado

O TCPDF pode ser baixado em http://sourceforge.net/projects/tcpdf/files/, a versão que está sendo usada neste artigo é a 6.0.062.
Depois do download, descompactamos o arquivo e copiamos a pasta tcpdf para app/Vendor em nosso aplicativo.
app/Vendor/tcpdf

Para que os navegadores reconheçam que o arquivo gerado deva ser tratado como um PDF, escolhendo o tipo de aplicação correto,  vamos criar um layout em app/View/Layouts/pdf.ctp.
Página pdf.ctp

Para este teste vamos criar um arquivo em app/Controller chamado EtiquetasController.php e criar dois métodos:
EtiquetasController

Agora as views para os métodos em app/View/Etiquetas
app/View/Etiquetas

Em index.ctp, só precisamos de um link para a página viewPdf.

Bom, agora vamos criar nosso PDF. 
No método viewPdf() temos que indicar o layout e chamar a renderização da página.

  public function viewPdf() {
    $this->layout = 'pdf';
   $this->render();
 }       
 

E na view, carregamos o TCPDF e montamos o arquivo:
<?php 
App::import('Vendor','tcpdf/tcpdf'); 

//carrega o construtor do pdf
$Pdf = new TCPDF();

$Pdf->setPrintHeader(false);

$Pdf->setPrintFooter(false);

$Pdf->SetMargins(10, 20, 0);

$Pdf->AddPage('P','A4');

$html = '
 <h1> PDF gerado pelo TCPDF</h1>
 <p>As configurações para cabeçalho e rodapé foram zeradas</p>';

$Pdf->writeHTML($html);

echo $Pdf->Output('etiqueta.pdf','I'); 

Neste exemplo, antes de adicionar uma nova página, desabilito o cabeçalho e rodapé padrão do TCPDF. E o resultado:

Na página do TCPDF há uma vasta documentação e exemplos de uso.