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
}

转到选项页面,您会看到一条错误消息,例如,

警告:需要(./wp-blog-header.php):无法打开流:第 17 行的[WordPress 的路径] \index.php 中没有这样的文件或目录调用堆栈:0.0002 320664 1. {main}( ) [WordPress 的路径] \index.php:0 致命错误:require():在[ WordPress 的路径] \index.php 第 17 行调用堆栈: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 系统,所以我不知道这是否适用于 Window。

于 2012-09-16T10:58:18.607 回答