Configurar PHP pra acessar Oracle

Pessoal,

Tenho um banco Oracle instalado em um servidor onde acesso via VPN e preciso acessar via Scriptcase. Baixei e configurei o InstantClient do Oracle, liberei o php_oci8.dll para o PHP, mas quando executo o diagnosis, ainda me diz que o Oracle não está funcional. Detalhe: meu Windows é o Seven. Todas as dicas que encontrei aqui no fórum são para Windows XP. Alguém tem alguma dica?

Detalhe: Instalei também o SQLPLUS e conecta normalmente ao servidor. O problema é fazer com que o PHP enxergue o InstantClient pra acessar o Oracle.

Grato.

Oi Kleyber,

qual a versão do Instant Client que você baixou ?

InstantClient versão 11

Kleyber,

Acredito que esse seja o problema, no próprio WebHelp não sugere essa versão.
Foi feito com uma versão mais antiga. A 10.2.0.3

Max,

Ok, vou usar esta versão e reporto o resultado.

Obrigado.

Baixei a versão 10.2.0.3, mudei as vaiáveis de ambiente pra pegar a nova pasta onde está esta versão, mas o diagnosis ainda me diz que não está disponível.

Detalhe: eu uso Win 7 64 bits e baixei a versão 10.2.0.3 do instant client pra 64 bits também.
alguma nova idéia?

Kleyber não sei muito o que pode esta acontecendo.
Talvez alguma .dll que não está descomentada, ou não esta presente na pasta ‘ext’ do PHP.
Depois dessas alterações no seu PHP, você reiniciou o serviço do servidor ?

Um outra dica que eu acho mais fácil pra quem usa o oracle, é montar um ambiente com o Zend Server.
Eu testei em mais de um Windows e fiz até na base de conhecimento um pequeno tutorial ensinando como instalar o Zend Server e habilitar a conexão com o Oracle.
Achei nesse ambiente mais fácil e rápido.

Segue o link, talvez isso ajude: http://www.netmake.com.br/site/baseknowledge/baseknowledge.php?id_topico=307

Max, obrigado por responder. Deixa então eu esclarecer mais as coisas: O servidor Oracle está em uma base remota e eu quero acessá-la do meu SC que está em meu notebook. Por isso instalei o Instant Client, seguindo justamente o tutorial disponibilizado na Base de Conhecimento do site da Netmake. Descomentei a linha do php_oci8.dll do php.ini, reiniciei o notebook mas o diagnosis ainda diz que o Oracle não está disponível. Vou colocar aqui a sequencia que fiz para ver se houve algo errado:

  • Instalei o Instant Client 11
  • Instalei o SQL PLUS
  • Alterei as variáveis de ambiente
  • Alterei o PHP.INI descomentando a linha do php_oci8.dll
  • Reiniciei o notebook
  • Consegui conectar o banco usando o SQL PLUS
  • Executei o DIAGNOSIS mas o Oracle não está disponível
  • Instalei o Instant Client 10 (conforme tua indicação aqui no fórum)
  • Mudei as variáveis de ambiente para “enxergar” a versão 10
  • Reiniciei o notebook
  • Executei novamente o DIAGNOSIS e nada

Kleyber, realmente não sei o que pode esta acontecendo, se esta seguindo aqueles passos do tutorial no WebHelp à risca e mesmo assim esta dando problema.
Eu posso verificar aqui em um ambiente 64bits e tentar conectar sem usar o ambiente Zend Server e depois dizer o que aconteceu.

Ótimo. Fico no aguardo dos teus resultados. Enquanto isto, vou tentando outras coisas por aqui.

Obrigado.

Perdão Kleyber a demora, eu estava ausente.

Fiz o teste, num Notebook com Windows 7 64 bits, usando as duas maneiras, com o Zend Server CE PHP 5.2 e usando o ambiente do instalador do ScriptCase para Windows usando a versão do Instant Client que está no Webhelp.

Realmente não sei te informar o que pode esta faltando para fazer a conexão.

Max, bom dia,

O único problema mesmo é o fato do PHP não estar reconhecendo o OCI8 que já habilitei no PHP.INI. Vou tentar instalar tudo novamente.

Olá, Kleber.
Resolveu o problema da conexão com o Oracle?
Estou passando pela mesma dificuldade que você.

Valter,

Nada, eu desisti de continuar tentando.

Olá Kleber,

Eu sugiro que você instale o ambiente manualmente, será bem mais viável para a conexão com o oracle. Você pode baixar o Zend Server CE ( Zend Server CE (PHP 5.3) versão 5.6.0 ) no site da Zend, http://www.zend.com/en/products/server-ce/downloads ele já virá com o apache, ficará bem melhor pois você terá acesso a toda parte gráfica do ambiente, podendo acessar pela porta localhost:10081, o root será a pasta zend/apache2/htdocs. Nela você apenas irá baixar o nosso zip e descompactá-lo, acessando o scriptcase na porta 80.

  • Zend Guard Loader:

Caso apareça algum problema como Zend Guard Run-time support missing! a solução é:

Esta mensagem normalmente é exibida na ausência do Zend Guard Loader, que serve para decodificar a criptografia dos arquivos Zend. Portanto, o acesso está sendo feito da maneira correta, porém você tem que acessar a parte gráfica do seu ambiente ( acessando Zend Server CE http://localhost:10081/ZendServer, esta é uma das vantagens de instalar o ambiente manualmente, pois o instalador do Scriptcase compacta todo o ambiente eliminando a parte gráfica. ) para pode verificar se está tudo instalado corretamente.

Acessando o Zend Server CE, é possível verificar se o Zend Guard Loader está ativado, caso não esteja, o senhor terá que ativá-lo em " Server Setup -> Components " ou fazer o download no próprio site da Zend.

http://www.zend.com/en/products/guard/downloads

Zend Guard Loader (Runtime for PHP 5.3)

Outra dica é que para habilitar as extensões ao banco de dados, não precisa acessar diretamente o php.ini, basta ativá-los em " Server Setup -> Extensions ".

  • Timezone:

E também possivelmente pode dar algum erro como este ao gerar as aplicações consulta :

2 = date() [function.date]: It is not safe to rely on the system’s timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘America/Sao_Paulo’ for ‘-2.0/DST’ instead
C:\Program Files\Zend\Apache2\htdocs\scriptcase\devel\generator\nm_gp_ler_campos.php 555

A solução é :

Este erro geralmente ocorre quando não há um timezone definido no seu php.
Certifique-se de qual seja o timezone correto de acordo com a sua região acessando o site abaixo:
http://www.php.net/manual/es/timezones.php

Alteração automática: ( Recomendado. )

Acessando a parte gráfica do Zend Server CE ( Ex.: http://localhost:10081/ZendServer )
Server Setup -> View: Popular -> Date -> date.timezone - The default timezone used by all date/time functions if the TZ environment variable isn’t set
Insira : America/Sao_Paulo ( Tendo como exemplo a cidade de São Paulo.)
Após realizar este procedimento, reinicie o serviço. ( Restart PHP. )

Alteração manual:

Faça as seguintes alterações no seu php.ini, localize e altere como no exemplo abaixo, tendo como exemplo a cidade de São Paulo.

[Date]
; Defines the default timezone used by the date functions
date.timezone = America/Sao_Paulo

Após realizar este procedimento, reinicie o serviço.

John Lennon,

Obrigado por responder. Deixa eu ver se entendi. Eu preciso fazer primeiramente estes passos que me indicaste para qu eentão eu possa refazer os passos que fiz anteriormente, como estes aqui:

  • Instalei o Instant Client 11
  • Instalei o SQL PLUS
  • Alterei as variáveis de ambiente
  • Alterei o PHP.INI descomentando a linha do php_oci8.dll
  • Reiniciei o notebook
  • Consegui conectar o banco usando o SQL PLUS
  • Executei o DIAGNOSIS mas o Oracle não está disponível
  • Instalei o Instant Client 10 (conforme tua indicação aqui no fórum)
  • Mudei as variáveis de ambiente para “enxergar” a versão 10
  • Reiniciei o notebook

No aguardo,

Com os passos que eu disse, você terá um ambiente instalado manualmente, já que não está conseguindo habilitar o Oracle apartir do nosso instalador. Faça um backup completo dos seus projetos no Scriptcase, depois desisntale tudo, então poderá instalar o Zend Server CE ( Instale de maneira personalizada para escolher o que será instalado. ). Siga os passos que eu disse acima, então só terá que baixar o arquivo .ZIP em nosso site, e extraí-lo para …zend/apache2/htdocs . Acesse pelo navegador localhost:porta(se for 80 não precisa colocar porta)/scriptcase(nome da pasta), assim dará início à instalação.

Aguardo seu retorno.

Fazendo conforme o “John Lennon” orientou, consegui fazer com que o Sc6 reconhecesse o Oracle 10g.
Criei um projeto, fiz a conexão com o banco Oracle com sucesso, mas no momento de criar a aplicação dá o erro abaixo:

ociexecute() [function.ociexecute]: ORA-00936: missing expression | Script: C:\Arquivos de programas\Zend\Apache2\htdocs\scriptcase\prod\third\adodb\drivers\adodb-oci8.inc.php linha: 1039

Vou tentar identificar o que ocorre, mas haveira a necessidade de copiar as DLL do Oracle para algum lugar?

Boa tarde, Sr. Valter Souza

Inicialmente eu solicito que você faça uma atualização manual, a fim de corrigir quaisquer arquivos corrompidos que estejam causando este problema.

http://www.netmake.com.br/knowledge/article-296.html

Se o erro persistir, crie uma pasta paralelamente no mesmo diretório onde a pasta scriptcase está localizada.

  • Pedimos que você faça uma nova pasta em paralelo onde está a pasta “scriptcase”, por exemplo “scriptcase2”;
  • Instale o Scriptcase na nova pasta (scriptcase2); (Por favor, faça uma nova instalação, não use ctrl + c e ctrl + v)
  • Faça um backup do Scriptcase antigo e restaure os projetos no Scriptcase novo;

Para fazer um backup:

Opções -> Configurações … -> Serviços -> Backup (Faça um backup Geral)

Para fazer uma restauração:

Opções -> Configurações … -> Serviços -> Restore

Não adiantou.
Para não ficar na dúvida, baixei novamente o arquivo .zip, descompactei dentro a pasta HTTPS do Apache, mas o erro persiste.
Criei a conexão com sucesso, quando vou criar uma nova aplicação aparece o nome das tabelas para escolher, mas quando clico em CRIAR, o erro é exibido.

Abri o arquivo .php e a linha que dá o erro é

if (OCIExecute($stmt,$this->_commit))

Parece que o SC não está encontrando a OCIEexcute.

E você, Kleyber, conseguiu alguma coisa?