PHP中出现错误fclose()和foreach()


Error fclose() and foreach() in PHP

我有一堆字段,我希望检索每个字段的内容并将其发布到文本文件中,但每个字段的数据都存储在新行中。所以我调整了我发现的一个片段,它非常有效,做了我想要的。我检查了控制台,它出现了一个错误。我真的是PHP的新手,我希望有人能帮我。

错误:

    Warning: Invalid argument supplied for foreach().
    Warning: fclose() expects parameter 1 to be resource, null given.

PHP:

    <?php
    if (isset($_POST)){
        foreach($_POST["textdata"] as $text){
            if(!file_exists($_POST['filename'] . ".txt")){
                $file = tmpfile();
            }
            $file = fopen($_POST['filename'] . ".txt","a+");
            while(!feof($file)){
                $old = $old . fgets($file);
            }
            file_put_contents($_POST['filename'] . ".txt", trim($text).PHP_EOL, FILE_APPEND);
        }
        fclose($file);
    }
    ?>

提前感谢!

您的$_POST['textdata']不是数组,因此foreach循环永远不会执行。它直接跳转到fclose()调用。由于您从未执行过循环,因此从未定义过$file,因此您正在关闭一个空文件句柄。

如果您希望textdata是一个数组,那么它必须在html:的字段名称中使用[]来定义

<input type="text" name="textdata[]" />
                                 ^^---necessary.

在更大的方案中,你应该把fclose放在循环中:

foreach(...) {
   $file = tmpfile();
   blah blah blah
   fclose($file);
}

这样,只有当$file在一开始就被打开时,才能关闭它。