我已经从源代码安装并运行 PHP53。
PATH 设置~/.profile
如下:export PATH=$PATH:/usr/local/php53/bin
$ php -v # works good
但:
$ sudo php -v # sudo: php: command not found
我需要运行sudo composer self-update
,它给了我一条消息:
/usr/bin/env: php: No such file or directory
$ composer -v # works good (installed globally by this manual https://getcomposer.org/doc/00-intro.md#globally
简而言之:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
我在使用 Apache22 时遇到了类似的问题apachectl
,但我使用完整路径通过 sudo 运行。但这是一种解决方法,我想知道如何使它正常工作。
问题是,它$ sudo php -v
不起作用sudo composer self-update
。
更新: 我在 /root/.profile 中添加了 PHP53 的新路径:
# ~/.profile: executed by Bourne-compatible login shells.
export PATH=$PATH:/usr/local/php53/bin
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
消息
然后我重新启动了操作系统,以下是各种测试的结果:
$ echo $PATH # /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/apache2_2/bin:/usr/local/php53/bin
$ php -v # works, as before
$ sudo php -v # "sudo: php: command not found"
$ sudo su
# echo $PATH # /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games , i.e. "export PATH=$PATH:/usr/local/php53/bin" did not have effect on $PATH.
# php -v # "The program 'php' is currently not installed. You can install it by typing:
apt-get install php5-cli"
# . /root/.profile
# php -v # "PHP 5.3.29 (cli) (built: Sep 24 2015 13:05:17)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
但:
$ sudo php -v # still, "sudo: php: command not found"
为了缓解一下压力,
$ sudo /usr/local/php53/bin/php -v # is working
PHP 5.3.29 (cli) (built: Sep 24 2015 13:05:17)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
看来我们至少有两个问题:
- /root/.profile 中的导出 $PATH 无效(操作系统重启后测试!)
- 即使我这样做了
# . /root/.profile
,sudo php -v
仍然不起作用。
操作系统:Ubuntu 12.04,最新更新。
答案1
这取决于如何sudo
定义它的PATH
。基本上,它要么获取PATH
调用它的用户的,要么如果这样配置,它将读取在secure_path
变量中设置的内容/etc/sudoers
。
因此,您有两个选择:
将二进制文件所在的目录添加
php
到安全路径。运行sudo visudo
,找到这一行:Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
并将其更改为
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/php53/bin:$
只需注释掉该
secure_path
行,并sudo
与调用用户共享相同的路径。当然,这不是最安全的选择,但这取决于您。为此,请运行并在行首sudo visudo
添加:#
# Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:$
保存文件并退出visudo
,您应该能够sudo php -v
按预期运行。