系统环境变量路径与共享驱动器或UNC


System Environment Variable PATH with Shared Drives or UNC

我正在使OCI8 for PHP与Apache一起使用。

我一直得到类似的错误:

PHP Warning:  PHP Startup: Unable to load dynamic library 'C:'php-5.5'ext'php_oci8.dll'

Fatal error: Call to undefined function oci_connect() in ...



到目前为止

我已经设置了我的系统环境变量PATH,以包括包含php、php ext和我的oracle的instantclient的路径(值得注意的是,instantclient文件位于网络共享驱动器上)。

然后,我使用Process Monitor来查看Apache加载时到底发生了什么,我发现了有关OCI.DLL (oracle客户端的一部分)的行。


过程监视器显示:
dll没有被加载。每次加载时都显示找不到文件,"result"列显示"NAME not found"
OCI.dll正在每个PATH变量路径中查找,除了我的共享驱动器位置,在这种情况下是Q:/something/something…
我认为这有点奇怪,所以我把"Q"改为使用UNC路径(知道系统环境变量不正式支持UNC路径)。当我再次用进程监视器检查它时,它显示它正在UNC路径中寻找OCI.dll,但它返回为"拒绝访问"(但我可以访问,编辑和删除文件)。


Process Monitor的摘要:

C:/something/...

按照PATH变量中列出的顺序检查我的每个目录(但如预期的那样,它们都不包含OCI.dll)。

Q:/something/...

甚至不会显示为在此目录中查找。我在我的PATH变量中有多个Q驱动路径,它们都没有显示在进程监视器中被检查。

''someserver'something'...

在进程监视器中显示为记录,但"结果"列返回为"ACCESS DENIED"


  • 当驱动器号与网络共享驱动器相关联时,为什么不使用PATH位置?(我已经使用了相同的确切路径设置,以启用使用相同的确切的即时客户端文件与VBA一起使用,它工作得很好)
  • 当我对文件有读写访问权限时,为什么它告诉我它不能访问UNC路径下的文件?

如果您将Apache作为服务运行,那么默认情况下,它将作为NT AUTHORITY'SYSTEM运行,而不是当前登录的用户。我的回答遵循这个假设。

OCI.dll未被加载。每次尝试加载时都会显示该文件没有找到"result"列显示"NAME not found "dll正在每个PATH变量路径中查找除了我的共享驱动器位置,在本例中是问://一些东西…

Q:是您的用户帐户的映射驱动器,而不是SYSTEM帐户,因此就Apache而言,该路径根本不存在。

我认为这有点奇怪,所以我改变了"Q"使用UNC路径(知道系统环境变量不正式支持UNC路径)。当我用Process Monitor再次检查时,它显示了它在UNC路径中寻找OCI.dll,但它返回为"ACCESS DENIED"(但我可以自己访问、编辑和删除该文件)。

通过使用UNC路径,本地SYSTEM帐户现在可以看到位置,但没有被授权,因此ACCESS IS DENIED消息。

所以你的两个问题的答案是,用于运行Apache的帐户不是你的用户帐户,没有相同的环境设置和访问权限。