【问题标题】:PHP: pdo_oci driver does not work under apache, but does work from consolePHP:pdo_oci 驱动程序在 apache 下不工作,但在控制台工作
【发布时间】:2017-06-14 13:41:27
【问题描述】:

我对 PHP PDO 和 Oracle 有一个非常令人费解的情况。我是 在 Centos 7 上运行。我的脚本,在 Apache 下得到错误 “错误:找不到驱动程序”,但是脚本从命令行运行良好。

当我运行测试脚本以列出驱动程序时,从命令行:

foreach(PDO::getAvailableDrivers() 作为 $driver) echo $driver, '
', "\n";

它返回:

mysql
oci
pgsql
sqlite

但是在apache下运行时,缺少oci:

mysql
pgsql
sqlite

为了增加这个谜团,运行 phpinfo() 显示在该部分 “已解析的其他 .ini 文件”是 /etc/php.d/pdo_oci.ini 的条目(适用于控制台和 apache)。

关于为什么 oci 驱动程序在脚本时未显示的任何想法 是在apache下运行的吗?

【问题讨论】:

  • 你能比较一下CLI下php -m的输出和apache中get_loaded_extensions()的输出吗?
  • 嗨apokryfos。它显示了相同的情况。 php -m 显示“PDO_OCI”,但是apache下没有get_loaded_extensions()对应的模块。这是一个很长的列表。你有什么具体的要求吗?

标签: php oracle pdo oracle-call-interface


【解决方案1】:

我通过使用 Oracle 安装配置让它工作来“解决”了这个问题。我安装了 Instant Client 并让 PHP 在命令行和 apache 下识别 oci 模块(使用 ./configure --with-pdo-oci=instantclient,/usr,11.2 构建 pdo_oci)

无法识别的 TNS_ADMIN 值存在更多问题。我通过使用 Oracle 连接的替代 PDO DSN 规范解决了这个问题:

oci:dbname=//HOST[:PORT]/SERVICE_NAME

感谢任何愿意花时间在此上的人。就像许多与 Oracle 相关的经历一样,这种经历让我想起了我为什么使用 Postgres。

【讨论】:

    猜你喜欢
    • 2020-11-24
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    相关资源
    最近更新 更多