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): ストリームを開くことができませんでした: No such file or directory in [path to the WordPress] \index.php on line 17 Call Stack: 0.0002 320664 1. {main}( ) [WordPress へのパス] \index.php:0 致命的なエラー: require(): 必要な './wp-blog-header.php' (include_path='.;\xampp\php\PEAR') を[ WordPress へのパス] \index.php 17 行目 Call Stack: 0.0002 320664 1. {main}() [WordPress へのパス] \index.php:0
shell_exec()
管理画面以外で使用した場合、エラーは発生しません。理由を知りたいです。