【问题标题】:Why can't my Perl CGI script find the Oracle DBD?为什么我的 Perl CGI 脚本找不到 Oracle DBD?
【发布时间】:2008-11-16 22:07:33
【问题描述】:

DBD 和 Oracle 大师:

我有一个行为异常的 Perl Web 应用程序。我正在使用它从 Oracle DB 中读取一些内容并进行报告。我安装了 11.1.0.6.0 版的 Oracle Instant Client。我在 WinXP 上运行并将 PATH 环境变量设置为即时客户端位置。我的网络服务器有 Apache2。

问题是:当我从命令行运行应用程序时,它可以顺利运行。但是,当我从http://127.0.0.1/cgi-bin/a.cgi 运行时,我收到以下数据库访问错误:

install_driver(Oracle) failed: Can't load 'C:/usr/lib/auto/DBD/Oracle/Oracle.dll' for module DBD::Oracle: load_file:The specified module could not be found at C:/usr/lib/DynaLoader.pm line 202. at (eval 9) line 3

直觉告诉我这是一个权限问题,但我不知道该往哪里看。任何人都可以对此有所了解吗?非常感谢任何帮助。

谢谢, 猎犬加尼

【问题讨论】:

  • 能否提供错误信息中提到的调用代码?
  • Apache的错误日志有错误吗?

标签: sql perl oracle permissions


【解决方案1】:

错误显示 .DLL 的完整路径这一事实表明系统在查找 DLL 时没有任何问题,因此这确实支持了您的理论,即文件权限是问题所在。

要测试它是否真的是权限问题,请尝试编写一个简单的 Perl CGI 脚本,该脚本除了直接打开特定的 .DLL 文件(使用普通的 open 调用)并报告它是否工作外,什么都不做。

【讨论】:

    【解决方案2】:

    感谢阿尔尼塔克。我尝试按照您的建议进行操作,并且“打开”成功打开了“C:/usr/lib/auto/DBD/Oracle/Oracle.dll”。我记得当我在另一台机器上开发时看到了这个确切的错误,但那是因为 Oracle Instant Client 库在它上面丢失了。在我安装这些并设置“路径”变量后,一切都开始正常工作了。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,通过接口访问 cgi perl 程序时报告错误“Install_driver(Oracle) failed: Can't load 'C:/Perl/lib/auto/DBD/Oracle/Oracle. dll' 用于模块 DBD::Oracle: load_file:Access is denied at C:/Perl/lib/DynaLoader.pm line 201"。

      我在带有 IIS 6 的 Window 2003 Server 上使用 Perl 5.10。

      解决方案是将 Perl 目录的权限授予“所有人”以及 Oracle 安装文件夹。

      【讨论】:

        猜你喜欢
        • 2011-01-31
        • 1970-01-01
        • 2010-11-16
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2017-10-10
        相关资源
        最近更新 更多