具有共享驱动器或UNC的系统环境变量PATH

时间:2014-05-02 21:09:04

标签: php oracle dll oci oci8

我正在启用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和我的Instantclient for oracle的路径(值得注意的是,即时客户端文件位于网络共享驱动器上)。

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


Process Monitor显示:
OCI.dll未加载。每次尝试加载它都会显示文件未找到"结果"列显示"名称未找到"
正在为每个PATH变量路径寻找OCI.dll,除了我的共享驱动器位置,在这种情况下是Q:/ something / something ...
我觉得这有点奇怪所以我改变了#34; Q"使用UNC路径(知道系统环境变量不正式支持UNC路径)。当我再次使用Process Monitor检查它时,它显示它正在寻找UNC路径中的OCI.dll,但它返回为" ACCESS DENIED" (但我可以自己访问,编辑和删除文件)。


Process Monitor摘要:

C:/something/...

检查我的每个目录在ORDER中它们在PATH变量中列出(但是没有一个包含OCI.dll,如预期的那样)。

Q:/something/...

甚至不会显示在此目录中。我的PATH变量中有多个Q驱动路径,并且它们都没有显示在Process Monitor中被检查。

\\someserver\something\...

在Process Monitor中显示为记录,但"结果"列返回" ACCESS DENIED"


问题

  • 当驱动器号与网络共享驱动器关联时,为什么不使用PATH位置? (我使用了相同的路径设置,以便使用与VBA一样的完全相同的即时客户端文件,并且工作得很好)
  • 当我对文件进行读/写访问时,为什么它告诉我它无法访问UNC路径中的文件?

1 个答案:

答案 0 :(得分:1)

如果您将Apache作为服务运行,则默认情况下,它将以NT AUTHORITY\SYSTEM运行,而不是当前登录的用户。我的其余部分都遵循这一假设。

  

未加载OCI.dll。每次加载它的尝试都会显示该文件   没有找到"结果"列显示"名称未找到"   正在每个PATH变量路径中查找OCI.dll   除了我的共享驱动器位置,在这种情况下是   问:/什么/什么......

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

  

我觉得这有点奇怪所以我改变了#34; Q"使用UNC路径   (知道系统环境变量没有正式支持   UNC路径)。当我用Process Monitor再次检查时,它显示出来了   它正在寻找UNC路径中的OCI.dll,但它回来了   "访问被拒绝" (但我可以自己访问,编辑和删除文件)。

通过使用UNC路径,本地SYSTEM帐户现在可以查看该位置但未获得授权,因此ACCESS IS DENIED消息。

因此,您的两个问题的答案都是用于运行Apache的帐户不是您的用户帐户,并且没有相同的环境设置和访问权限。