
eth0 から IP アドレスを取得するために、次の PHP コマンドを実行してみます。
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | tr ':' ' ' | awk '{ print $3 }'"));
しかし、何も返ってきません。まったく同じコマンドを ssh 経由で実行すると IP が取得されるため、コマンドは機能するはずです。
私はvisudo
これらの行を開いて追加し、その後apache2を再起動しました
www-data ALL = NOPASSWD: /sbin/ifconfig
www-data ALL = NOPASSWD: /bin/grep
www-data ALL = NOPASSWD: /usr/bin/awk
www-data ALL = NOPASSWD: /usr/bin/tr
しかし、まだ何も返ってきません
答え1
grep パターンが出力と一致していないようでifconfig
、grep
出力が生成されない場合は、次を試してください。
$ip = trim(shell_exec("/sbin/ifconfig eth0 | grep -i 'inet Adresse:' | awk '{ print $2 }'"));
答え2
解決策を見つけました。OSshell_exec
がドイツ語に設定されている場合でも、実行すると常に英語の出力が得られるため、出力にではなく がshell_exec("/sbin/ifconfig")
常に表示されます。inet addr
inet Adresse
また、ファイルのユーザーとグループを に変更し、 でスクリプトの実行を許可することも忘れていましたがwww-data
、chown
これchmod
が必要なのかどうかはわかりません。