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

2024-04-15

我们正在尝试将现有的 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 https://learn.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 应用服务的更新方式也可能会阻止我们。

Thanks!


更新2021-08-10

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


更新2021-08-16

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

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


我做了一些搜索,这似乎是一个相当可靠且更新的答案:Azure PHP 7 Web 应用程序是否有 Oracle 驱动程序? https://stackoverflow.com/questions/59970166/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/ https://azureossd.github.io/2016/09/28/how-to-identifyreview-errors-on-php-applications-in-azure-web-apps-using-log-stream-service/
  2. 如果您在 /wwwroot/ 中创建一个 phpinfo.php 文件,其中包含<?php phpinfo();,并尝试在问题发生时访问它,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/ https://azureossd.github.io/2016/02/23/access-oracle-databases-from-azure-web-apps-using-oci8-drivers-with-php/(我按照这里的步骤进行操作,它对我有用)

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

驱动器输出 https://i.stack.imgur.com/g1guz.png

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

  1. 需要应用程序设置 PHP_INI_SCAN_DIR
  2. 需要具有正确设置的 /site/ini/extensions.ini 文件,我使用了这个: 扩展名=“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 驱动程序已加载。在我正确设置所有这些之前,我看到了类似的白色错误页面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0) 的相关文章

  • 无需 cron 在后台发送邮件

    我想知道是否有一种方法可以运行 PHP 循环 以便在后台向订阅者发送几百封电子邮件 我的目标是格式化新闻通讯 单击发送 然后关闭浏览器或更改页面 当然 发送电子邮件的实际过程将在后台运行 不会因浏览器关闭而中断 我知道这可以通过 cron
  • 增加内存限制时出现奇怪的错误

    我使用的是共享托管环境 PHP 的默认内存限制是 32M 我在 Concrete5 设置方面遇到一些问题 当我尝试登录 Concrete5 的管理面板时 出现内存限制错误Allowed memory size of 33554432 byt
  • 从远程托管上的 PHP 获取 PHP 错误日志

    是否有 PHP 函数或其他方式以字符串形式获取 PHP 错误日志 我需要这个 因为我无法访问在其他人的服务器上运行的站点的错误日志 他提出通过电子邮件将错误日志发送给我 但这不太方便 有什么方法可以将错误日志输出到 PHP 页面吗 我意识到
  • PHP 启动:无法加载动态库 php5.4.3/ext/php_ffmpeg.dll 不是有效的 Win32 应用程序

    再会 我尝试在 Windows 7 计算机上安装 dll 文件 php ffmpeg 但不断收到此错误 29 Jan 2013 11 37 00 UTC PHP Warning PHP Startup Unable to load dyna
  • 为什么我的浮点数大于 1 时在 MYSQL 中存储为 .9999?

    我将进程时间作为 float 4 4 存储在 MySQL 数据库中 start time microtime TRUE things happen in my script end time microtime TRUE process t
  • laravel cron 使用错误

    Laravel 错误 cron 使用 usr bin php home sitevk artisan 计划 运行 1 gt gt dev null 2 gt 1 应用 控制台 内核 use Illuminate Console Schedu
  • 在PHP中,如何在表格中显示数组内容

    如果我在 MySQL 客户端中进行选择 我将得到如下所示的输出 mysql gt select FROM group LIMIT 2 group id group supergroup id group deletable group la
  • PHP-列出一年中一个月中的所有天[重复]

    这个问题在这里已经有答案了 可能的重复 我在 PHP 中有 2 个日期 如何运行 foreach 循环来遍历所有这些日期 https stackoverflow com questions 3207749 i have 2 dates in
  • Doctrine 装置如何覆盖 purger 类?

    From doctrine fixture bundle the console doctrine fixtures load n命令定义如下 https github com doctrine DoctrineFixturesBundle
  • 这是依赖注入吗?这是一种不好的做法吗?

    我有一个小框架 我是这样编码的 我不确定这是否称为依赖注入 我不知道它是否像设计模式 我也不知道并且想知道是否通过 this因为 param 是一种不好的做法 看看这个 不是一个有效的示例 只是将这些代码写入浏览器中以供解释 This is
  • php 邮件特殊字符 utf8

    我有以下脚本 在电子邮件中 主题 Testmail Special Characters Body Hi there this isn t somet
  • 如何检查 $row['column_name'] 是否返回空 php mysql

    我有一个带有列的表格 id name phone describe 当我从这个表中获取值时 我正在使用 row mysql fetch array query 现在我想检查是否 row describe 返回空值 如何查看php 您可以使用
  • 如何在php中根据url从mysql获取数据?

    我在 mysql 数据库中有一个页表 其中包含 page name title content author 字段 我想用 php 来获取它http www domain com index php page page name http
  • Microsoft VS Code:当我尝试启动程序时,出现错误“spawn php ENOENT”

    我正在尝试在 Microsoft VS Code 上运行 PHP 代码 当我单击启动时 唯一发生的事情是调试控制台中出现错误 生成 php ENOENT 为了解决这个问题 我将 XDebug 的 dll 文件放入 ext 文件夹中 我将 p
  • 将二进制数据从 C# 上传到 PHP

    我想将文件从 Windows C 应用程序上传到运行 PHP 的 Web 服务器 我知道 WebClient UploadFile 方法 但我希望能够分块上传文件 以便我可以监控进度并能够暂停 恢复 因此 我正在读取文件的一部分并使用 We
  • Doctrine2:入门教程“没有要处理的元数据类”

    我已经将本教程的第一部分运行了三遍 到目前为止 在这里或其他地方进行的大量搜索都无法帮助我使其发挥作用 我收到 没有要处理的元数据类 当我尝试时 php vendor bin doctrine orm schema tool update
  • 通过php将mp3转换为ogg

    我有一个网站 用户可以上传音乐并将其转换为 mp3 但我需要 mp3 和 ogg 文件支持才能以 html5 播放音乐 那么 有没有可以将mp3转换为ogg的php脚本呢 使用 ffmpeg 您可以直接从 php 脚本执行命令
  • 简单的颜色变化

    我正在创建一个用户界面 用户可以在其中更改页面的颜色值 我想要的是获取分配给其背景颜色的值并将其变亮一定程度 我只是想获得一条亮点线 而不必每次都制作新图像 示例 用户将背景颜色设置为 ECECEC 现在我希望某个元素边框变成 F4F4F4
  • PHP:是否可以从文件内容(字符串)创建 SplFileObject 对象?

    例如 contents file get contents image png 是否可以从 contents 创建 SplFileObject 对象 Thanks php 有一些特殊的流包装器 http www php net manual
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql

随机推荐

  • Jersey 2 多部分表单数据注入源

    我有一个方法 POST Consumes multipart form data Produces text xml public Response processForm FormDataParam myparam InputStream
  • RabbitMQ 失败,错误:无法连接到节点rabbit@TPAJ05421843:nodedown

    在 Windows 7 Enterprise 计算机上 我全新安装了 Erlang 17 4 和 RabbitMQ 3 4 3 x64 安装成功且顺利 我还没有尝试创建我的第一个队列或交换器 但我已经看到了麻烦 这个问题类似于另一个SO帖子
  • 不将数据保存到文档方向

    我尝试将数据保存到文档目录中 我没有收到任何错误 但它从不保存数据 它总是说 文件不存在 创建它 let fileManager FileManager default if let documentsDirectory fileManag
  • Control.BeginInvoke 是否有一个变体可以在句柄被销毁之前/之后工作?

    我有一个显示底层异步对象状态的控件 该对象引发事件 这些事件到达表单 在那里它们基本上排队并最终使用 BeginInvoke 进行调用 当控件被废弃时就会出现问题 因为事情是异步发生的 这意味着事件回调在处理过程中总是可能排队 所以我有时会
  • 找不到导入的项目“C:\Microsoft.CSharp.targets”

    我今天尝试打开 Visual Studio 2008 时遇到此错误project在 Visual Studio 2005 中 找不到导入的项目 C Microsoft CSharp targets 在记事本 或记事本 中打开您的csproj
  • 整数转换(缩小、扩大)、未定义的行为

    对我来说 以我可以轻松理解的方式找到有关该主题的信息非常困难 因此我要求对我所找到的内容进行审查 这都是关于转换和转换的 在示例中我将提到 signed unsigned int bigger signed unsigned char sm
  • 如何在 Java 中检测苹果芯片 (M1) 与英特尔芯片?

    对于每个不理解这个问题的人 请注意 os arch属性只会给你JRE的架构 而不是底层操作系统的架构 这不能回答我的问题 如果在 64 位系统上安装 32 位 jre System getProperty os arch 将返回 x86 为
  • 如何“取消转换”来自 South (Django) 的应用程序?

    我的内心发生了很大的变化models py 包括删除很多字段 并重命名几个类 schemamigration auto工作正常 但尝试migrate抛出一堆错误 我的所有代码目前都在开发中 所以我不介意丢失太多数据 所以我希望 South
  • 请求失败,HTTP 状态为 401:未经授权。 SSRS

    我在 MVC Web 项目中有一个处理 SSRS 的类 当我在 IIS 计算机中运行该应用程序时 我可以正常访问报告 当从网络上的另一台计算机运行时 出现 请求失败 HTTP 状态 401 未经授权 报表服务器有自己独特的凭证 不接受网络上
  • WinDbg:APPLICATION_HANG_WRONG_SYMBOLS

    我对 WinDbg 还很陌生 我正在尝试找到一个导致我的应用程序无缘无故挂起的错误 我不确定我做的事情是否正确 但我知道我需要系统 dll 以及我正在调试的 exe 的符号 因此 我这样设置符号路径 srv c websymbols htt
  • post方法的问题(使用fetch和express)

    我是一个非常初学者 所以我希望我的问题不是那么愚蠢 我想要做的是将经度和纬度从客户端 JavaScript 传递到服务器端的 Node js 中 我正在使用 fetch 和express js 下面是我的 html 代码 latitude
  • 如何为 PMD Xpath 规则设置嵌套条件

    我的规则要求我仅将它们应用于名称中不包含 get 的方法 换句话说 我的规则只需要应用于类中的非 getter 方法 我知道要掌握所有非 getter 方法 我可以使用 MethodDeclarator not contains Image
  • 步数计数器不会重置步数

    我可以使用以下命令开始和停止记录步骤Sensor TYPE STEP COUNTER通过注册和取消注册侦听器 但是 通过传递给我的应用程序的实际值SensorEvent当应用程序被销毁时 对象不会重置为零 如果我关闭应用程序并重新启动它 或
  • Javascript `this` 对象 == 成员函数中的 `window`

    在我的一些 Javascript 对象中 我发现我的this指针是正确的 这些是new Func type 对象 创建时 但在分配的方法中可能是错误的 function Confused console log checking this
  • 未找到 Emacs shell 命令

    我在 Mac OS X 10 5 8 上工作 我正在努力学习emacs 我对它很陌生 今天尝试从 emacs 中输入 shell 命令 我进入了pdflatex filename 但是 它给了我一个错误说 bin bash pdflatex
  • django 查询所有相关集的过滤?

    class Customer models Model name models CharField max length 200 class CustomerTicket models Model customer models OneTo
  • NSFetchedResultsChangeDelete 未被触发

    以前有人遇到过这个吗 当我选择从 tableView 由 FRC 填充 中删除一行时 应用程序不会崩溃或挂起 它没有任何作用 删除按钮保持选中状态 如果我单击模拟器上的其他位置 删除按钮将取消选择并消失 但单元格永远不会从 UI 中删除 我
  • libTogl 未定义的引用

    我正在尝试安装 netgen 从源代码构建 因此需要 Togl 我通过以下方式安装了它 sudo apt get install libtogl1 libtogl dev 当输入 make 时 我收到以下错误消息 usr lib gcc x
  • #ifdef 与 #if - 作为启用/禁用特定代码部分编译的方法,哪种更好/更安全?

    这可能是一个风格问题 但我们的开发团队存在一些分歧 我想知道是否还有其他人对此事有任何想法 基本上 我们有一些调试打印语句 我们在正常开发期间将其关闭 我个人更喜欢执行以下操作 SomeSourceFile cpp define DEBUG
  • Azure Web 应用程序、PHP 7.4、OCI8(Oracle 即时客户端 12.2.0.1.0)

    我们正在尝试将现有的 PHP 7 4 应用程序从 Windows Server 2012 上运行的内部服务器提升到 Azure Web 应用程序 PHP 应用程序使用 OCI8 连接到 Oracle 数据库 在不启用 OCI8 扩展的情况下