E aí pessoal, tudo bom?
Andei meio sumido esses dias pois mudei de emprego e minha vida está cheia de novidades, tenho tido pouco tempo em casa para criar.
Hoje vou falar um pouquinho sobre os problemas de incompatibilidade que vocês devem passar ou já passaram ao tentar migrar o seu servidor do PHP 5.x para a versão 5.3.
Felizmente a lista de coisas a se mudar não é grande e eu diria que 95% dos sites funcionarão bem, sem apresentar erros após a atualização.
Mas vamos a uma listinha de itens que vocês podem atentar para resolver qualquer problema que venha a aparecer no topo do seu site, te deixando desesperado:
- A nova API interna de interpretação de parâmetros foi aplicada em todas as extensões que venham com PHP 5.3.x. Isso faz com que as funções retornem nulo (NULL) quando forem passados parâmetros incorretos. Existem ainda algumas excessoes à essa regra, como a função [get_class()](http://www.php.net/manual/pt_BR/function.get-class.php) que continua retornando falso (FALSE) em caso de erro
- A função [clearstatcache()](http://www.php.net/manual/pt_BR/function.clearstatcache.php) não limpa mais o cache do realpath por padrão
- A função [realpath()](http://us3.php.net/manual/en/function.realpath.php) agora é independente da plataforma. A conseqüencia disso é que caminhos relativos inválidos como __FILE__ . "/../x" não funcionarão mais
- A família de funções da [call_user_func()](http://us2.php.net/manual/en/function.call-user-func.php) agora propaga o $this até quando chamada por uma classe pai
- As funções de array [array_unique()](http://us2.php.net/manual/en/function.array-unique.php) não aceitam mais objetos passados como argumentos. Para usar essas funções em objetos você deve antes convertê-los em arrays
- A nova biblioteca mysqlnd necessita do uso do novo formato de password do MySQL em 41 bytes (MySQL 4.1's newer 41-byte password format). Continuar usando o formato antigo de senha (de 16 bytes) fará com que o [mysql_connect()](http://us3.php.net/manual/en/function.mysql-connect.php) e funções similares emitam o erro "mysqlnd cannot connect to MySQL 4.1+ using old authentication."
- A nova biblioteca mysqlnd não lê o arquivo de configuração do MySQL (my.cnf ou my.ini) como a versão antiga fazia. Se o seu código usa essas configurações você pode carregá-las explicitamente usando a função [mysqli_options()](http://us.php.net/manual/en/mysqli.options.php)
- A barra final (/) foi removida da classe [SplFileInfo](http://us2.php.net/manual/en/class.splfileinfo.php) e de outras classes relacionadas a diretórios
- O método mágico [__toString](http://us.php.net/manual/en/language.oop5.magic.php) não aceita mais argumentos
- Os métodos mágicos [__call](http://us3.php.net/manual/en/language.oop5.overloading.php) devem ser públicos e não mais estáticos.
- O método mágico [__call](http://us3.php.net/manual/en/language.oop5.overloading.php) agora é chamado tanto no acesso de métodos privados, como nos protegidos.
E não podemos esquecer das novas palavras reservadas que não podem ser usadas em nomes de classes, variáveis, funções e etc:
- [goto](http://us3.php.net/manual/en/control-structures.goto.php)
- [namespace](http://us3.php.net/manual/en/language.namespaces.php)
Ufa.. Terminei! :)
Parece muita coisa, mas não é… Vai ser bem tranquilo fazer essa atualização se você ainda não fez.
Nem preciso dizer a importancia de se atualizar o seu sistema… As melhorias em segurança são incontáveis e testes provaram que você tem um ganho de até 30% de performance só de mudar do PHP 5.x para o 5.3!
Espero que tenham gostado!