我正在尝试从文件中读取和写入文件! 该文件将始终以6行开头。 默认设置文件如下所示:
10
50
255 255 255
0 255 0
0 255 0
0 255 0
我有一个默认设置文件和另一个当前的设置文件,可以在其中进行读写。
$arrayInputs = array();
$arrayDefaults = array();
$arrayColorsHEX = array();
if(filesize($inputsFilePath)<=0) {
if ($defaultSettingsFile) {
// echo "<br>Reading from $defaultFilePath<br>";
// Fill $arrayDefaults
$arrayDefaults = explode(PHP_EOL, fread($defaultSettingsFile, filesize($defaultFilePath)));
fclose($defaultSettingsFile);
// Output $arrayDefaults
var_dump($arrayDefaults);
foreach ($arrayDefaults as $keyD => $valueD) {
$arrayInputs[$keyD] = $arrayDefaults[$keyD];
}
var_dump($arrayInputs);
$Timer = $arrayDefaults[0];
$Brightness = $arrayDefaults[1];
$arrayColorsHEX[0] = RGBtoHexadecimal($arrayDefaults[2]);
$arrayColorsHEX[1] = RGBtoHexadecimal($arrayDefaults[3]);
$arrayColorsHEX[2] = RGBtoHexadecimal($arrayDefaults[4]);
$arrayColorsHEX[3] = RGBtoHexadecimal($arrayDefaults[5]);
}
}
我填写$arrayDefaults
和$arrayInputs
。
因此,两个数组上的var_dump都将如下所示:
/var/www/mysite/inputs.php:53:
array (size=7)
0 => string '10' (length=2)
1 => string '50' (length=2)
2 => string '255 255 255' (length=11)
3 => string '0 255 0' (length=7)
4 => string '0 255 0' (length=7)
5 => string '0 255 0' (length=7)
6 => string '' (length=0)
/var/www/mysite/inputs.php:57:
array (size=7)
0 => string '10' (length=2)
1 => string '50' (length=2)
2 => string '255 255 255' (length=11)
3 => string '0 255 0' (length=7)
4 => string '0 255 0' (length=7)
5 => string '0 255 0' (length=7)
6 => string '' (length=0)
我不喜欢这样的事实,即它在数组中添加了另一个空元素,但我想不出一种解决方法。
else {
if($currentSettingsFile) {
// echo "<br>Reading from $inputsFilePath<br>";
// Fill $arrayInputs
$arrayInputs = explode(PHP_EOL, fread($currentSettingsFile, filesize($inputsFilePath)));
$closeFlag = fclose($currentSettingsFile);
// Output/echo $arrayInputs
// var_dump($arrayInputs);
// $arrayLength = strlen($arrayInputs);
$Timer = $arrayInputs[0];
$Brightness = $arrayInputs[1];
$n_1 = 0;
foreach ($arrayInputs as $key1 => $value1) {
$n_1 = $key1;
}
echo "<br>key1 = $n_1";
if($n_1>1) {
$i = 2;
while(isset($arrayInputs[$i]) && $i<$n_1-1) {
// echo "<br>arrayInputs[$i]= ".$arrayInputs[$i];
$arrayColorsHEX[$i-2] = RGBtoHexadecimal($arrayInputs[$i]);
// echo "<br>arrayColorsHEX[$i-2]".$arrayColorsHEX[$i-2];
// echo "<br>i = $i";
$i++;
// echo "<br>END OF WHILE<br/>";
}
}
} //if($currentSettingsFile)
}
if(isset( $_POST['save_values'])) {
if(!empty($_POST['getTimer'])) {
$Timer = $_POST['getTimer'];
$arrayInputs[0] = $Timer;
}
if(!empty($_POST['getBrightness'])) {
$Brightness = $_POST['getBrightness'];
$arrayInputs[1] = $Brightness;
}
}
if(isset( $_POST['save_color1'])) {
if(!empty($_POST['getColors1'])) {
$arrayColorsHEX[0] = $_POST['getColors1'];
// echo "<br>POSTarrayColorsHEX[0]= ".$arrayColorsHEX[0];
$arrayInputs[2] = HexadecimalToRGB($arrayColorsHEX[0]);
// echo "<br>arrayInputs[2]= ".$arrayInputs[2];
}
}
if(isset( $_POST['save_color2'])) {
if(!empty($_POST['getColors2'])) {
$arrayColorsHEX[1] = $_POST['getColors2'];
// echo "<br>arrayColorsHEX[1]= ".$arrayColorsHEX[1];
$arrayInputs[3] = HexadecimalToRGB($arrayColorsHEX[1]);
// echo "<br>arrayInputs[3]= ".$arrayInputs[3];
}
}
if(isset( $_POST['save_color3'])) {
if(!empty($_POST['getColors3'])) {
$arrayColorsHEX[2] = $_POST['getColors3'];
// echo "<br>arrayColorsHEX[2]= ".$arrayColorsHEX[2];
$arrayInputs[4] = HexadecimalToRGB($arrayColorsHEX[2]);
// echo "<br>arrayInputs[4]= ".$arrayInputs[4];
}
}
if(isset( $_POST['save_color4'])) {
if(!empty($_POST['getColors4'])) {
$arrayColorsHEX[3] = $_POST['getColors4'];
// echo "<br>arrayColorsHEX[3]= ".$arrayColorsHEX[3];
$arrayInputs[5] = HexadecimalToRGB($arrayColorsHEX[3]);
// echo "<br>arrayInputs[5]= ".$arrayInputs[5];
}
}
if(!$closeFlag) fclose($currentSettingsFile);
$currentSettingsFile = fopen($inputsFilePath, "w");
if($currentSettingsFile) {
// echo "<br>Writing in $inputsFilePath<br>";
// var_dump($arrayInputs);
foreach ($arrayInputs as $key2 => $value2) {
fwrite($currentSettingsFile,$value2.PHP_EOL);
}
// for($k = 0; $k < $n_2; $k++) {
// fwrite($currentSettingsFile,$arrayInputs[$k].PHP_EOL);
// // echo "<br>arrayInputs[$k]= $arrayInputs[$k]";
// }
fclose($currentSettingsFile);
}
请注意,我尝试了两种写入文件的方法。
现在,问题在于,每次刷新页面时,代码都会在文件中添加空行,并在$arrayInputs
中添加空元素。
每个POST
也会进行页面刷新。
我该如何解决?
答案 0 :(得分:1)
您要在最后一行之后添加EOL。这就是explode
返回6条记录的原因。
关闭文件后,内容看起来像这样(注意最后的EOL)
line1 EOL line2 EOL line3 EOL line4 EOL line5 EOL line 6 EOL
您希望文件看起来像这样(末尾没有任何EOL):
line1 EOL line2 EOL line3 EOL line4 EOL line5 EOL line 6
要解决此问题,您可以尝试以下操作之一:
建议1:爆炸前修剪文件内容:
更改行
explode(PHP_EOL, fread($currentSettingsFile, filesize($inputsFilePath)));
到
explode(PHP_EOL, trim(fread($currentSettingsFile), filesize($inputsFilePath)));
建议2:修改文字,如下所示
foreach ($arrayInputs as $key2 => $value2) {
if ($key2 != 0) {
fwrite($currentSettingsFile,PHP_EOL);
}
fwrite($currentSettingsFile,$value2);
}
建议3:使用implode写入文件,而无需任何for
fwrite($currentSettingsFile, implode(PHP_EOL, $arrayInputs));
我个人将选择第三个建议。