Bash cgi上传文件

时间:2014-09-08 08:35:21

标签: bash cgi

您好我有这样的问题。我有HTML

<form action="/cgi-bin/echo.cgi" method="post" enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="Submit">
</form>

我需要使用bash cgi(不是perl)将此文件从表单写入服务器。我尝试这样的事情

POST=$(</dev/stdin)
echo "$POST">"/tmp/a"

但它不起作用

P.S。我在apache log /var/www/cgi-bin/echo.cgi: line 6: /dev/stdin: No such device or address

中看到了这一点

P.S.2 它对我有用

if [ $REQUEST_METHOD == 'POST' ]; then
    if [ "$CONTENT_LENGTH" -gt 0 ]; then
        while read i; 
            do echo "$i";
        done
    fi
fi

但我有这样的输出

------WebKitFormBoundary8WbSWxBe8rIaCMLG
Content-Disposition: form-data; name="file"; filename="ca.cpp"
Content-Type: text/x-c++src

#include <iostream>
int main(){
for(int x = 0; x <= 5; ++x)
for(int y = 0; y <=5; ++y)
std::cout << "x= " << x << " y= " << y << " f1= " << (x-2)*(x-2) + (y-1)*(y-1) << " f2= " << (x-2)*(x-2) + (y-5)*(y-5)<<std::endl;

}

------WebKitFormBoundary8WbSWxBe8rIaCMLG
Content-Disposition: form-data; name="submit"

Submit
------WebKitFormBoundary8WbSWxBe8rIaCMLG--

我如何解析文件内容?

1 个答案:

答案 0 :(得分:1)

你应引用变量:

echo "$POST" > /tmp/a

否则,会发生单词拆分和通配符扩展,这将导致空白被合并,一切都将在一行上。

一般情况下,除非有充分的理由,否则应始终引用变量。有一些不需要它的情况,但除非你真的需要分词,否则它永远不会受到伤害。