1

shell_exec()WordPress プラグインでバックグラウンド プロセスを実行するために使用shell_exec()していますが、管理オプション ページで使用すると WordPress が何らかの形で混乱することがわかりました。相対パスを使用したインクルードが正しく処理されていないようです。

これは、問題を実証するために私が書いたサンプル プラグインです。

/* Plugin Name: Sample ShellExec */

add_action('admin_menu', 'sample_shellexec_menu');
function sample_shellexec_menu() {
    add_options_page(
        'Sample Shell Exec', 
        'Sample Shell Exec', 
        'manage_options',
        'sample_shell_exec', 
        'sample_shellexec_admin');
}
function sample_shellexec_admin() {
    ?>
    <div class="wrap">
    <?php
        $phppath = 'php';
        // $phppath = 'Z:\xampp\php\php.exe'; // in my case
        echo ABSPATH . '<br />';
        $output = shell_exec($phppath . ' "' . ABSPATH . '/index.php" 2>&1');       
        echo $output;
    ?>
    </div>
    <?php
}

オプション ページに移動すると、次のようなエラー メッセージが表示されます。

警告: require(./wp-blog-header.php): ストリームを開くことができませんでした: No such file or directory in [path to the WordPress] \index.php on line 17 Call Stack: 0.0002 320664 1. {main}( ) [WordPress へのパス] \index.php:0 致命的なエラー: require(): 必要な './wp-blog-header.php' (include_path='.;\xampp\php\PEAR') を[ WordPress へのパス] \index.php 17 行目 Call Stack: 0.0002 320664 1. {main}() [WordPress へのパス] \index.php:0

shell_exec()管理画面以外で使用した場合、エラーは発生しません。理由を知りたいです。

4

1 に答える 1

2

環境が適切なパスでコマンドを実行するように強制することができます。

shell_exec("cd " . escapeshellarg(ABSPATH) . "; " . $phppath . ' index.php 2>&1');

私は Linux システムに慣れているので、これが Windows で機能するかどうかはわかりません。

于 2012-09-16T10:58:18.607 に答える