我正在创建一个代码以显示带有企业规则的服务器的名称,所以不要使用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
答案 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()
来缩短它。