サーバーでexec()
が有効または無効にされている場合、PHPスクリプトをチェックインする方法はありますか?
if(function_exists('exec')) {
echo "exec is enabled";
}
これにより、機能が実際に機能するかどうか(許可、権限など)が確認されます。
if(exec('echo EXEC') == 'EXEC'){
echo 'exec works';
}
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');
これにより、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'); }
すべての可能性をチェックしない限り、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
機能は無効ではありません。
例:
if(strpos(ini_get('disable_functions'),'ini_set')===false)
@ini_set('display_errors',0);
Linuxサーバーでこれを実行していると仮定しています。
次のphpスクリプトを実行して、exec関数をテストできます。
exec("whoami", $ret);
echo $ret[0];
これは、コマンドwhoamiを返します。
エラーになる場合は、exec関数を実行できなかったことが原因です。
これは、機能が有効になっているかどうかを検出するために作成した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