5

ユーザーが register.php を送信するときに検証メールが送信されるのを待たせるのではなく、後で mail.php ファイルを実行する必要があります。

そこで、1 分後にコマンド ラインで ( register.php で呼び出される) mail.php を実行するためにatコマンドを使用することにしました。

しかし、at コマンドのインタラクティブ モードを使用している場合にのみ、その php ファイルにパラメーターを送信できます。

at now + 1 minute
at> php mail.php {email}     # {email} is the argument I want to pass

これを自動にしたいので、実行時にシェルスクリプトを使用する必要があります。

at -f mail.sh

しかし、 {email}引数を渡す適切な方法が見つかりませんでした。

シェルで環境変数を設定しようとしましたが、無駄でもありました:

register.phpファイルに、次のように書きました。

shell_exec('export email=foo@bar.com');
shell_exec('at -f mail.sh now + 1 minute');

mail.shに、次のように書きました。

#! /bin/bash
php mail.php $email
4

5 に答える 5

0

一度に:shell_exec('export email=foo@bar.com; at -f mail.sh now + 1 minute');

あるいは単に:shell_exec('php mail.php foo@bar.com');

于 2013-11-14T14:29:53.743 に答える
0

元の質問には十分な回答があったことは承知していますがpopen、PHP スクリプトで atコマンドを実行する場合は、次のように (GET パラメーターとして) 引数を含めることができます。

$target_script_path = "path/to/your/target/script";
$time = "now";
$file = popen("/usr/bin/at $time", "w");
//$cmd = "/usr/bin/php $target_script_path"; // Working example with no arguments supplied.
//$cmd = "/usr/bin/php $target_script_path?test_param=test_value"; // Trying to use a GET parameter like this does not work!
$cmd = "/usr/bin/php $target_script_path test_param=test_value"; // Working example *with* argument!
fwrite($file, $cmd);
pclose($file);

次にtest_param、ターゲット スクリプトの値を次のように取得できます。

$test_param = $_GET['test_param']; // "test_value"
于 2019-01-31T18:03:24.233 に答える