Exibindo os valores de uma SQL com Doctrine 1.2x

Ao criar uma query com DQL (Doctrine Query Language), talvez você queira dar uma olhada na SQL gerada. Isso é possível através do comando abaixo:

var_dump($query->getSqlQuery());

Porém, no lugar dos valores das colunas (no caso do Where idade >= 18, por exemplo), exibe sinais de interrogação (prepared statement).

Para exibir os valores reais utilizados na DQL, basta utilizar o seguinte snippet:

$vals = $query->getFlattenedParams();
foreach(explode('?', $query->getSqlQuery()) as $i => $part) {
    $sql = (isset($sql) ? $sql : null) . $part;
    if (isset($vals[$i])) $sql .= $vals[$i];
}
 
echo $sql;

MySQL: Unknown or incorrect time zone: ‘America/Sao_Paulo’

Ao tentar definir o timezone em uma conexão através do seguinte comando:

SET time_zone='America/Sao_Paulo';

Estava recebendo o seguinte erro:

  • Unknown or incorrect time zone: ‘America/Sao_Paulo’

Para resolver (no Ubuntu), basta executar o seguinte comando:

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql

Update (2013-03-01):

Caso você não possua permissão para executar o comando acima, nem possibilidade de definir/alterar o default-time-zone (no caso de RDS), uma alternativa pode ser usar o comando abaixo na sua conexão (sempre antes de executar seu comando insert/select/update/delete, por exemplo):

SET time_zone = 'Brazil/West';

Lista de timezones do Brasil para o MySQL:

  • Brazil/Acre
  • Brazil/DeNoronha
  • Brazil/East (utilize esse para o Horário de Brasília)
  • Brazil/West

Zend Studio 9 + SVN 1.7 (JavaHL)

Como já foi a segunda vez que tive que repetir o procedimento, segue passo a passo abaixo para o Zend Studio (ZS) 9 no Ubuntu Linux (12.04):

  • Clique em Help -> Install New Software…
  • Na caixa Work with, cole: http://community.polarion.com/projects/subversive/download/eclipse/2.0/update-site/ e pressione Enter
  • Marque a opção Native JavaHL 1.7 Implementation (Optional) e siga…
  • Após o plugin ser instalado, clique em Restart Now
  • Assim que o ZS abrir novamente, clique em Window -> Preferences
  • Abra a guia Team e clique em SVN
  • Clique na aba SVN Connector, e na dropdown selecione o JavaHL 1.7 instalado anteriormente

O JavaHL é uma alternativa ao SVNKit, que encontra-se disponível na versão 1.7.4 no ZS 9.

Fonte: SVN 1.7+ Repos and Zend Studio 9

Composer segmentation fault

Estava tentando atualizar o ZF2, porém ao executar o update do composer.phar recebia a seguinte mensagem:

./composer.phar update -v
Loading composer repositories with package information
Updating dependencies
  - Updating zendframework/zendframework dev-master (e5167b => d33aed)
    Checking out d33aed62fd71d1b5f57ac480e4e8aedfa6a11f44
    Pulling in changes:
Falha de segmentação

O código de erro:

echo $?
139

Versão do Composer:

./composer.phar -V
Composer version aedeb0f

A SOLUÇÃO
Apesar do composer.phar ser executável, ocorria o erro citado anteriormente.
Bastou executá-lo “através” do PHP para resolver o problema:

php composer.phar update
Loading composer repositories with package information
Updating dependencies
  - Updating zendframework/zendframework dev-master (e5167b => d33aed)
    Checking out d33aed62fd71d1b5f57ac480e4e8aedfa6a11f44
 
Writing lock file
Generating autoload files

PPA para Subversion 1.7

Em projetos com SVN, normalmente desenvolvo utilizando Eclipse + Subversive. Esses dias, ao tentar fazer um svn switch via linha de comando, recebi a seguinte mensagem:

svn: This client is too old to work with working copy '.';
please get a newer Subversion client

A versão que estava instalada era a última disponível no repositório do Ubuntu Precise (12.04), ou seja, versão 1.6.17:

$ svn --version
svn, versão 1.6.17 (r1128011)
   compilado Dec 17 2011, 16:12:52

Conforme site oficial do Subversion, a última versão estável disponível até o momento é a 1.7.6 (lançada dia 15/08/20120).

O jeito mais fácil de atualizar a versão, é adicionar um PPA:

$ sudo apt-add-repository ppa:dominik-stadler/subversion-1.7
$ sudo apt-get update && sudo apt-get install subversion

Se tudo der certo, execute o comando abaixo, e o retorno deve ser parecido com o seguinte:

$ svn --version
svn, versão 1.7.6 (r1370777)
   compilado Aug 20 2012, 15:13:17

Erro ao instalar a extensão PECL/Gearman

Estava recebendo o seguinte erro ao tentar instalar a extensão Gearman presente na PECL (não a Net_Gearman do PEAR):

not found
configure: error: Please install libgearman
ERROR: `/tmp/pear/temp/gearman/configure' failed

Como utilizo Ubuntu Precise (12.04), tentei instalar apenas a libgearman6, mas não resolveu. Para corrigir o problema, foi necessário rodar o seguinte comando:

$ sudo apt-get install libgearman-dev

Feito isso, basta executar novamente a instalação via pecl.

Ao final da instalação, percebi que a extensão não foi incluída automaticamente nas configurações do PHP (veja nas últimas duas linhas abaixo):

Build process completed successfully
Installing '/usr/lib/php5/20090626/gearman.so'
install ok: channel://pecl.php.net/gearman-1.0.3
configuration option "php_ini" is not set to php.ini location
You should add "extension=gearman.so" to php.ini 

Seguindo o padrão do Ubuntu, que armazena os arquivos de configuração de extensões (.ini) na pasta /etc/php5/apache2/conf.d/, executei o seguinte comando:

$ echo "extension=/usr/lib/php5/20090626/gearman.so" | \
sudo tee -a /etc/php5/apache2/conf.d/gearman.ini

Em seguida, é só reiniciar o servidor:

$ sudo service apache2 restart

Continue reading

Fatal error utilizando Xdebug e SoapClient

Ao instanciar o Zend_Soap_Client (que utiliza o SoapClient) informando a URL de um WSDL inexistente, não conseguia tratar o erro. Percebi que ao invés de uma Exception, estava retornando um ‘PHP Fatal error: SOAP-ERROR: Parsing WSDL: Couldn’t load from…’, e isso explicava o motivo de não estar caindo no catch do try que circundava a instância.

Já existe um bug aberto no Mantis do Xdebug.

Paliativamente, basta desabilitar o Xdebug antes de instanciar e/ou utilizar o Zend_Soap_Client:

class Webservice_Client
{
    protected $xdebug = false;
 
    public function __construct()
    {
        if (function_exists('xdebug_is_enabled') && xdebug_is_enabled())
        {
            $this->xdebug = true;
        }
 
        if ($this->xdebug && function_exists('xdebug_disable'))
        {
            xdebug_disable();
        }
 
        $this->client = new Zend_Soap_Client('http://localhost');
    }
 
    public function __call($service, $args)
    {
        try
        {
            $this->response = $this->client->$service($args[0]);
        }
        catch (SoapFault $e)
        {
            $this->throwException($e, $service);
        }
 
        if ($this->xdebug && function_exists('xdebug_enable'))
        {
            xdebug_enable();
        }
 
        return $this;
    }
}

Ubuntu Server 10.10 + Jenkins CI + PHP QA Tools

No início do ano passado (Março/2011) disponibilizei a VM de um servidor de integração contínua utilizando Ubuntu Server 10.10 e Jenkins, com (quase) todas ferramentas de QA inclusas, pronto para uso.

Para quem já baixou a VM, o usuário e senha para autenticar-se no Ubuntu é: jenkins.
(Ubuntu user/password: jenkins).

Para quem ainda não baixou, algumas opções:

  1. Torrent: http://thepiratebay.se/torrent/6264129
  2. Dropbox (HTTP): http://t.co/nfOA9Nb2 (pode ficar temporariamente indisponível devido excesso de tráfego)
  3. 4shared (HTTP): http://goo.gl/qT01a (agradecimentos ao Kassner por publicar)

Após baixar, recomendo executar no terminal:

sudo apt-get update --fix-missing && \
    sudo apt-get dist-upgrade -y
sudo pear update-channels && sudo pear upgrade --alldeps
sudo pecl update-channels && sudo pecl upgrade --alldeps

 

Configurações Gerais da VM:

  • Imagem da VM para Virtualbox;
  • Ubuntu Server 10.10 32bits;
  • Apache 2;
  • Jenkins CI;
  • PHP 5.3 (with CLI);
  • MySQL 5.1;
  • PostgreSQL 8.4;

Para acessar o Jenkins, basta informar a seguinte URL no navegador:
http://{IP}:8080

Caso não funcione, verifique se o Jenkins está rodando na máquina virtual.
Caso não esteja, execute o seguinte comando:

java -jar jenkins.war

Os créditos da configuração do Jenkins são do Sebastian Bergmann, através do Template for Jenkins Jobs for PHP Projects.

Programador PHP (Zend Certified Engineer 5.3 – ZEND019473)

Page optimized by WP Minify WordPress Plugin