从表单中检索值并写入文件

时间:2014-04-23 06:47:26

标签: html forms perl

我有一个名为

的表格
  

的index.cgi

和名为

的配置文件
  

video.start

用户从下拉菜单中选择并按提交后,将读取该值并将其写入配置文件。这是我表单中的一个片段:

<tr><td>
<form method="POST" action="index.cgi">
<table>
<tr><th colspan="2">Video</th></tr>
<tr><td align="right"><b>Video Source :</b></td><td align="left">
<select name="channel1" size="1">
<option value="/dev/video0">/dev/video0</option>
<option value="/dev/video1">/dev/video1</option>
<option value="/dev/video2">/dev/video2</option>
<option value="/dev/video3">/dev/video3</option>
</select>
</td></tr>
</table>
</td></tr>
<tr>
<td colspan="2">
<div id="button">
<input type="submit" value="Submit"><input type="reset" value="Clear">
</div>
</form>
</td>
</tr>

以下是index.cgi的代码:

my $file = "video.start";

open (my $in, "+<", $file);
open (my $out, "+<", $file);

my $a = CGI->new();
$video = $a->param('channel1');

while(<$in>)
{
    print $out $_;
    last if $.==3;
}

while(my $data = <$in>)   
{
    #logic

    print $out $data;
    last if $.==5;
}

最后,这是我的配置文件:

#Only change at [udp://#] segment 
#This config file is for video

ffmpeg -f video4linux2 -i /dev/video0 -vcodec libx264 -preset ultrafast -tune zerolatency -s qvga -r 30 -qscale 5 -an -flags low_delay -bsf:v h264_mp4toannexb -maxrate 750k -bufsize 3000k -rtbufsize 300k -f h264 udp://# 

如果您可以从配置表单中看到,在用户提交值后, / dev / video0 将根据用户提交的值在配置文件中更改。但是我怎样才能在逻辑上实现这一目标呢?

1 个答案:

答案 0 :(得分:0)

这方面最大的诀窍是你需要flock你的文件才能编辑它们,这样就没有竞争条件了。

use strict;
use warnings;
use autodie;

use Fcntl qw(:flock);

open my $fh, '<+', 'foobar.txt';
flock($fh, LOCK_EX) or die "Cannot lock mailbox - $!\n";

之后,请阅读How do I change, delete, or insert a line in a file, or append to the beginning of a file?。我个人会选择Tie::File因为我认为这可能是在这种情况下编辑文件的最简单方法。