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

时间:2019-03-11 22:25:54

标签: php

我对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);
    }

3 个答案:

答案 0 :(得分:1)

您的代码中有两个误解:

  1. 对于$key=>$var中的每个$postback_data,您正在打开一个文件,对其进行写入并关闭,这是非常无效的。您应该在循环之前将其打开一次,并在循环完成后将其关闭。
  2. 您正在写入文件,而不是 append 。检查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);

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

当心:$_REQUEST$_COOKIE$_POST之外还包含$_GET数据。

  

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和文件内容都将为空,因为没有内容可显示

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