如何成功地将 foreach $key=>$var 写入文本文件



我是PHP新手,也了解GET/POST。我正在使用这个phpfile的postbackurl,并试图将GET/POST信息写入文本文件。它不起作用,我希望有人能向我指出我可能明显的错误。下面是代码。

$postback_data = $_REQUEST;
foreach($postback_data as $key=>$var)
{
$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$output = $key . ' : ' . $val ."n";
fwrite($myfile, $output);
fclose($myfile);
}

代码中有两个误解:

  1. 您正在打开一个文件,写入该文件并针对$postback_data中的每个$key=>$var关闭它,这是非常低效的。您应该在循环之前打开它一次,并在循环完成后关闭它。
  2. 您正在写入文件而不是追加。检查 fopen() 的模式。

以下是可能执行所需操作的代码:

$postback_data = $_REQUEST;
$myfile = fopen("newfile.txt", "a") or die("Unable to open file!");
foreach($postback_data as $key=>$var) {
$output = $key . ' : ' . $val ."n";
fwrite($myfile, $output);
}
fclose($myfile);

如果要为每个请求创建一个新文件,请使用fopen()上的"w"模式。如果要将每个新请求的 POST 数据附加到同一文件,请使用"a"

将 fopen 和 fclose 放在循环之外,或者改用 fopen('file.txt', a)。 fopen('file.txt', w) 重置文件并覆盖所有内容。

如果您的目标只是将该信息保存到文件中以查看它并且格式并不那么重要,则可以通过使用一些内置函数来实现这一点。您不需要使用以下foreach遍历整个列表:

$post = var_export($_REQUEST, true);
file_put_contents('newfile.txt', $post);

注意:除了$_POST$_GET之外,$_REQUEST还包含$_COOKIE数据。

var_export这里返回给定变量的字符串表示形式。如果省略第二个参数true,则直接打印它。

如果您的目标是提高技能,以下是代码的正确版本,并附有一些注释:

// prefer camelCase for variable names rather than under_scores
$postbackData = $_REQUEST;
// Open the resource before (outside) the loop
$handle = fopen('newfile.txt', 'w');
if($handle === false) {
// Avoid inline die/exit usage, prefer exceptions and single quotes
throw new RuntimeException('File could not open for writing!');
}
// Stick with PSR-2 or other well-known standard when writing code
foreach($postbackData as $key => $value) {
// The PHP_EOL constant is always better than escaped new line characters
$output = $key . ' : ' . $value . PHP_EOL;
fwrite($handle, $output);
}
// Close the resource after the loop
fclose($handle);

并且不要忘记使用查询字符串中的一些测试数据调用文件,例如: http://localhost/postback.php?bar=baz 否则,$_RQUEST和文件内容都将为空,因为没有要显示的内容。

祝你好运,欢迎堆栈溢出!

最新更新