PHP提供exec、shell_exec、system、passthru和proc_open五种命令行函数:exec返回最后一行输出并支持状态码;shell_exec返回完整输出但无状态码;system直接输出结果并返回状态码;passthru传递原始二进制流;proc_open支持精细进程控制与双向通信。

如果您希望在PHP脚本中执行系统命令或与命令行环境交互,则需要使用PHP提供的命令行相关函数。以下是调用命令行函数的具体操作步骤:
一、使用exec()函数执行外部命令
exec()函数用于执行一个外部程序,并返回命令执行结果的最后一行输出,适用于只需获取最终输出的场景。
1、在PHP文件中定义要执行的命令字符串,例如ls -la或dir;
2、调用exec()函数,传入命令字符串和可选的输出数组参数,如exec("ls -la", $output, $return_code);
立即学习“PHP免费学习笔记(深入)”;
3、检查$return_code变量值,0表示命令成功执行,非0值表示执行失败;
4、遍历$output数组以获取完整输出内容。
二、使用shell_exec()函数获取完整命令输出
shell_exec()函数执行命令并返回完整的标准输出内容,适合需要全部输出文本的场景,且不提供返回状态码。
1、构造合法的命令字符串,确保不含未过滤的用户输入,避免命令注入风险;
2、将命令作为参数传递给shell_exec(),例如$result = shell_exec("whoami");;
3、检查返回值是否为NULL,NULL表示命令执行失败或被禁用;
4、对$result进行trim()处理以去除首尾空白字符。
三、使用system()函数直接输出并返回状态码
system()函数会立即输出命令执行结果到标准输出,并返回命令的终止状态码,适用于需实时查看执行过程的CLI脚本。
1、编写命令字符串,例如date或ping -c 1 google.com;
函数是一组语句一起执行任务。在MATLAB中,函数定义在单独的文件。文件函数的文件名应该是相同的。 函数操作在自己的工作空间,它也被称为本地工作区,独立的工作区,在 MATLAB 命令提示符访问,这就是所谓的基础工作区的变量。函数可以接受多个输入参数和可能返回多个输出参数 。 MATLAB是MathWorks公司开发的一种编程语言。它最初是一个矩阵的编程语言,使线性代数编程很简单。它可以运行在交互式会话和作为批处理作业。有需要的朋友可以下载看看
2、调用system()函数,如$status = system("date", $retval);;
3、注意第一个参数的输出会直接显示在终端,无法被变量捕获;
4、通过第二个参数$retval获取命令退出状态,该值需在调用后立即读取,否则可能被后续system()覆盖。
四、使用passthru()函数传递原始二进制数据
passthru()函数用于执行命令并将原始输出(包括二进制流)直接发送到输出缓冲区,常用于处理图像生成、PDF导出等需保持原始字节流的场景。
1、确认PHP运行环境允许执行外部命令,safe_mode已废弃但disable_functions仍可能禁用passthru;
2、设置适当的Content-Type响应头,例如header("Content-Type: image/png");;
3、调用passthru()并传入命令,如passthru("convert input.jpg output.png");;
4、禁止在Web环境下对用户可控输入直接调用passthru()。
五、使用proc_open()函数实现高级进程控制
proc_open()提供对子进程的精细控制能力,支持双向通信、资源限制、独立的stdin/stdout/stderr管道,适用于复杂命令行交互逻辑。
1、定义描述符数组,指定子进程的标准输入、输出、错误流重定向方式,例如array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "w"));
2、调用proc_open()启动进程,获取进程资源句柄和管道资源,失败时返回FALSE;
3、使用fwrite()向stdin管道写入数据,使用fgets()从stdout管道读取响应;
4、调用proc_close()释放资源并获取进程退出码,必须显式关闭否则导致资源泄漏。










