ユーザが特定のbashスクリプトをバックグラウンドで実行し、そのコンテンツを取得し、そのファイルを保存するために使用された一時ファイルを削除できるWebベースのインタフェースを作成しようとしています。出力。すべてが計画どおりに動作しているようですしながら、PHPでテンポラリファイルの名前とパスを保存する
<form method="POST">
<button type="submit" name="scan" class="btn btn-default">Run script</button>
</form>
<?php
if (isset($_POST['scan'])) {
$tmpfname = tempnam("/tmp", "SS-");
shell_exec('script.sh > '. $tmpfname .' &');
}
?>
<form method="POST">
<button type="submit" name="check-and-delete" class="btn btn-default">Check if script is running and delete the temporary file</button>
</form>
<?php
if (isset($_POST['check-and-delete'])) {
if (shell_exec("pgrep <its process>") != '') {
echo 'Script is running';
} else {
echo 'Script is NOT running';
echo '<pre>'. file_get_contents($tmpfname) .'</pre>';
unlink($tmpfname);
}
}
しかし、最終的には、$tmpfname
は、そのコンテンツを取得し、それを削除することができなくなる空のように表示されます。これまでのところ私は、これは持っています。
次のようになります:
- ユーザーは
Run script
をクリックします。1.1.
tmpファイルが作成されました。1.2.
スクリプトは実行され、出力はtmpファイルにリダイレクトされます。
- ユーザクリック
Check if script is running and delete the temporary file
。2.1.
スクリプトがまだ実行中であるかどうかを確認するためのチェックが実行されました。スクリプトがまだ実行されている場合は、何も行われずにエコーされます。2.2.
スクリプトが実行されていない(終了している)場合は、tmpファイルの内容を取得してファイルを削除する必要があります。
問題が2.2
に遭遇しています。一時ファイルの名前/フルパスを永続的に保存するにはどうすればよいですか?
ここでの問題は、 '$ tmpfname'の値が2番目の投稿で利用できないことです。フォームに追加したり、セッションに保存したりすることもできます。 PS:あなたのコードをより一般的にするためには、 'tempnam("/tmp "、" SS - ")の代わりに' tempnam(sys_get_temp_dir()、 'SS - '); –
「フォームに追加する」とはどういう意味ですか? – McJohnson
私は次のように書いています:第2フォームに '$ tmpfname'を隠しフィールドとして追加してください。 –