PHP filesize if语句即使为false也仍然执行 var数组=[];
这段PHP代码位于head中我的脚本部分的顶部。seats.txt文件最初充满了零,表示航班上的空座位,通过其他功能,座位将填满(用1s表示)。我可以让1s写入文件,但一旦我重新加载页面,if语句似乎会执行,不管其条件是否为false,并将所有内容重置为零。原因在于此PHP filesize if语句即使为false也仍然执行 var数组=[];,php,file-writing,Php,File Writing,这段PHP代码位于head中我的脚本部分的顶部。seats.txt文件最初充满了零,表示航班上的空座位,通过其他功能,座位将填满(用1s表示)。我可以让1s写入文件,但一旦我重新加载页面,if语句似乎会执行,不管其条件是否为false,并将所有内容重置为零。原因在于此w模式 <?php $seatsArray = array(); $myFile = fopen("seats.txt", "w") or die("Unable to Open File!"); if(filesize("s
w模式
<?php
$seatsArray = array();
$myFile = fopen("seats.txt", "w") or die("Unable to Open File!");
if(filesize("seats.txt") == 0) {
for($x = 0; $x < 10; $x++) {
fwrite($myFile, "0\n");
}
}
$seatsArray = file("seats.txt", FILE_IGNORE_NEW_LINES);
fclose($myFile);
?>
var array = [<?php echo '"'.implode('","', $seatsArray ).'"' ?>];
所以每次你的文件
变为空白
如果您想
在文件的右侧追加,请使用a
或a+
,如果您想从右开始,请使用r+
,原因是此w模式
<?php
$seatsArray = array();
$myFile = fopen("seats.txt", "w") or die("Unable to Open File!");
if(filesize("seats.txt") == 0) {
for($x = 0; $x < 10; $x++) {
fwrite($myFile, "0\n");
}
}
$seatsArray = file("seats.txt", FILE_IGNORE_NEW_LINES);
fclose($myFile);
?>
var array = [<?php echo '"'.implode('","', $seatsArray ).'"' ?>];
所以每次你的文件
变为空白
如果您想在文件的右侧追加,请使用a
或a+
,如果您想从一开始就添加r+
,我不确定我是否正确理解您,但我想您只想在文件不存在的情况下编写文件:
w- (Write only. Opens and clears the contents of file; or creates a new file if it doesn't exist)
var数组=[];
此外,我建议将文件名设置为常量,这样可以减少键入错误的风险(因此,如果PHP在键入错误时遇到未定义的常量,PHP会抱怨)。我不确定是否正确理解您的意思,但我认为您只想在文件不存在时编写该文件:
w- (Write only. Opens and clears the contents of file; or creates a new file if it doesn't exist)
var数组=[];
此外,我建议将文件名设置为一个常量,这样可以减少输入错误的风险(因此,如果PHP在输入错误时遇到一个未定义的常量,它会抱怨)。否,filesize
,而您正在执行if(filesize(“seats.txt”)==0)
。您正在进行松散的比较,这将等同于true
,如false==0
,在本文中,这是true
。您需要使用==
进行严格的类型比较。如手册所述,如果$a等于$b,则$a===$b为相同的真值,并且它们的类型相同
此处的相同类型
部分非常重要。实际上,您提供的链接表明,它返回int
以字节为单位返回文件大小,或为FALSE(并生成E_警告级别的错误)但是我看不出检查刚刚打开进行写入的文件的文件大小有什么意义。打开进行写入将把文件截断为零长度。将fopen
移动到分支内部?是否需要将新值追加到文件中?否,filesize
,同时执行if(filesize(“seats.txt”)==0)
。您正在进行松散的比较,这将等同于true
,如false==0
,在本文中,这是true
。您需要使用==
进行严格的类型比较。如手册所述,如果$a等于$b,则$a===$b为相同的真值,并且它们的类型相同
此处的相同类型
部分非常重要。实际上,您提供的链接表明,它返回int
以字节为单位返回文件大小,或为FALSE(并生成E_警告级别的错误)但是我看不出检查刚刚打开进行写入的文件的文件大小有什么意义。打开进行写入将把文件截断为零长度。将fopen
移动到分支内部?是否需要将新值追加到文件中?将其替换为r+,现在它可以正常工作。谢谢。@Guy Fieri如果它有效,我欢迎你,然后标记你的答案:)用r+替换它,现在它可以正常工作了。谢谢你。@Guy Fierre,如果它有效,我欢迎你,然后标记你的答案:)