0

我正在尝试设置一个允许对视频文件进行播放和转码的内部网站。我设置了一个文件来跟踪设置。我现在正在做的是设置一个带有编码器选项的下拉框。当用户单击我想更新设置文件时,它会更新为所选内容。理想情况下,我希望该过程不更改网页而只自动更新,这可能是使用 ajax。

我在网络编码方面的经验非常有限。我现在遇到的问题是我下面的代码可以正常工作,但 $EncoderType 变量除外。

当我在周围加上引号时,$_POST['encoder_Type']我得到了一个错误:

解析错误:语法错误,意外的 '' (T_ENCAPSED_AND_WHITESPACE),期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING) 位于 /var/www/index.php 的第 414 行

以下是我尝试过的引用版本。这也是给出错误的行:

echo $EncoderType = "$_POST['encoder_type']";

     echo "<form ";
        echo $EncoderType = $_POST['encoder_type'];         
        echo "action=";                     
        echo exec("sed -i '8 c\EncoderType:$EncoderType:(1-H264 2-WMV8 3-MPEG 4-MPG4v2)' /home/root/settings");
        echo "method='post'>";
        echo '<select name="encoder_type" onChange="this.form.submit()">';
        echo '<option value="1">H264</option>';
        echo '<option value="2">WMV8</option>';
        echo '<option value="3">MPEG2</option>';
        echo '<option value="4">MPG4v2</option>';
        echo '</select>';
     echo '</form>';

这是我当前的输出:

EncoderType::(1-H264 2-WMV8 3-MPEG 4-MPG4v2)

它应该是:

EncoderType:1:(1-H264 2-WMV8 3-MPEG 4-MPG4v2)
4

4 回答 4

1

您提供的代码非常有限。但试试这个:

echo "<form ";
    $EncoderType = (int)$_POST['encoder_type'];         
    echo "action=";                     
    echo exec("sed -i '8 c\EncoderType:".$EncoderType.":(1-H264 2-WMV8 3-MPEG 4-MPG4v2)' /home/root/settings");
    echo "method='post'>";
    echo '<select name="encoder_type" onChange="this.form.submit()">';
    echo '<option value="1">H264</option>';
    echo '<option value="2">WMV8</option>';
    echo '<option value="3">MPEG2</option>';
    echo '<option value="4">MPG4v2</option>';
    echo '</select>';
 echo '</form>';

回复您的编辑(echo $EncoderType = "$_POST['encoder_type']";):那行不通。

<?php $EncoderType = "{$_POST['encoder_type']}";

可以,但是由于您在似乎是 root 帐户的情况下使用 EXEC(请永远不要这样做),请确保 $_POST 中的变量正常或无害。所以我做了这样的:

<?php $EncoderType = (int)$_POST['encoder_type'];

那么你确定 $EncoderType 是一个整数,因此在这种情况下是无害的。并删除回声,我认为您不想在那个地方回显变量。

于 2012-08-15T23:24:59.013 回答
0

我不确定您要做什么,但是如果您想设置表单的 enctype,您应该这样做:

echo $EncoderType . "=" . $_POST['encoder_type'];

在这种情况下,您可能会错过以下行中的空格:

echo " action=";
于 2012-08-15T23:21:45.403 回答
0

如果我没看错,你描述的是两个错误。首先,当您尝试分配给 $EncoderType 时会出现错误,这是您抛出的 PHP 错误文本。

这可以通过将 echo 行更改为读取来解决:

$EncoderType = $_POST['encoder_type'];

其次,您的输出有错误(编辑 /home/root/settings),编码器类型不在实际输出中,这是有道理的,因为您的操作永远不会真正运行到我可以告诉 - 例如,我不认为你可以exec()作为一个动作,因为动作属性是发送数据的位置(即什么网页),而不是执行什么动作。

在您的情况下,我会编写一个简单的 php 页面,例如“process_action.php”,它看起来像:

<?php
  $encType = $_POST['encoder_type'];
  // You should probably rewrite the next line to use native PHP, rather than exec()!
  exec("sed -i '8 c\EncoderType:{$encType}:(1-H264 2-WMV8 3-MPEG 4-MPG4v2)' /home/root/settings"; 
?>

<html>
<head/>
<body>
  Changed encoder type to <?php echo $encType ?>
</body>
</html>

我还将您的提交表单更改为纯 HTML - 据我所知,那里不需要任何动态的东西,所以有些形式:

 <form action='process_action.php' method='post'>
      <select name="encoder_type" onChange="this.form.submit()">
        <option value="1">H264</option>
        <option value="2">WMV8</option>
        <option value="3">MPEG2</option>
        <option value="4">MPG4v2</option>
      </select>
 </form>
于 2012-08-15T23:41:49.580 回答
0

如果我没看错,我认为这就是您所需要的:

echo "EncoderType='" . $_POST['encoder_type']. "' ";
于 2012-08-15T23:30:43.740 回答