首页 文章

shell_exec()不起作用在WordPress的管理面板中使用

提问于
浏览
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 . '
'; $output = shell_exec($phppath . ' "' . ABSPATH . '/index.php" 2>&1'); echo $output; ?> </div> <?php }

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

警告:require(./ wp-blog-header.php):无法打开流:第17行的[WordPress的路径] \ index.php中没有此类文件或目录 . 调用堆栈:0.0002 320664 1. ()[WordPress的路径] \ index.php:0致命错误:require():无法打开所需的'./wp-blog-header.php'(include_path ='.; \ xampp \ php \ PEAR')in [WordPress的路径]第17行的\ index.php调用堆栈:0.0002 320664 1. ()[WordPress的路径] \ index.php:0

如果在管理面板外部使用 shell_exec() ,则不会发生此错误 . 我想知道为什么 .

1 回答

  • 2

    您可以尝试强制环境在良好的路径中运行您的命令:

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

    我已经习惯了Linux系统,所以我不知道这是否适用于Window .

相关问题