如何通过PHP文件向bash脚本传递变量并执行对应逻辑
PHP向Bash脚本传参的具体实现方案
核心实现逻辑:通过Shell命令行位置参数传递变量,PHP调用脚本时将参数拼接在命令后,Bash脚本通过内置位置变量读取传入值做分支判断即可。
1. 修改PHP端代码
调整shell_exec()的调用命令,把需要传递的参数直接跟在脚本路径后面即可。如果传入的是动态可变参数,必须用escapeshellarg()做转义过滤,避免命令注入风险。
修改后的完整PHP代码:
function fcn1() { $old_path = getcwd(); chdir('/home/svradmin/scripts'); // 传入固定参数fcn1 $output = shell_exec('./testbash.sh fcn1'); chdir($old_path); // 如需获取脚本输出可直接return返回 return $output; } function fcn2() { $old_path = getcwd(); chdir('/home/svradmin/scripts'); // 传入固定参数fcn2 $output = shell_exec('./testbash.sh fcn2'); chdir($old_path); return $output; }
如果后续需要传递动态参数(比如用户提交的内容),参考安全写法:
$dynamic_param = "xxx"; // 动态获取的参数值 $safe_param = escapeshellarg($dynamic_param); // 转义特殊字符,阻断命令注入 $output = shell_exec("./testbash.sh $safe_param");
2. 修改testbash.sh脚本
Bash通过内置位置变量$1读取传入的第一个命令行参数,用case分支做匹配判断即可,可额外增加无参数/非法参数的兜底逻辑。
修改后的完整脚本内容:
#!/bin/bash # 读取第一个传入的位置参数 trigger_action="$1" case "$trigger_action" in "fcn1") echo "Hello World!! fcn1 has executed.." ;; "fcn2") echo "Hello World!! fcn2 has executed.." ;; *) # 可选:无匹配参数时的兜底输出 echo "Error: invalid parameter received" ;; esac
必要校验
- 确认
testbash.sh有可执行权限,若权限不足执行命令赋权:chmod +x /home/svradmin/scripts/testbash.sh - 确认运行PHP进程的用户(通常是www-data、nginx、apache用户)对脚本所在目录有读取、执行权限,否则会出现调用无输出的问题。
内容的提问来源于stack exchange,提问作者Codec737
相关产品推荐
相关产品推荐

