我正在启用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" (但我可以自己访问,编辑和删除文件)。
C:/something/...
检查我的每个目录在ORDER中它们在PATH变量中列出(但是没有一个包含OCI.dll,如预期的那样)。
Q:/something/...
甚至不会显示在此目录中。我的PATH变量中有多个Q驱动路径,并且它们都没有显示在Process Monitor中被检查。
\\someserver\something\...
在Process Monitor中显示为记录,但"结果"列返回" ACCESS DENIED"
答案 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的帐户不是您的用户帐户,并且没有相同的环境设置和访问权限。