【问题标题】:shell_exec() Does Not Work Used in Admin Panel of WordPressshell_exec() 在 WordPress 的管理面板中不起作用
【发布时间】:2012-09-08 21:40:56
【问题描述】:

我正在使用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):无法打开流:没有这样 [WordPress 的路径]\index.php 中的文件或目录在第 17 行调用 堆栈:0.0002 320664 1. {main}() [WordPress 的路径]\index.php:0 致命错误:require():无法打开所需的“./wp-blog-header.php” (include_path='.;\xampp\php\PEAR') 在 [WordPress 的路径]\index.php 在第 17 行调用堆栈:0.0002 320664 1. {main}() [WordPress 的路径]\index.php:0

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

【问题讨论】:

  • var_dump()shell_exec() 的字符串可能有问题。 ABSPATH 里面有什么?
  • 正如您在上面提供的示例代码中看到的,我使用echo() 来查看ABSPATH 的值和shell_exec() 的输出。我也尝试了var_dump(),但它返回的结果与echo() 相同。 ABSPATH 的输出值正确显示了 WordPress 安装路径。

标签: php xampp background-process wordpress


【解决方案1】:

您可以尝试强制环境以正确的路径运行您的命令:

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

我习惯了Linux系统所以我不知道这是否适用于Window。

【讨论】:

  • 输出给出The filename, directory name, or volume label syntax is incorrect. 它在你的服务器上工作吗?
  • 不幸的是,我会尝试为 windows 找到相同的方法
  • 尝试用&amp; 替换;:找到答案here
  • 哇,成功了!谢谢。我想知道为什么在管理面板中使用时需要更改目录。
  • 因为管理面板和其他文件不在同一个目录(即:所有正常路由使用的索引都在根目录,而wp-admin是一个单独的目录)。如果您尝试从目录执行 exec() 某些内容,您的新实例将拥有它已执行位置的 get_include_path()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多