Compilando a ultima versão do php automaticamente

Script simples para compilar a última versão do php baseado nos parâmetros da compilação anterior utilizando todos os processadores disponíveis.

cd /tmp
wget http://br.php.net/distributions/php-5.3.15.tar.bz2
tar jxvf php-5.3.15.tar.bz2
cd php-5.3.15
php -i |grep configure |cut -d'>' -f2 > tmp.txt
sed -i "s/'//g" tmp.txt
`cat tmp.txt`
make -j`cat /proc/cpuinfo |grep processor |wc -l`
make install

Não esquecer de restartar o webserver e o daemon de php que estiver utilizando (ex: fastcgi ou php-fpm)

Tela em branco ao incluir arquivos .phar no php-fpm

Ao tentar utilizar recurso de arquivos .phar em um servidor rodando php-fpm retornava tela em branco.

Isso acontecia porque o suhosin estava bloqueando o include de arquivo .phar, sendo necessário a inclusão da linha abaixo no php.ini

suhosin.executor.include.whitelist ="phar"

Nota: Estou usando php-fpm, mas como o erro estava no módulo suhosin, deve funcionar também com fastcgi ou mod_php

Trabalhando com datas em php

Eu sempre me atrapalho quando tenho que mecher com datas no php, principalmente em conversão do formato brasileiro pro americano e vice-versa…Eu tinha feito uma função que usa explode, etc pra fazer essa conversão, mas usar funções nativas é sabidamente mais performático.

Vou postar aqui alguns exemplos que montei com uma grande ajuda o totoro.

<?php

echo "Hoje +1 mes: ";
echo date('d/m/Y H:i:s', strtotime('+1 month'));
echo "n";

echo "Formatar data atual: ";
echo date('d/m/Y H:i:s', strtotime('now'));
echo "n";

echo "Formatar data específica: ";
echo date('d/m/Y H:i:s', strtotime('2012-04-21 15:45:32'));
echo "n";

echo "Data especifica + 1 mes: ";
echo date('d/m/Y', strtotime('2012-04-21 +1 month'));
echo "n";

echo "Data no nosso formato -> formato americano: ";
echo date('Y-m-d', strtotime('09/10/1945'));
echo "n";

echo "Data no nosso formato + 1 mes -> formato americano: ";
echo date('Y-m-d', strtotime('09/10/1945 +1 month'));
echo "n";

?>

OBS: Esse post é dois em um: pode ajudar alguem postando aqui não me esqueço mais! ^^

Compilando ffmpeg-php nas ultimas versões do ffmpeg

A última versão do ffmpeg-php disponibilizada no sourceforge foi liberada em meados de 2008 e desde então não teve mais atualização, isso ocasiona erro ao compilar usando versões mais novas do ffmpeg, pois houveram mudanças nas chamadas de api do ffmpeg. (pelo menos foi a explicação que achei em alguns forums)

Eles tem uma versão “nigthly” que é trablahada diretamente no SVN, parece ter desenvolvimento ativo, visto que tem commits de “apenas” 2 meses atrás, o que não entendo é porque não lançam releases em cima desse svn…

Bem, de toda forma, a versão do svn compila perfeitamente nas versões mais novas do ffmpeg, processo de instalação abaixo:

cd /tmp/install
wget "http://ffmpeg-php.svn.sourceforge.net/viewvc/ffmpeg-php/trunk/ffmpeg-php/?view=tar" -O ffmpegphp-novo.tar.gz
tar xzvf ffmpegphp-novo.tar.gz
cd ffmpeg-php/
phpize
./configure
make && make install
ln -s /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so /usr/local/lib/ffmpeg.so

Adicionar no php.ini:

Extension=ffmpeg.so

Procedimentos adicionais:
– Reiniciar apache
– Se estiver rodando qualquer tipo de php-cgi (apache, ngxin, lighttpd, etc) matar o php-cgi (incluindo o processo pai) e subir novamente os processos

Classe php para trabalhar com oracle

Compartilho com todos a classe criada por mim para utilização com oracle, todos estão livres para utilizar, copiar e modificar, mas por favor, peço que mantenahm os créditos, pois dediquei um bom de pesquisa nisso!

final class oracle
{

		/*
		 * Classe para conexão e queries a banco oracle
		 * Criado em 02/10/2011 por Felipe Braz
		 * Versão 1.1
		 * Duvidas sugestões: fbraz3 [arroba] gmail.com
		 * Copia/modificação livre desde que se mantenham os créditos
		*/

        public $oci_error;

		private $conexao  = null;
        private $username = null;
        private $password = null;
        private $uri      = null;

		public function get_instance($username, $password, $uri)
		{
			$this->username = $username;
			$this->password = $password;
			$this->uri		= $uri;
			return $this;
		}

        public function __construct()
        {
            //Sem construtor
        }

        public function connect()
        {
                if (!$this->conexao = @oci_connect($this->username, $this->password, $this->uri)) {
                        $this->oci_error = @oci_error($this->conexao);
                        die("Erro ao conectar ao Oracle " . $this->oci_error['text']);
                }
        }       

        public function query($sql)
        {
                $stmt = @oci_parse($this->conexao, $sql);
                $r = @oci_execute($stmt);
                $this->oci_error = oci_error($stmt);
                return $r;
        }
}

Exemplos de uso:

Instanciar conexão ao banco com os seguintes dados:
Banco de dados: testeoracle
Senha: s3nh40r4cl3
URL de conexao: 10.1.1.1/oracle

$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

Uma vez conectado pode-se efetuar uma query livre usando o método query()

$res = $obj->query("SELECT * FROM USUARIOS");
var_dump($res);

Para obter todos os dados da tabela, pode-se usar a função do php oci_fetch_array()

$res = $obj->query("SELECT * FROM USUARIOS");
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

Os erros retornados ficam no atributo publico oci_error.

Exemplo de tratamento de erro:

//conexão
$obj = new oracle;
$obj->get_instance('testeoracle','s3nh40r4cl3','10.1.1.1/oracle')->connect();

//Consulta na tabela USUARIOS
$res = $obj->query("SELECT * FROM USUARIOS");

//Se retornou erro, debuga ele e mata o script
if($obj->oci_error)
{
	print_r($obj->oci_error);
	die();
}

//Loop para obter todos os dados da tabela
while($r = oci_fetch_array($res))
{
   echo $r['usuario']."n";
}

COmo podem ver, a classe é bem simples, porém extremamente funcional para uso com oracle.