web-dev-qa-db-ja.com

PHP exec-有効か無効かを確認

サーバーでexec()が有効または無効にされている場合、PHPスクリプトをチェックインする方法はありますか?

41
Adrian M.
if(function_exists('exec')) {
    echo "exec is enabled";
}
37
nc3b

これにより、機能が実際に機能するかどうか(許可、権限など)が確認されます。

if(exec('echo EXEC') == 'EXEC'){
    echo 'exec works';
}
54
Michael D Price

ini_get( 'disable_functions')

実際にやりたいことは、ini_get('disable_functions')を使用して、利用できるかどうかを調べることです。

<?php
function exec_enabled() {
    $disabled = explode(',', ini_get('disable_functions'));
    return !in_array('exec', $disabled);
}
?>

ここでstackoverflowで答えました: 「exec」が無効になっているかどうかを確認してください 、これは実際にPHP manページ: http:// php。 net/manual/en/function.exec.php#97187

パス

上記がtrueを返した場合(exec()を使用できます)が、PHPがまだスクリプトをトリガーできない場合、そのスクリプトのパスの問題がある可能性があります。 :

print exec('which bash');

してみて

print exec('which ogr2ogr');
6
Duncanmoo

これにより、execが使用可能であり、実行前に有効になっていることが確認されます。 exec()を実行し、関数が存在しないか無効になっている場合、警告が生成されます。ブラウザにレンダリングされる可能性があり、ほとんど常にログファイルに行を書き込むサーバー設定に応じて=パフォーマンスヒット。

// Exec function exists.
// Exec is not disabled.
// Safe Mode is not on.
$exec_enabled =
   function_exists('exec') &&
   !in_array('exec', array_map('trim', explode(', ', ini_get('disable_functions')))) &&
   strtolower(ini_get('safe_mode')) != 1
;


if($exec_enabled) { exec('blah'); }
3
Lance Cleveland

すべての可能性をチェックしない限り、exec関数を使用可能にするのは少し難しい

1 .function_exist('exec')

2. ini_get('disabled_functions)をスキャンする

3.チェックsafe_mode有効

function is_Shell_exec_available() {
    if (in_array(strtolower(ini_get('safe_mode')), array('on', '1'), true) || (!function_exists('exec'))) {
        return false;
    }
    $disabled_functions = explode(',', ini_get('disable_functions'));
    $exec_enabled = !in_array('exec', $disabled_functions);
    return ($exec_enabled) ? true : false;
}

この関数は、ini_get機能は無効ではありません。

3
Thamaraiselvam

例:

if(strpos(ini_get('disable_functions'),'ini_set')===false) 
    @ini_set('display_errors',0);
1
Stergios Zg.

Linuxサーバーでこれを実行していると仮定しています。

次のphpスクリプトを実行して、exec関数をテストできます。

exec("whoami", $ret);

echo $ret[0];

これは、コマンドwhoamiを返します。

エラーになる場合は、exec関数を実行できなかったことが原因です。

0
tungpksa

これは、機能が有効になっているかどうかを検出するために作成したsomeいコードです。

function is_enabled($f)
{
    if($f=='ini_get')return@ini_get('a')===false;
    return(($l=@ini_get('disable_functions'))===null||!is_callable($f)||!function_exists($f)||!in_array($f,array_map('trim',explode(',',$l)));
}

//Usage example:
print_r(is_enabled('str_split'));//true or null if ini_get() is disabled
0
Ismael Miguel