如何解决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 没有正确启动。几个问题:
- 您是否像此处描述的那样为网站配置和启用 PHP 错误日志记录:https://azureossd.github.io/2016/09/28/how-to-identifyreview-errors-on-php-applications-in-azure-web-apps-using-log-stream-service/
- 如果您在 /wwwroot/ 中创建一个包含
<?php phpinfo();
的 phpinfo.php 文件,并在问题发生时尝试访问它,是否会加载 oci8 驱动程序? - 如果您在问题发生时创建并尝试访问 index.html 等静态文件,是否可以直接访问?它将确认 PHP 问题。
- 您能否使用正确的屏幕截图检查帖子,也许这将有助于更清楚缺少什么,上面引用的链接删除了屏幕截图:https://azureossd.github.io/2016/02/23/access-oracle-databases-from-azure-web-apps-using-oci8-drivers-with-php/(我按照此处的步骤操作到 T 并且它适用于我)
我建立了一个实验室,花了我一些工作,但我实际上让它运行了,看起来如此。我可以构建一个 Oracle 服务器并获取一些数据来证明它有效:
我可能会按照上面的步骤进行操作,我相信它可以解决。它可能缺少以下步骤之一:
- 需要应用设置 PHP_INI_SCAN_DIR
- 需要具有正确设置的 /site/ini/extensions.ini 文件,我使用了这个: extension="D:\Program Files (x86)\PHP\v7.4\ext\php_oci8_12c.dll"
- 需要具有正确设置的 ApplicationHost.xdt
- 需要下载上传Oracle Instant Client文件夹 我上传了instantclient_19_11,但你也可以上传instantclient_12_X
- 在完成所有这些并确认已加载 OCI8 驱动程序后重新启动。我看到了一个类似的白色错误页面,直到所有这些都正确为止。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。