当前位置: 首页 > 知识库问答 >
问题:

Azure Web App,PHP 7.4,OCI8(Oracle即时客户端12.2.0.1.0)

萧秋月
2023-03-14

我们正在尝试将现有的PHP 7.4应用程序从运行在Windows server 2012上的内部服务器提升到Azure Web应用程序。PHP应用程序使用OCI8连接到Oracle数据库。在没有启用OCI8扩展的情况下,一切(数据库连接除外)都可以正常工作。

我们https://docs.microsoft.com/en-us/archive/blogs/azureossds/access-oracle-databases-from-azure-web-apps-using-oci8-drivers-with-php按照其他堆栈溢出问题中的建议遵循了指南,但是每当启用OCI8扩展时,我们都会收到无日志HTTP 500错误。

我们采取的步骤是:

  • 从禁用OCI8开始,应用程序可以正常加载,但无法运行任何数据库调用。数据库调用错误记录在日志中

我们还尝试在Azure应用程序服务中使用“应用程序服务日志”,并启用应用程序洞察,但同样没有什么值得关注的(我们可以在日志中看到HTTP 500响应,但没有任何关于其原因的详细信息)。

怀疑是PHP没有启动,但是我们不确定如何在没有记录的情况下跟踪它。

最终,这导致了两个问题:

  • 是否有不同的方法在Azure应用服务中启用日志,或者我可能丢失的日志位置?
  • 是否有在Azure应用服务上使用OCI8运行PHP应用的更新指南?上面的指南已经有5年的历史了,至少其中列出的所有版本似乎都已经过时了。我怀疑Azure应用服务的更新方式也可能会阻止我们。

谢谢!

更新2021-08-10

原来这个问题是由于应用程序服务“Composer”扩展和OCI8之间的不兼容造成的。我会继续更新这篇文章,随着我们启用它,因为我假设其他人也会在某个时候遇到这个问题。

更新2021-08-16

作为最后的更新,我们安装了一个旧版本的Composer(1.6.4)。我们没有测试所有其他版本,但是如果您遇到相同的问题1.6。4至少可以作为坚实的基线。

Azure扩展的repo似乎没有指定版本,因此它应该获取最新版本,但似乎只有1.8。5已安装,因此某处可能存在坏缓存。TL;DR:如果遇到问题,请尝试手动安装Composer,而不是使用扩展。

共有1个答案

岳俊晖
2023-03-14

我做了一些搜索,这似乎是一个非常可靠的最新答案:Azure PHP 7 Web应用是否有Oracle驱动程序?。

我认为你可能是对的,PHP没有正确启动。有几个问题:

  1. 您是否为站点配置并切换PHP错误日志记录,如下所述:https://azureossd.github.io/2016/09/28/how-to-identifyreview-errors-on-php-applications-in-azure-web-apps-using-log-stream-service/
  2. 如果您创建一个phpinfo。php文件位于/wwwroot/containing

我建了一个实验室,花了我一点功夫,但我实际上让它运行起来了。我可以构建一个Oracle服务器并获取一些数据来证明它的工作原理:

驱动器输出

我可能会按照上面的步骤去做,我相信这是可以解决的。它可能缺少以下步骤之一:

  1. 需要应用程序设置PHP\u INI\u SCAN\u DIR
  2. 需要/site/ini/扩展名。ini文件的正确设置,我使用了以下扩展名:extension=“D:\ProgramFiles(x86)\PHP\v7.4\ext\PHP\u oci8\u 12c.dll”
  3. 需要应用程序主机。设置正确的xdt
  4. 需要下载并上传Oracle Instant Client文件夹我上传了instantclient_19_11,但您也可以上传instantclient_12_X
  5. 在这些都准备就绪并确认已加载OCI8驱动程序后重新启动。我看到了一个类似的白色错误页面,直到我有了所有这些正确的

 类似资料:
  • 我已经在Linux服务器(Linux2.6.32-642.4.2.el6.x86_64GNU/Linux)中成功配置了Oracle钱包。 当我尝试使用数据库连接字符串执行以下命令时,它工作得很好。 $/sqlplus/@TESTDB SQL*Plus:发布11.2.0.3.0于2016年10月18日星期二07:12:49生产 版权所有(c)1982、2011,Oracle。保留所有权利。 连接到:

  • 本文向大家介绍PHP下的Oracle客户端扩展(OCI8)安装教程,包括了PHP下的Oracle客户端扩展(OCI8)安装教程的使用技巧和注意事项,需要的朋友参考一下 最近的项目需要用php访问oracle数据库,不得不在linux下给php安装oci8扩展。php也可以使用pdo访问oracle数据库,但还是需要安装客户端。 首先到oracle官网的这个页面下载相关的文件,注意要连数据库服务器的

  • 我正在尝试使用Python cx_Oracle包和Oracle instantclient_19_8连接到Oracle数据库。我不断收到此错误 - OORA-29024:证书验证失败。 我下载并安装了Oracle InstantClient_19_8。 在[…]instantclient_19_8/network/admin目录中,我复制了cwallet。sso和ewallet。p12我从DBA收

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 使用 ActiveMQ 客户端进行连接的朴素尝试失败。[0] 阅读起来,推荐的方法似乎是使用可以从WebLogic服务器获得的客户端jar。[1] JMS不应该是一个标准吗,这样我就可以使用任何标准的JMS客户机进行连接了? [0]:当我尝试使用 ActiveMQ 客户端进行连接时,它失败,并显示“JMSException:连线格式协商超时:对等方未发送其连线格式”。 [1] 例如https://

  • 使用Oracle JDBC客户端库建立Oracle连接时,是否默认加密密码或安全握手?(想知道在使用Oracle JDBC客户端库进行连接时,是否存在通过线路嗅探密码的风险)