0

shell_exec()WordPress プラグインの一部としてバックグラウンド PHP プロセスを実行しようとしています。

これがサンプルです。

/* Plugin Name: Sample Background Process */

add_action('init', 'Sample_Background_Process');    
function Sample_Background_Process() {
    $file = __DIR__ . '/log.html';
    $current = date('l jS \of F Y h:i:s A') . ': accessed<br />';
    file_put_contents($file, $current, FILE_APPEND);
}

プラグイン フォルダにログを作成し、ページがアクセスされるたびにテキストを追加します。

次に、この行を追加しましたshell_exec('php "' . ABSPATH . '/index.php" > /dev/null 2>/dev/null &');。そのため、バックグラウンド プロセスがページにアクセスし、ログ ファイルにテキストを追加する関数を実行する必要があります。しかし、それはしていないようです。1 回のページ読み込みで、ログ ファイルに 2 行が生成されると思います。ただし、追加されるのは 1 行だけです。つまり、このように呼び出された場合、バックグラウンド プロセスは実行されないか、WordPress は何もしません。

add_action('init', 'Sample_Background_Process');    
function Sample_Background_Process() {
    $file = __DIR__ . '/log.html';
    $current = date('l jS \of F Y h:i:s A') . ': accessed<br />';
    file_put_contents($file, $current, FILE_APPEND);
    shell_exec('php "' . ABSPATH . '/index.php" > /dev/null 2>/dev/null &');
}

私は何を間違っていますか?

Windowsサーバーでテストしているため、実際のスクリプトのパスはphp.exeへのパスによって変更されますphpshell_exec()他の PHP スクリプトでは問題なく動作します。

ありがとう。

4

1 に答える 1

2

AFAIK (私の知る限り) /dev/null は Windows には存在せず、NUL を使用するだけです...たとえば

shell_exec('php "' . ABSPATH . '/index.php" > NUL &');
于 2012-09-15T10:46:33.703 に答える