如何在OSX上为您安装的新PHP版本设置users .bash_profile之外的系统$PATH


how to set the system $PATH outside of users .bash_profile on OSX for an added PHP version you installed

我的问题是。我正试图编写一个php脚本,将运行以下类型的命令。

exec("$(which php) -f /path/to/script.php >> /path/to/log.log 2>&1 &");

问题是,我正在运行OSX 10.5 leopard并使用Entropy PHP包。这将在/usr/local/php5/bin下创建php。与OSX一起安装在/usr/bin目录下的普通php。所以当PHP执行这个命令时,它使用了错误的PHP可执行文件。现在我知道如何通过将$PATH添加到$PATH的开头来更改.bash_profile中的$PATH,以便系统接受我想要的PHP,而不是默认的PHP。问题是,当从脚本运行php时,它不会在我的用户下执行。因此,它没有更新的$PATH设置。

我还研究了在/etc/paths和etc/paths中设置它。d/但是这些都将路径附加到末尾,我需要它附加到开始,这样我的脚本将使用正确的PHP可执行文件。

我知道我可能可以运行另一个执行命令并设置路径,但这只是一个本地环境问题,当代码进入生产时,我不需要这个设置。

一个选项是为所有用户设置全局路径。请看下面的几个例子。

例如,如果运行该命令的用户使用bash作为其shell,您可以编辑/etc/bashrc,添加如下行:

export PATH="$PATH:/more/paths:/

另一个选项是修改/etc/launchd.conf(注意它在Leopard上默认不存在,并且期望csh setenv语法)

你有没有试过在你的exec函数之前执行这个?

$my_new_path = '/usr/local/php5/bin';
putenv( "PATH=" . $my_new_path . PATH_SEPARATOR . getenv('PATH') );
//then run your exec() call

如果我是你,我会制作一个专门用于exec和shell调用的包装脚本:

#!/usr/bin/env php
<?php 
include('/path/to/script.php');

这样,您可以使用指向php的环境变量,这将在大多数nix系统上工作。

现在这仍然不能让你在OS X安装中设置正确,你将硬编码路径或遵循答案nimrodm链接。