微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure Web 应用、PHP 7.4、OCI8Oracle Instant Client 12.2.0.1.0

如何解决Azure Web 应用、PHP 7.4、OCI8Oracle Instant Client 12.2.0.1.0

我们正在尝试将现有的 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 开始,应用加载正常,但无法运行任何数据库调用数据库调用错误记录在日志中。
  • 编辑 D:\home\site\ini\extensions.ini 文件以启用 OCI8(我们尝试了多种变体 - 完整路径、32 位、64 位、仅扩展名,例如 extension=PHP_oci8 - 所有变体都有相同的结果)。
  • 重启应用
  • 刷新页面 - 结果是状态代码 500,纯白色屏幕显示 The page cannot be displayed because an internal server error has occurred.
  • 检查 D:\home\LogFiles 下的所有内容包括 PHP_errors.log、eventlog.xml 和 /http/RawLogs。 eventlog.xml 显示服务器重启,之后没有其他记录。

我们还尝试使用 Azure 应用服务中的“应用服务日志”,并启用 Application Insights,但同样没有任何兴趣(我们可以在日志中看到 HTTP 500 响应,但没有任何关于什么的详细信息)造成的)。

怀疑是 PHP 没有启动,但当似乎没有记录任何内容时,我们不确定如何跟踪它。

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

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

谢谢!


更新 2021-08-10 (1)

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

解决方法

我进行了一些搜索,这似乎是一个非常可靠且更新的答案:Does Azure PHP 7 web app have Oracle drivers?

我认为您可能是对的,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. 如果您在 /wwwroot/ 中创建一个包含 <?php phpinfo(); 的 phpinfo.php 文件,并在问题发生时尝试访问它,是否会加载 oci8 驱动程序?
  3. 如果您在问题发生时创建并尝试访问 index.html 等静态文件,是否可以直接访问?它将确认 PHP 问题。
  4. 您能否使用正确的屏幕截图检查帖子,也许这将有助于更清楚缺少什么,上面引用的链接删除了屏幕截图:https://azureossd.github.io/2016/02/23/access-oracle-databases-from-azure-web-apps-using-oci8-drivers-with-php/(我按照此处的步骤操作到 T 并且它适用于我)

我建立了一个实验室,花了我一些工作,但我实际上让它运行了,看起来如此。我可以构建一个 Oracle 服务器并获取一些数据来证明它有效:

Driver output

我可能会按照上面的步骤进行操作,我相信它可以解决。它可能缺少以下步骤之一:

  1. 需要应用设置 PHP_INI_SCAN_DIR
  2. 需要具有正确设置的 /site/ini/extensions.ini 文件,我使用了这个: extension="D:\Program Files (x86)\PHP\v7.4\ext\php_oci8_12c.dll"
  3. 需要具有正确设置的 ApplicationHost.xdt
  4. 需要下载上传Oracle Instant Client文件夹 我上传了instantclient_19_11,但你也可以上传instantclient_12_X
  5. 在完成所有这些并确认已加载 OCI8 驱动程序后重新启动。我看到了一个类似的白色错误页面,直到所有这些都正确为止。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?