【发布时间】: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