Instalando o Maven no Windows 8

Estava instalando o Apache Maven no Windows 8 conforme descrito no site oficial: http://maven.apache.org/download.cgi#Windows, porém ao executar o comando mvn -help para testar a instalação, retornava o erro abaixo:

 C:\Users\William G. Comnisky>mvn -version
'mvn' não é reconhecido como um comando interno
ou externo, um programa operável ou um arquivo em lotes.

A solução foi encontrada no Stack Overflow, mas de forma parcial.

Ali sugeria adicionar apenas a variável M2 às Variáveis do Sistema. Tive também que adicionar a M2_HOME (anteriormente adicionada às Variáveis de usuário).

MUITO IMPORTANTE: conforme sugere o site oficial do Maven, você deve abrir uma nova janela do Prompt de Comando após editar suas variáveis de ambiente, caso contrário, se já estiver com uma janela do Prompt aberta, por exemplo, continuará recebendo o mesmo erro citado acima.

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;
    }
}

Programador PHP (Zend Certified Engineer 5.3 – ZEND019473)

Page optimized by WP Minify WordPress Plugin