php执行系统命令的四个常用函数
php执行系统命令有四个常用函数:1.exec()执行命令并返回最后一行输出,可传数组获取全部结果;2.shell_exec()返回完整输出结果,适合一次性获取;3.system()直接输出命令结果,可接收状态码;4.权限控制需过滤输入,使用escapeshellarg()等函数防止注入,避免拼接用户输入,生产环境建议禁用这些函数,确保web服务器用户权限低。 PHP 要执行系统命令,有几个常用函数可以实现。这些函数在某些场景下非常有用,比如执行 shell 命令、调用脚本、处理文件等。但也要注意安全问题,不能随便开放给外部输入。 下面介绍几个常用的函数和使用建议。 exec() 函数 exec() 是最常用的执行系统命令的函数之一。它会执行一个外部命令,并返回最后一行输出内容。 立即学习“PHP免费学习笔记(深入)”; 基本用法:$output = exec(ls -l); echo $output;这个例子会列出当前目录下的文件,并输出最后一行结果。如果你需要获取完整输出,可以传入第二个参数:exec(ls -l, $outputArray); print_r($outputArray);这样就能拿到所有输出行,放在数组里。 注意:如果命令中包含用户输入,一定要做好过滤和验证,防止命令注入攻击。 shell_exec() 函数 shell_exec() 也是执行系统命令的函数,但它返回的是完整的输出结果(包括换行符),适合一次性获取全部输出。 用法示例:$output = shell_exec(whoami); echo 当前用户是:$output;相比 exec(),它更简洁一些,不需要处理数组。 不过同样要注意安全性,尤其是拼接字符串执行命令时,容易被恶意用户利用。 system() 函数 system() 和 exec() 类似,但它会直接输出命令的结果,而不是只返回最后一行。 示例:system(ls -la);这个函数适合需要实时看到命令输出的场景,比如调试或运行长时间任务。 还有一个可选参数可以接收状态码:system(ls -la, $status); echo 命令执行状态码: . $status;状态码为 0 通常表示成功,非零则可能出错。 安全建议与注意事项 避免直接拼接用户输入 比如不要写成这样:exec(ping . $_GEThost);这样很容易被注入其他命令,例如 127.0.0.1; rm -rf /。 正确做法是对输入做白名单过滤,或者使用安全函数如 escapeshellarg() 或 escapeshellcmd()。 尽量不启用这些函数 在生产环境中,如果不是必须的功能,建议禁用这些函数。可以在 php.ini 中设置:disable_functions = exec,shell_exec,system,passthru,... 权限控制要到位 PHP 执行系统命令时,是以 Web 服务器的运行用户身份进行的。确保这个用户的权限足够低,防止误操作或恶意行为造成严重后果。 基本上就这些。这几个函数各有特点,根据实际需求选择即可。用的时候多留心安全问题,别图省事。
另外我们在日常开发中通常会用到各种API接口,比如查询用户IP归属地,手机号归属地,天气预报,万年历等,ICP备案,表情包,壁纸等等,这时我们可以直接去接口盒子https://www.apihz.cn 查找需要的API即可。接口盒子有数百个免费API,而且采用集群化服务器部署,比一般的API服务商更加稳定。