PHP exec - 检查是否已启用或禁用
- 2024-11-07 08:55:00
- admin 原创
- 34
问题描述:
有没有办法检查 php 脚本exec()
在服务器上是否启用或禁用?
解决方案 1:
这将检查该功能是否真正起作用(权限、权利等):
if(@exec('echo EXEC') == 'EXEC'){
echo 'exec works';
}
解决方案 2:
if(function_exists('exec')) {
echo "exec is enabled";
}
解决方案 3:
ini_get('禁用功能')
您真正想要做的是使用它ini_get('disable_functions')
来查明它是否可用:
<?php
function exec_enabled() {
$disabled = explode(',', ini_get('disable_functions'));
return !in_array('exec', $disabled);
}
?>
在 stackoverflow 上回答:检查“exec”是否被禁用,这实际上似乎来自 PHP 手册页:http ://php.net/manual/en/function.exec.php#97187
小路
如果上述返回 true(您可以使用 exec()),但 PHP 仍然无法触发脚本,则很有可能是该脚本存在路径问题,请通过执行以下操作进行测试:
print exec('which bash');
然后尝试
print exec('which ogr2ogr');
解决方案 4:
这将在尝试运行 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'); }
解决方案 5:
找到可用的函数有点棘手exec
,除非检查所有可能性
1.function_exist('exec')
扫描
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
除非该功能未被禁用,否则该功能永远不会引发警告。
解决方案 6:
我假设您正在 Linux 服务器上运行它。
您可以通过运行以下 php 脚本来测试 exec 函数:
exec("whoami", $ret);
echo $ret[0];
这将返回命令 whoami。
如果出错,那是因为 exec 函数无法运行。
解决方案 7:
例子:
if(strpos(ini_get('disable_functions'),'ini_set')===false)
@ini_set('display_errors',0);
解决方案 8:
这是我编写的用于检测某个功能是否启用的一些丑陋的代码。
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
解决方案 9:
(基于其他回应)检查exec是否存在且服务是否正在运行:
function isRunning($serviceName)
{
return exec('pgrep '.$serviceName);
}
if (@exec('echo EXEC') == 'EXEC') {
$services = [
'mysql',
'nginx',
'redis',
'supervisord',
];
foreach ($services as $service) {
if (isRunning($service)) {
echo $service.' service is running.<br>';
} else {
echo $service.' service is down.<br>';
}
}
}
// mysql service is running.
// nginx service is running.
// redis service is running.
// supervisord service is down.
解决方案 10:
我会用这个:
if (in_array('exec', preg_split('/s*,s*/', ini_get('disable_functions')) {
echo "exec is disabled";
}
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD