Artigo
· Maio 19, 2022 8min de leitura

Uso do PHP, PDO, Fast CGI e ODBC com o InterSystems IRIS

O IRIS permite que usemos uma grande variedade de front-ends para o desenvolvimento de aplicações e serviços.

Entre estes, podemos apontar o PHP, que é largamente utilizado em desenvolvimento web e adotado por empresas como o Facebook, Google, Baidu, Wikipedia, Spotify e Uber.

O PHP dispensa apresentações, mas podemos obter mais informações na sua página www.php.net.

Fast CGI permite que os programas sejam executados por um interpretador fora do servidor web, incluindo os benefícios de segurança do modo CGI sem nenhuma das suas ineficiências. PHP-FPM é o gerenciador de processos FastCGI para o PHP.

PDO (PHP Data Objects) é um módulo de PHP montado sob o paradigma Orientado a Objetos, cujo objetivo é prover uma padronização da forma com que PHP se comunica com um banco de dados relacional.

ODBC é um padrão para acesso a sistemas gerenciadores de bancos de dados (SGBD).

No exemplo a seguir utilizaremos o CentOS como sistema operacional e como servidor Web utilizaremos o Apache, que já está presente na instalação do CentOS.

A instalação do PHP está bem documentada em diversos tutoriais. O endereço https://pt.linux-console.net/?p=309 contém um tutorial com a instalação do PHP 7.4 no CentOS 8 que pode ser utilizado como guia.

A instalação do PHP-FPM podemos ver no endereço https://docs.ukfast.co.uk/operatingsystems/linux/php-fpm/phpfpmsetup.html. Para o teste vamos utilizar o PHP-FPM com a porta 9000. Lembre que para usar a porta é necessário que ela esteja liberada no firewall do CentOS:

# firewall-cmd --list-all

public (active)

  target: default

  icmp-block-inversion: no

  interfaces: eno1

  sources:

  services: cockpit dhcpv6-client http https ssh

  ports: 52773/tcp 1972/tcp 51773/tcp 9000/tcp

  protocols:

  forward: no

  masquerade: no

  forward-ports:

  source-ports:

  icmp-blocks:

  rich rules:

Certifique que os serviços do Apache e do PHP-FPM estão ativos no seu servidor depois das instalações e configurações:

Verificando o serviço httpd no CentOS

# service httpd status

Redirecting to /bin/systemctl status httpd.service

● httpd.service - The Apache HTTP Server

   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)

  Drop-In: /usr/lib/systemd/system/httpd.service.d

           └─php-fpm.conf

   Active: active (running) since Thu 2022-05-19 12:02:44 -03; 1h 55min ago

     Docs: man:httpd.service(8)

  Process: 9218 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)

 Main PID: 3053 (httpd)

   Status: "Total requests: 310; Idle/Busy workers 100/0;Requests/sec: 0.0448; Bytes served/sec:  51 B/sec"

    Tasks: 279 (limit: 23517)

   Memory: 49.7M

   CGroup: /system.slice/httpd.service

           ├─ 3053 /usr/sbin/httpd -DFOREGROUND

           ├─ 9226 /usr/sbin/httpd -DFOREGROUND

           ├─ 9227 /usr/sbin/httpd -DFOREGROUND

           ├─ 9228 /usr/sbin/httpd -DFOREGROUND

           ├─ 9229 /usr/sbin/httpd -DFOREGROUND

           ├─ 9230 /usr/sbin/httpd -DFOREGROUND

           └─13660 /usr/sbin/httpd -DFOREGROUND

 

mai 19 12:02:44 smartbox01 httpd[3053]: [Thu May 19 12:02:44.560038 2022] [so:warn] [pid 3053:tid 140035924437312] AH01574: module proxy_fcgi_module is already loaded,>

mai 19 12:02:44 smartbox01 httpd[3053]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::225:64ff:fe3c:51f0. Set the >

mai 19 12:02:44 smartbox01 systemd[1]: Started The Apache HTTP Server.

mai 19 12:02:44 smartbox01 httpd[3053]: Server configured, listening on: port 80

mai 19 12:45:01 smartbox01 systemd[1]: Reloading The Apache HTTP Server.

mai 19 12:45:02 smartbox01 httpd[9218]: [Thu May 19 12:45:02.096310 2022] [so:warn] [pid 9218:tid 139638515747136] AH01574: module proxy_module is already loaded, skip>

mai 19 12:45:02 smartbox01 httpd[9218]: [Thu May 19 12:45:02.096367 2022] [so:warn] [pid 9218:tid 139638515747136] AH01574: module proxy_fcgi_module is already loaded,>

mai 19 12:45:02 smartbox01 httpd[9218]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::225:64ff:fe3c:51f0. Set the >

mai 19 12:45:02 smartbox01 systemd[1]: Reloaded The Apache HTTP Server.

mai 19 12:45:02 smartbox01 httpd[3053]: Server configured, listening on: port 80

 

Verificando o serviço php-fpm no CentOS:

 

# service php-fpm status

Redirecting to /bin/systemctl status php-fpm.service

● php-fpm.service - The PHP FastCGI Process Manager

   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)

   Active: active (running) since Thu 2022-05-19 12:00:53 -03; 1h 58min ago

 Main PID: 1002 (php-fpm)

   Status: "Processes active: 0, idle: 7, Requests: 309, slow: 0, Traffic: 0req/sec"

    Tasks: 8 (limit: 23517)

   Memory: 48.3M

   CGroup: /system.slice/php-fpm.service

           ├─1002 php-fpm: master process (/etc/php-fpm.conf)

           ├─1205 php-fpm: pool www

           ├─1206 php-fpm: pool www

           ├─1207 php-fpm: pool www

           ├─1208 php-fpm: pool www

           ├─1209 php-fpm: pool www

           ├─3428 php-fpm: pool www

           └─3570 php-fpm: pool www

 

mai 19 12:00:48 smartbox01 systemd[1]: Starting The PHP FastCGI Process Manager...

mai 19 12:00:53 smartbox01 systemd[1]: Started The PHP FastCGI Process Manager.

 

Agora vamos configurar o Apache para acessar o PHP utilizando o PHP-FPM. Para isso edite o arquivo de configuração do Apache (normalmente em /etc/httpd/conf/httpd.conf) e inclua o seguinte trecho:

 

<FilesMatch \.php$>

   SetHandler "proxy:fcgi://localhost:9000"

</FilesMatch>

 

Crie um arquivo de nome info.php no local das páginas do servidor web, normalmente/var/www/html e inclua a linha abaixo:

 

<?php phpinfo(); ?>

 

Após, no seu navegador, chame esta página que então será apresentada a configuração do PHP:

 

 

Confirme na seção PDO se o ODBC está presente:

 

 

Agora, vamos certificar que o ODBC está configurado no seu servidor. No exemplo utilizamos o unixODBC. Para maiores informações sobre ODBC no IRIS veja a documentação no endereço https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...

Vamos utilizar o comando odbcinst para ver os drivers e dsn de sistema configurados:

Verificando os drivers ODBC instalados no CentOS:

# odbcinst -q -d

[PostgreSQL]

[MySQL]

[FreeTDS]

[MariaDB]

[InterSystemsBD]

 

Verificando os dsn de sistema configurados:

# odbcinst -q -s

[User]

[Userunixodbc]

 

Testando o acesso ao IRIS via ODBC:

 

# isql User

+---------------------------------------+

| Connected!                            |

|                                       |

| sql-statement                         |

| help [tablename]                      |

| quit                                  |

|                                       |

+---------------------------------------+

SQL> select 1 as test

+------------+

| test       |

+------------+

| 1          |

+------------+

SQLRowCount returns 1

1 rows fetched

SQL>

 

Agora vamos montar uma página PHP que vai acessar o IRIS via ODBC, ainda sem PDO, apenas para teste. Crie um arquivo de nome query_odbc.php no diretório de paginas do seu servidor (normalmente /var/www/html) e inclua o seguinte código:

 

 

<?php

echo "vai fazer o ODBC\n";

//$conn = odbc_connect("Driver={InterSystemsBD};Server=127.0.0.1;Port=1972;Database=USER","_SYSTEM","SYS");

$conn = odbc_connect("User","_SYSTEM","SYS");

$sql = "SELECT 1 as test";

$rs = odbc_exec($conn,$sql);

odbc_fetch_row($rs);

echo odbc_result($rs, "test"), "\n";

?>

 

Note que podemos criar a conexão utilizando a linha de configuração completa (linha comentada) ou utilizando o dsn. Ao chamar esta página você verá o resultado:

 

 

Agora podemos montar uma query utilizando o PDO. Para este teste criamos no IRIS uma tabela simples com 3 linhas. No CentOS crie um arquivo chamado query_pdo no diretório de páginas do seu servidor e inclua os seguintes comandos:

 

<?php

//$conn = new PDO("odbc:Driver={InterSystemsBD};Server=192.168.0.90;Port=1972;Database=USER;UID=_SYSTEM;PWD=SYS");

$conn = new PDO("odbc:User");

$sql="select nome from Teste";

foreach ($conn->query($sql) as $row) {

 echo $row['nome']."<p>";

}

?>

 

 

 

 

 

O resultado está abaixo:

 

 

O PHP-FPM pode ser configurado de várias formas, com socket ou utilizando uma porta (como no nosso exemplo). Veja o que mais se adequa a sua necessidade.

De resto, é utilizar o IRIS para seus desenvolvimentos, tirando proveito da alta performance, escalabilidade, segurança e facilidade de utilização. Bons códigos para todos nós!

Discussão (0)1
Entre ou crie uma conta para continuar