ソースから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
が機能しないことです。
PDATE: PHP53への新しいパスを/root/.profileに追加しました:
# ~/.profile: executed by Bourne-compatible login shells.
export PATH=$PATH:/usr/local/php53/bin
if [ "$BASH" ]; then
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
fi
mesg n
次に、OSを再起動しました。さまざまなテストの結果を次に示します。
$ 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
少なくとも2つの問題があるようです。
# . /root/.profile
を実行しても、Sudo php -v
は機能しません。OS:最新の更新を含むUbuntu 12.04。
これは、Sudo
がPATH
をどのように定義するかにかかっています。基本的に、呼び出し元のユーザーのPATH
を取得するか、そのように構成されている場合は、secure_path
の/etc/sudoers
変数に設定されている内容を読み取ります。
したがって、2つの選択肢があります。
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
を期待どおりに実行できるはずです。