サーバーサイド環境で作業する場合、外部コマンドライン プログラムを実行する必要がある状況がよく発生します。 PHP スクリプトから。ただし、PHP を実行するデフォルトのユーザーには、特定のアプリケーションへの十分な権限またはアクセス権がない可能性があります。
ローカルホストで Apache を実行し、Rhythmbox の再生を制御しようとしているシナリオを考えてみましょう。 www-user として実行される PHP スクリプトから。コマンド rhythmbox-client --pause の実行は、手動で実行すると完全に機能しますが、www-user として実行すると失敗します。これは、Rhythmbox がユーザーのインスタンスを認識またはアクセスしないためです。
有効な 1 つの方法解決策は、sudo コマンドを利用して、特定のユーザーとして外部プログラムを実行できるようにすることです。これには、sudoers ファイル (visudo) を変更して、Web サーバー ユーザー (wwwuser など) に特定のコマンドを実行する権限を付与することが含まれます:
wwwuser ALL=/usr/bin/rhythmbox-client
これにより、必要なコマンドのみを実行する Apache の機能が制限され、潜在的なセキュリティ リスクが防止されます。 .
この特定のケースでは、PHP が www-user として実行されているため、Rhythmbox はまだユーザーのインスタンスを認識できない可能性があります。これに対処するには、rhythmbox-client を呼び出す bash スクリプトを作成し、実行ユーザーの環境から DBUS_SESSION_BUS_ADDRESS を取得します。
<code class="bash">#! /bin/bash DBUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS /proc/*/environ 2>> /dev/null| sed 's/DBUS/\nDBUS/g' | tail -n 1` if [ "x$DBUS_ADDRESS" != "x" ]; then export $DBUS_ADDRESS /usr/bin/rhythmbox-client --pause fi</code>
この bash スクリプトは、PHP によって wwwuser として実行され、Rhythmbox の再生を制御できるようになります。 PHP アプリケーションからユーザーとして。
以上がPHPで特定のユーザーとして外部コマンドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。