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

时间:2014-02-19 14:43:57

标签: php

有人可以告诉我为什么这段代码不起作用?它不会创建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);
            }

        }

        ?>

3 个答案:

答案 0 :(得分:1)

fopen函数mode中,值为r的参数不会创建文件。 请参阅fopen文档。

此问题也可能是运行该PHP脚本的用户的写权限。

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

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

答案 1 :(得分:1)

您首先尝试打开只读文件,如果成功,则关闭它并使用写访问权限再次打开它。

这仅在文件已存在时才有效。

如果该文件不存在,您的文本将不会被写入。

如果if ($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);

答案 2 :(得分:0)

检查isset中的多个变量,只创建一个isset来检查所有变量

更改此

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

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