我正在使用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):无法打开流:没有这样的 第17行的 [WordPress的路径] \ index.php中的文件或目录 Stack:0.0002 320664 1. {main}() [WordPress的路径] \ index.php:0 致命错误:require():无法打开所需的'./wp-blog-header.php' [WordPress的路径] \ index.php中的(include_path ='.; \ xampp \ php \ PEAR') 第17行调用堆栈:0.0002 320664 1. {main}() [WordPress的路径] \ index.php:0
如果在管理面板外部使用shell_exec()
,则不会发生错误。我想知道为什么。
答案 0 :(得分:2)
您可以尝试强制环境在良好的路径中运行命令:
shell_exec("cd " . escapeshellarg(ABSPATH) . "; " . $phppath . ' index.php 2>&1');
我已经习惯了Linux系统,所以我不知道这是否适用于Window。