将$ _POST信息保存到random_name.txt

时间:2016-03-16 11:37:08

标签: php file

我想将表单($_POST)中的信息保存为动态生成的文件作为备份。所以我必须为每个提交表单的用户生成一个文件(10个提交的表单= 10个不同的文件)。 我试图创建一个函数来生成随机文件名并在该文件中写入$_POST数组

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v \n";
    }
    return file_put_contents($file, $toFile);
}

并使用此功能:

save_post($_POST);

问题是没有生成文件。

3 个答案:

答案 0 :(得分:2)

就像@Saty在评论中所说的那样。您遇到的问题是由于您的代码中包含return $randomString;而引起的。

PHP Docs描述从函数返回值,如下所示:

  

可以返回任何类型,包括数组和对象。这会导致函数立即结束执行并将控制权传递回调用它的行。

一旦调用return,就不会执行该函数返回下面的代码。代码应如下所示:

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }

    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v \n";
    }
    return file_put_contents($file, $toFile);
}

值得注意的是,就目前而言,您当前的文件只包含循环中的最后一个键值对。如果我的帖子数组看起来像这样:

array("greeting" => "hello world", "farewell" => "goodbye world")

我运行脚本会输出这样的文件(file:dump / rHsmM.txt):

Key: farewell; Value: goodbye world

如果这不是您要找的内容,则需要使用concatenation来添加多个值。每次循环时都不要覆盖$toFile的值,而只是添加到它的末尾。为此,请将$toFile = "Key: $k; Value: $v \n";行更改为:

$toFile .= "Key: $k; Value: $v \n";

如果你使用相同的数组重新运行脚本,最终会得到这个(dump / PFOzo.txt):

Key: greeting; Value: hello world
Key: farewell; Value: goodbye world

更新:正如评论中所指出的那样,在我们尝试连接之前,您会收到关于$toFile不存在的通知。要解决这个问题,我们可以确保在foreach循环之前声明它,如下所示:

$toFile = "";
foreach ($data as $k => $v){
...

现在,当我们连接时,我们已经有一个串联的字符串(尽管是空白的)。

答案 1 :(得分:1)

  1. 删除或评论

    //return $randomString;
    //var_dump($randomString);
    
  2. concatinate $toFile

    function save_post($data){
        $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
        $randomString = '';
        for ($i = 0; $i < 5; $i++) {
            $randomString .= $characters[rand(0, $charactersLength - 1)];
        }
        //return $randomString;
        //var_dump($randomString);
        $file = "dump/".$randomString.".txt";
        $toFile = "";
        foreach ($data as $k => $v){
            $toFile .= "Key: $k; Value: $v \n";
        }
        return file_put_contents($file, $toFile);
    }
    

答案 2 :(得分:0)

使用如下:

function save_post($data){
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }

    var_dump($randomString);
    $file = "dump/".$randomString.".txt";
    foreach ($data as $k => $v){
        $toFile = "Key: $k; Value: $v \n";
    }
    return file_put_contents($file, $toFile);
}

注意:函数在执行操作之前返回值,因此清除了return语句。