gpt4 book ai didi

php - Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0)

转载 作者:行者123 更新时间:2023-12-04 14:53:48 25 4
gpt4 key购买 nike

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

我们已按照 https://learn.microsoft.com/en-us/archive/blogs/azureossds/access-oracle-databases-from-azure-web-apps-using-oci8-drivers-with-php 上的指南进行操作按照其他 Stack Overflow 问题中的建议,但只要启用 OCI8 扩展,我们就会收到无日志 HTTP 500 错误。

我们采取的步骤是:

  • 从禁用 OCI8 开始,应用加载正常但无法运行任何数据库调用。数据库调用错误记录在日志中。
  • 编辑 D:\home\site\ini\extensions.ini 文件以启用 OCI8(我们尝试了多种变体 - 完整路径、32 位、64 位、仅扩展名,例如 extension=php_oci8 - 都具有相同的结果)。
  • 重启应用
  • 刷新页面 - 结果是状态代码 500,纯白屏幕显示 页面无法显示,因为发生内部服务器错误。
  • 检查 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 更新

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


2021-08-16 更新

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

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

最佳答案

我做了一些搜索,这个似乎是一个非常可靠且更新的答案: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 驱动程序后重新启动。在我完成所有这些操作之前,我一直看到类似的白色错误页面。

关于php - Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68534412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com