以下のような内容のphp shell_execute("$command")を介して、bashで子スクリプトを実行しようとしています。
$command=$_GET['command'];
$op2=shell_exec("$command");
echo "Command $command output is <pre> $op2 </pre>";
提出時に私は得る
Command /path/to/childscript some_pattern 20 username test output is BLANK
基本的に、私の子スクリプトはタッチファイルを作成し、メールを送信し、スリープしてから再度メールを送信し、タッチファイルをrmします
hour=`date +%T`
pattern=$1
stime=$2
user=$3
reason=$4
touch ${sdir}/s.${pattern}
echo -e "Snooze activated ! \n Sending mail, please wait."
echo "Snooze started at: $hour for pattern= $pattern by $user for $stime seconds, reason = $4" | mutt a@b.com -s "active"
( echo -e "Snooze was started at: $hour on pattern = $pattern by $user for $stime seconds, buffered contents are below:\n " >> ${sdir}buffer.${pattern} && sleep $stime && rm -rf ${sdir}s.${pattern} && mutt a@b.com -s "Snooze expire" < ${sdir}/buffer.${pattern} && rm -rf ${sdir}/buffer.${pattern})&
出力として空白になっていたので。よりクリーンな親トリガースクリプトを作成して、このスクリプトを実行してみました
cat trigger
bash /path/to/childscript some_pattern 20 username testing &
echo "done"
そして、送信時にこのトリガースクリプトを呼び出すだけで、ある程度の進歩が得られます
Command /path/to/trigger output is
done
Snooze activated !
Sending mail, please wait.
今回もメールが来ました。つまり、子スクリプトは呼び出されますが、() 内のコマンドは実行されません。最後のコマンドがそのように書かれている理由は、これらすべてのコマンドが順番にのみ発生することを確認する必要があるためです。これは確かにサブシェル/バックグラウンドの問題ですが、このスクリプト全体を機能させる方法に行き詰まっています。また、子を呼び出すトリガーを呼び出すのではなく、子スクリプトを直接実行したいと思います。
私のフォームコードは、うまく見えますが、以下のとおりです
<div id= "test" >
<form action="/path/to/test.php" >
<form method="post" action="" >
<b>Execute command:</b><br>
<input type="text" name="command">
<input type="submit" value="enter">
<br><br>
</form>
</div>
私は web devl にまったく慣れていないので、誰かがランダムなコマンドを実行すると致命的になる可能性があると警告されています。同意しますが、許可された人のみがこのページにアクセスできます。また、これが不可能な場合は、適切なチェックを行ってこのスクリプトを実行する方法を教えてください。