错误在txt文件中读取,只能读取一次

时间:2019-07-08 09:49:27

标签: php

我正在创建一个代码以显示带有企业规则的服务器的名称,所以不要使用Mysql(对我来说),尝试使用php读取和重写文件的新方法,这样可以正常工作完全适合我的代码的一部分,并且可以完美地工作,但是第二次他只读了一次,而当我执行f5时,代码不会递增。 他正确地重写了,因为我的文件在000上并变为001

我尝试使用file(),但是自7.0起,他被禁用,尝试使用SplFileObject,但它不希望显示任何内容,我也不喜欢它,因为使用时我一无所知所以我回到了fopen()fread()fwrite()上,它们不起作用。我在PHP 7.3.1

有效的代码:

<?php 
if ( isset($_POST) AND !empty($_POST) ) {
$nom = "./config.txt";
$filez = fopen($nom, "r") or die("Unable to open file!");
$i = fread($filez,filesize($nom));
$year = getdate();
$idy = substr($year[year], 2);
$fichier = fopen("./resultsrv.txt", "w") or die("Unable to write file!");
    for ($z; $z<$_POST['nbr']+1 ; $z++) {
        $id =  sprintf("%04d", $i+$z); 
        $nome = $_POST['type'].$_POST['OS'].$idy.$id."<br>" ;
        echo $nome;
        $nomewout = str_replace("<br>", ";", $nome);
        fwrite($fichier,$nomewout);
    }
    $handle = fopen("./config.txt", "w") or die("Unable to write file!");
    fwrite($handle,$id);
    fclose($fichier);
    fclose($handle);
}
?>

还有一个因为他没有增加而无效:

<?php 

if ( isset($_POST) AND !empty($_POST) ) {

    $fileName = 'confchass.txt';
    $read = fopen($fileName,"r");
    $fn = fopen($fileName,"w+");
    $i = fread($read,filesize($fileName));
    $id =  sprintf("%03d", $i+1);

    echo "<div align='center'><h1>Le Chassis</h1>";
    echo $_POST['Marque'].$_POST['DC'].$id;
    echo "</div>";
    fwrite($fn,$id);

    fclose($read);
    fclose($fn);

}
?>

我希望他输出类似XXXXXX001的信息,并且当我刷新表单或从表单中执行新的POST时,他输出XXXXXX002和XXXXXX003...。但是他实际上仅输出XXXXXX001

1 个答案:

答案 0 :(得分:0)

问题是您打开文件进行读取然后进行写入。但是从manual ...

  

'w +'开放供阅读和写作;将文件指针放在   文件开头,并将文件截断为零长度。如果   文件不存在,请尝试创建它。

因此,这将在您从文件中读取值之前将其清空。

要解决此问题(使用当前方法,应先读取该值,然后将其打开以进行写入并写入新值...

$read = fopen($fileName,"r");
$i = fread($read,filesize($fileName));
fclose($read);
$id =  sprintf("%03d", $i+1);

echo "<div align='center'><h1>Le Chassis</h1>";
echo $id;
echo "</div>";
$fn = fopen($fileName,"w+");
fwrite($fn,$id);
fclose($fn);

您可以使用file_get_contents()file_put_contents()来缩短它。