php 将值传递给 php shell_exec

php form passing value into php shell_exec

我正在尝试创建一个简单的页面,在 youtube-dl 应用程序的帮助下下载 youtube 视频。

<form action="" method="post">
<input type="submit" name="youtubedl" value="dload YouTube">
<input type="text" name="addr" value="">
</form>

PHP 部分如下所示:

<?php
echo "<pre>";
$link = escapeshellarg($_GET["addr"]);
if(isset($_POST['youtubedl']))
 {
   $output=shell_exec("/usr/local/bin/youtube-dl $link");
   echo $link;
   echo $output;
 }
?>

我认为我的变量没有传递到 PHP,因为 echo $link 没有产生任何输出。

error.log returns ERROR: u'' is not a valid URL

您正在 $_GET 中寻找 addr,而它会在 $_POST 中,因为您使用 method="post".

@Jonas Äppelgran 说的,我要补充一点,

我会更好地检查 link,所以不要这样测试它:

$link = escapeshellarg($_GET["addr"]);
if(isset($_POST['youtubedl']))
{
 ...

我会这样检查:

if(isset($_POST['youtubedl']) && !empty($_POST['addr'])){
     $link = escapeshellarg($_POST["addr"]);
     ...

按照您目前的方式,当页面在发布表单之外加载时,您可能会得到一个未定义的索引 addr。因为,你在条件之前评估它。即使您只是将它移到 if 内部,如何阻止表单提交空地址。