Desenvolvimento - PHP

Iniciando com php e InterBase

Nesse artigo eu vou ensinar com instalar e usar o Interbase com o PHP4.

por Yves Glodt



Introdução

Nesse artigo eu vou ensinar com instalar e usar o Interbase com o PHP4. O artigo inclui:

  • Alguns comentários sobre o Interbase
  • Instalando o Interbase
  • Configurando/compilando o PHP com suporte ao Interbase
  • Criando um BD de exemplo
  • Alguns exemplos de código

Nota: Tudo que é falado nesse artigo pode ser utilizado tanto com o Interbase como com o Firebird.

Alguns comentários sobre o InterBase

O Interbase existe desde meados de 1980. Depois de vários anos na estrada, ele se tornou Open Source pela Borland em Julho de 2000. A versão utilizada nessa artigo é a 6.01 (= 6.0 + patch de segurança). Ela roda no Linux, vários derivados de Unix e no Windows.

O IB não exige muitos recursos da máquina. O espaço em disco requerido é em torno de 10MB. Nós usamos ele no trabalho com o apache/php em um Pentium75 com um HD de 80MB e funciona muito bem !

Retirado do website :

InterBase® é uma banco de dados open source relacional que roda no Linux, Windows e diversos Unixes. Ele é o mesmo banco de dados comercial utilizado durante anos pela Motorola, Nokia, Boeing, e the Boston Stock Exchange, e que foi disponibilizado gratuitamente. O InterBase® oferece concorrência excelente, alta performance e uma poderosa linguagem de stored procedures e triggers.

Atualmente, o desenvolvimento do código é feito em 2 partes distintas :

  • InterBase
  • Firebird

Firebird é uma bifurcação do código liberado pela Borland. A comunidade Open Source é quem desenvolve o código, entre eles a IBPhoenix. Essa versão é aprimorada constantemente enquanto que o IB 6.0 continua estagnado desde o seu lançamento. O código do Firebird pode ser baixado do site firebird.sourceforge.net.

Por enquanto o Firebird e o Interbase 6.0 são totalmente compatíveis.

A seguir seguem alguns sites com uma boa informação a respeito:

Baixando e instalando o InterBase

O InterBase 6.01 pode ser baixado aqui : http://www.borland.com/devsupport/interbase/opensource/ (Nota do tradutor : A versão 6.0.2 pode ser obtida em http://mers.com, o Firebird pode ser baixado em http://www.firebirdsql.com)

Para Linux existem 2 versões:

  • Clássica;a
  • Super Server.

A diferença entre elas pode ser vista aqui.

Tanto no Linux como no Windows eu instalei a versão SuperServer e funcionou perfeitamente para mim!

Compilando o php com suporte ao InterBase

Como muitas distribuições não compilam o suporte ao Interbase no PHP, é uma boa idéia saber como fazer isso. Se voce não tem o código source do php, pegue-o aqui. Descompacte (Untar) ele no diretório de sua preferência e configure-o assim:

./configure --with-interbase=/opt/interbase --with-apxs

Tenha certeza de passar o path correto do diretório do Interbase como parâmetro (/opt/interbase, no nosso caso). Então digite:

make
make install

Quando a instalação estiver terminada, abra o arquivo de configuração php.ini localizado em /usr/local/lib/, e verifique se as seguinte linhas existem (se preciso descomente-as):

magic_quotes_sybase = On	; Use Sybase-style magic quotes (escape " with "" instead of \")
extension=php_interbase.so

Configurando o Apache

No caso do apache, ele só precisa ser configurado para trabalhar com o módulo PHP.O Interbase em si é manuseado pelo php. Se voce já usava o php antes no seu servidor, então não precisa fazer nada. Senão, abra o arquivo de configuração do apache, (httpd.conf, geralmente localizado em /etc ou /etc/httpd), procure pelas seguintes inhas e adicione-as ou descomente-as.

LoadModule php4_module        /usr/lib/apache/libphp4.so

AddModule mod_php4.c

<IfModule mod_php4.c>
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php-source .phps
<IfModule>

Eventualmente, para que suas páginas sejam processadas pelo php, voce deverá utilizar a extensão php nelas.

Não se esqueça também de adicionar index.php (ou alguma_coisa.php) como DirectoryIndex no arquivo de configuração do Apache.

Criando um novo usuário no banco de dados

Antes de criar um banco de dados, devemos primeiro cria um usuário. Para nosso exemplo usuaremos username "phptest" e senha "phptest". Isso pode ser feito utilizando-se o utilitário gsec que acompanha o Interbase/Firebird. Assumindo que a senha do SYSDBA seja masterkey, use o seguinte comando para criar o usuário:

/opt/interbase/bin/gsec -user sysdba -password masterkey -add "phptest" -pw "phptest"

Criando um banco de dados de teste

Antes de criar o banco, baixe esse script : createdb.sql. (Voce pode precisar alterar o charset para o adequado à lingua do seu país.) O script se parece com : SET SQL DIALECT 3;

CREATE DATABASE "phptest.gdb"
PAGE_SIZE=8192
DEFAULT CHARACTER SET ISO8859_1;

CREATE TABLE ADDRESS
(
CATEGORY INTEGER NOT NULL,
NAME VARCHAR(100) NOT NULL,
KEYINDEX INTEGER NOT NULL,
ADDRESS BLOB SUB_TYPE TEXT SEGMENT SIZE 100,
PRIMARY KEY (KEYINDEX)
);

GRANT SELECT,DELETE,INSERT,UPDATE ON ADDRESS TO phptest;

commit;

Crie o banco de dados com o seguinte comando:

/opt/interbase/bin/isql -i createdb.sql -u sysdba -p masterkey

É sempre uma boa idéia guardar os scripts para se necessário recriar o banco de dados. Lembre-se de alterar também a senha padrão do "sysdba" pois ela é conhecida por todo mundo ;-)

Alguns exemplos de código

Nota: Esses exemplos mostram à você também como integrar variáveis de formulário em suas queries. Eles foram derivados de uma aplicação que eu escrevi (Veja aqui para saber mais.)

Select:

$dbh = ibase_connect("/home/yves/projects/php/phptest.gdb","phptest","phptest","ISO8859_1",0,1);
$sth=ibase_query("SELECT NAME,ADDRESS FROM ADDRESS WHERE KEYINDEX=?",$HTTP_POST_VARS["KEYINDEX"]);
while ($row = ibase_fetch_row($sth)) {
	print $row[0]."\n";
	ibase_blob_echo($row[1]);
}
ibase_free_result($sth);
ibase_close($dbh);

A primeira linha faz uma conexãoc om o banco de dados. Nosso comando SQL é configurado na segunda linha. (Veja como a variável de formulário KEYINDEX é substituida dentro da query.) Finalmente, com a chamada ibase_fetch_row($sth), nós recuperamos linha à linha (bem, nesse exemplo apenas uma linha). No loop, o nome do campo é impresso por:

print $row[0]."\n";

Como nosso campo ADDRESS é um blob, ele é recuperado com:

ibase_blob_echo($row[1]);

Blobs de texto precisam ser tratados assim, voce não pode simplesmente imprimi-los com um simples "print". As funções blob do Interbase não estão documentadas nos manuais do php, mas eu encontrei as funções nesse documento da Borland. Ele descreve a api do php3, mas todas as funções que eu usei funcionaram com o PHP 4.

Insert:

$dbh = ibase_connect("/home/yves/projects/php/phptest.gdb","phptest","phptest","ISO8859_1",0,1);

$blob_id = ibase_blob_create();
ibase_blob_add($blob_id,$HTTP_POST_VARS["ADDRESS"]);
$blob_id_str = ibase_blob_close($blob_id);

$sth = ibase_prepare("INSERT INTO ADDRESS (KEYINDEX,NAME,ADDRESS,CATEGORY) VALUES (?,?,?,?)");
$trans=ibase_trans();
ibase_execute($sth,$HTTP_POST_VARS["KEYINDEX"],
  stripslashes(strip_tags($HTTP_POST_VARS["NAME"])),
  $blob_id_str,$HTTP_POST_VARS["CATEGORY"]);
ibase_commit($trans);
ibase_free_query($sth);
ibase_close($dbh);

De uma olhada nas linhas 3-5. A função ibase_blob_add é necessária para preparar os dados antes de voce inseri-los no BD. Atualmente, os dados da variável $HTTP_POST_VARS["ADDRESS"] são preparados e colocados no campo blob, usando a função $blob_id_str.

Update:

$
dbh = ibase_connect("/home/yves/projects/php/phptest.gdb","phptest","phptest","ISO8859_1",0,1);
$sth = ibase_prepare("UPDATE ADDRESS SET NAME=? WHERE KEYINDEX=?");
$trans=ibase_trans();
ibase_execute($sth,stripslashes(strip_tags($HTTP_POST_VARS["NAME"])),$HTTP_POST_VARS["KEYINDEX"]);
ibase_commit($trans);
ibase_free_query($sth);
ibase_close($dbh);

Esse exemplo é auto explicativo.

É isso aí !

Eu espero que isso de a você um início bem sucedido com o php e o Interbase. Aconselho que voce de uma olhada nos projetos existentes que utilizam o IB+php. Pesquisando no freshmeat por "php interbase" atualmente lhe retorna vários deles.

Yves Glodt

Yves Glodt