OS X中的XAMPP El Capitan - oci_connect():OCIEnvNlsCreate()失败

时间:2016-02-12 06:39:08

标签: php macos apache xampp oci8

此问题在我将Mac升级到OS X El Capitan之后才开始。在那之前它工作得很好。

我正在使用XAMPP,Oracle Instant Client已正确设置为与Oracle DB连接。我在安装时按照here提到的说明进行操作(单击问题"如何激活PHP的OCI8 / Oracle扩展?")。

但是,在我将操作系统升级到OS X El Capitan之后,它开始显示此警告,

  

警告:oci_connect():OCIEnvNlsCreate()失败。您的系统出了问题 - 请检查DYLD_LIBRARY_PATH是否包含Oracle Instant Client库的目录

我在互联网上搜索解决方案(不仅仅是SO),过去几天和我找到的最接近的匹配是:https://stackoverflow.com/a/20670810/5645769。所以,我尝试编辑文件org.apache.httpd.plist,正如答案所建议的那样。但是我遇到了这个错误:

  

您不拥有该文件" org.apache.httpd.plist"并且没有权限写信给它。您可以复制此文档并编辑副本。只有副本才会包含您的更改。

我向OP询问了这个问题,他的回复没有为解决这个问题提供任何帮助。所以我继续寻找解决方案。经过几天的搜索,我发现了这篇文章https://stackoverflow.com/a/32910408/5645769。所以我按照说明禁用了SIP(系统完整性保护),然后我就可以添加对文件的写访问权,并为我的帐户(还有管理员)添加文件夹。之后oci_connect()再次开始工作。

但是当我按照相同的答案再次禁用SIP时,同样的错误再次出现。我不确定,但似乎有oci_connect()尝试使用的其他文件权限发生了什么,但只有在禁用SIP时才能访问。

目前我正在努力保持SIP禁用(不确定,它可能造成什么危害),我需要一个能够在保持SIP启用的情况下工作的解决方案。

我花了很多天这个。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

/System/Library/LaunchDaemons/org.apache.httpd.plist仅用于控制内置于OS X的Apache服务器的行为。

要为XAMPP版本的Apache设置DYLD_LIBRARY_PATH,您需要编辑其启动脚本:

sudo nano /Applications/XAMPP/xamppfiles/apache2/ctl.sh

在文件的第二行,#!/bin/sh之后,您可以添加所需内容:

#!/bin/sh

DYLD_LIBRARY_PATH=/path/to/your/library/files

ERROR=0
HTTPD_STATUS=""
HTTPD_PIDFILE=/Applications/XAMPP/xamppfiles/logs/httpd.pid
HTTPD="/Applications/XAMPP/xamppfiles/bin/httpd -f /Applications/XAMPP/xamppfiles/etc/httpd.conf"

请勿禁用系统完整性保护。这是有原因的。