我想将表单($_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);
问题是没有生成文件。
答案 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)
删除或评论
//return $randomString;
//var_dump($randomString);
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语句。