使用文件处理函数在PHP中创建文件时出错?

使用文件处理函数在PHP中创建文件时出错?,php,Php,有人能告诉我为什么这个代码不起作用吗?它不创建data.txt。并且该文件不保存任何内容 <?php $txt = "data.txt"; if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']

有人能告诉我为什么这个代码不起作用吗?它不创建data.txt。并且该文件不保存任何内容

<?php
        $txt = "data.txt";

        if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']) && isset($_POST['info6'])) {
            // check if both fields are set
            //open file in read mode to get number of lines
            $handle = fopen($txt, 'r');
            //check file opened

            if($handle) {
                //get number of lines
                $count = 1;
                while(fgets($handle) !== false) {
                    $count++;
                }

                fclose($handle);
                //open in append mode.
                $handle = fopen($txt, 'a');
                //prepare data to be writen
                $txt = $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n";
                //write data to file
                fwrite($handle,$txt);
                fclose($handle);
            }

        }

        ?>

fopen
功能
模式下
带有值的参数
r
不会创建文件。 见文件

问题还可能是运行该PHP脚本的用户的写入权限

这只是我的猜测。无论如何,您应该配置PHP(在开发环境中)以显示每个错误/警告,以便调试此类问题。您可以在
php.ini
文件中或直接在php文件中使用以下代码执行此操作:

error_reporting(E_ALL); 
ini_set('display_errors', 1);

您首先尝试以只读方式打开文件,如果成功,请关闭该文件并使用写访问权限再次打开

仅当文件已存在时,此操作才有效

如果文件不存在,您的文本将不会写入其中

如果($handle){在第二个
fopen
调用前面移动结束括号

        if($handle) {
            //get number of lines
            $count = 1;
            while(fgets($handle) !== false) {
                $count++;
            }

            fclose($handle);
        }
        //open in append mode.
        $handle = fopen($txt, 'a');
        //prepare data to be writen
        $txt = $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n";
        //write data to file
        fwrite($handle,$txt);
        fclose($handle);
顺便说一下,您可以将此代码减少为三行

$lines = file($txt);
$count = sizeof($lines);
file_put_contents($txt, $count . ' ' . $_POST['info1'].'/'.$_POST['info2'].'/'.$_POST['info3'].'/'.$_POST['info4'].'/'.$_POST['info5'].'/'.$_POST['info6']. "\r\n", FILE_APPEND);

要在
isset
中检查多个变量,请仅创建一个
isset
以检查所有变量

改变这个

 if(isset($_POST['info1']) && isset($_POST['info2']) && isset($_POST['info3']) && isset($_POST['info4']) && isset($_POST['info5']) && isset($_POST['info6']))


是否已打开错误报告并在开发过程中显示错误?如果无法打开文件句柄进行写入,例如由于目录或现有文件的权限不正确,您将看到错误。
error\u reporting(E\u ALL);ini\u set('display\u errors',1)
始终处于开发阶段。您似乎对堆栈溢出还比较陌生,所以首先欢迎您!其次,本网站主要是为了帮助您克服遇到困难而无法克服的编程问题。要获得高质量的答案,请务必发布您尝试过的内容、当前得到的结果以及没有得到的结果他想要的结果是。您还没有显示您尝试解决问题所采取的步骤。如果我不得不猜测,我会说您的
$\u POST
变量中有一个或多个未设置,或者存在权限问题。如果您进入If语句,请通过打印一些内容来检查您是否进入该语句,并检查以确保运行php的用户在给定目录中具有写入权限。
fopen
with
r
选项仅在文件不存在时发出警告,而
fopen
选项
a
将尝试创建文件(如果文件不存在),因此发布的代码应尝试使用第二个
fopen
 if(isset($_POST['info1'],$_POST['info2'],$_POST['info3'],$_POST['info4'],$_POST['info5'],$_POST['info6']))