好的,我想在开始之前我应该说,当谈到 OSX/BSD 的话题时,我是一个完整的 n00b。过去一周左右我才使用 MBP,并且一直在学习 HEAPS。尽管如此,尽管如此,我仍在努力解决一些事情,所以,请保持温柔。:)
好吧,继续我的问题。几天来,我一直在尝试设置本地开发环境。我已经激活了操作系统附带的 Apache 2.2 和 PHP 5.3.3。我还手动安装了 MySQL、Homebrew 并设置了 BIND(以便于虚拟主机管理)。一切似乎都运行良好,直到我意识到我还必须安装 PEAR。
不幸的是,我公司产品中的许多关键领域都严重依赖 PEAR 库,因此在继续之前,我必须确保所有这些都正常运行。要安装 PEAR,我执行了以下操作:
- $ cd /usr/local/
- $ curl http://pear.php.net/go-pear | 须藤 php
- $ php -q go-pear.php
- 浏览 PEAR 安装说明
- $ mate ~/.bash_profile
- 将 /usr/local/bin 添加到我的 $PATH 变量中
- 保存并关闭 TextMate
- $ which pear(验证 PEAR 可执行文件的位置)
- $ php -r "phpinfo();" | grep '.ini' (验证当前 php.ini 的位置)
- $伴侣/etc/php.ini
- 将“include_path”设置更改为:“.:/usr/local/PEAR”
- 保存并关闭 TextMate
- $ sudo apachectl 重启
- 对结果很满意,我开始安装一些基本的 PEAR 包(HTTP、NET 等)
然后,我检查完我们的一个 SVN 存储库的最新版本并安装该应用程序。我尝试通过浏览器访问它并得到以下效果的错误:
Warning: require_once(HTTP/Request2.php): failed to open stream: No such file or directory in /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php on line 8
Call Stack:
0.0003 651400 1. {main}() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/call.php:0
0.0028 927096 2. RXML_Config::autoload() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:0
0.0040 1144272 3. require_once('/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php') /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:18
Fatal error: require_once(): Failed opening required 'HTTP/Request2.php' (include_path='.:/usr/local/PEAR;/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/Library/Pear/') in /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php on line 8
Call Stack:
0.0003 651400 1. {main}() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/call.php:0
0.0028 927096 2. RXML_Config::autoload() /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:0
0.0040 1144272 3. require_once('/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/apps/Mpx/Poller.class.php') /Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/config/autoload.php:18
我可以验证这些文件的位置。它们确实存在并且位于正确的目录中。我的理解是,使用 '.:/usr/local/PEAR' 的 'include_path' PHP 首先在与调用脚本相同的目录中查找,如果没有找到,它会移动到列表中的下一个路径。在最后一种情况下,它应该是 /usr/local/PEAR,但它什么也没有。
我可以从错误报告中看到的唯一奇怪的是第二部分中的以下内容:
(include_path='.:/usr/local/PEAR;/Users/wilhelm/Sites/wrk/t-box-3a-rxml/public/Library/Pear/')
在 '.:/usr/local/PEAR' 之后有一个分号并附加了另一个(有效的)路径。我不担心这个特定的路径,但我担心分号会导致 PHP 认为第一个冒号之后的所有内容都是一条路径。如果是这种情况,那么 PHP 找不到 PEAR 库是有道理的。
鉴于我所提到的,还有其他人能想到任何理由或提供对此事的任何见解吗?谢谢堆!
编辑:
好的,这个问题已经解决了。我确实在终端中执行了以下命令:
$ grep -r -i ini_set("include_path {path/to/project}
Aaaand 我发现了以下内容:
ini_set("include_path", ini_get("include_path") . ";" . __CONFIG_PATH_LIBRARY_PEAR);
替换“;” 使用 PATH_SEPARATOR 很好地解决了这个问题。
谢谢雅各布!:)