PHP表单传值至shell_exec失败:YouTube下载页面问题排查
问题排查与修复方案
你遇到的核心问题其实很直观——表单提交方式和PHP获取参数的方式不匹配:
- 你的表单用的是
method="post",意味着表单数据会通过POST请求体传递; - 但PHP代码里却用
$_GET["addr"]来获取参数,这是在读取URL里的GET参数,自然拿不到POST过来的值,所以$link最终是空的,传给youtube-dl就会报ERROR: u'' is not a valid URL的错误。
修复步骤
把PHP里的$_GET["addr"]改成$_POST["addr"]即可,修复后的PHP代码如下:
<?php echo "<pre>"; // 从POST数组里获取addr参数,而非GET $link = escapeshellarg($_POST["addr"]); if(isset($_POST['youtubedl'])) { $output = shell_exec("/usr/local/bin/youtube-dl $link"); echo $link; echo $output; } ?>
额外安全提示
虽然你用了escapeshellarg()来规避命令注入风险,但还是建议在处理前先验证用户输入的URL有效性,比如用filter_var()做简单校验:
$addr = $_POST["addr"]; if (filter_var($addr, FILTER_VALIDATE_URL)) { $link = escapeshellarg($addr); // 执行youtube-dl逻辑 } else { echo "请输入有效的YouTube URL"; }
这样既能解决参数传递的问题,也能提升页面的安全性。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

