PHP filesize if语句即使为false也仍然执行 var数组=[];

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

这段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("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,如果它有效,我欢迎你,然后标记你的答案:)