我想将表单($_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);
问题是没有生成任何文件。
就像
@Saty评论中所说的那样。您遇到的问题是由于代码中的return $randomString;
引起的。
PHP 文档描述从函数返回值,如下所示:
可以返回任何类型,包括数组和对象。这会导致函数立即结束其执行,并将控制权传递回调用它的行。
调用 return 后,将不会执行该函数中 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")
我运行了脚本,它会输出这样的文件(文件:dump/rHsmM.txt):
Key: farewell; Value: goodbye world
如果这不是您要查找的内容,则需要改用串联,这将允许您添加多个值。与其在每次循环时覆盖$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){
...
现在,当我们开始连接时,我们已经有一个字符串可以连接(尽管是空白的)。
-
移除或评论
//return $randomString; //var_dump($randomString);
-
连接
$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); }
按如下方式使用:
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);
}
注意:函数在执行操作之前返回值,因此清除了返回语句。