如何解决版本 7 和版本 8 之间的 php 脚本问题?
这是我的脚本,它在 php 8.0 上运行良好,但在 php 7.4 上出现故障。
$fileName = 'Usecase.csv';
$tempName = 'temp.csv';
$inFile = fopen($fileName,'r');
$outFile = fopen($tempName,'w');
while (($line = fgetcsv($inFile)) !== FALSE)
{
if(($line[0] == "$fin") )
{
$line = explode (",","$tempstr10");
$asd=$asd+1;
}
fputcsv($outFile,$line );
}
fclose($inFile);
fclose($outFile);
unlink($fileName);
rename($tempName,$fileName);
if( $asd==0 && filesize("Usecase.csv")>0)
{ file_put_contents("Usecase.csv","$tempstr10\r\n",FILE_APPEND | LOCK_EX); }
if( $asd==0 && filesize("Usecase.csv")==0)
{ file_put_contents("Usecase.csv",FILE_APPEND | LOCK_EX); }
我尝试打印错误(如果有),但没有打印任何内容。
1:那么跟踪此类问题的最佳做法是什么? 2:根据我有限的知识,这个脚本使用了 php7 和 php8 都支持的简单函数,为什么会出现这个问题?
谢谢
更新: 这部分代码读取一个 csv 文件,如果 csv 文件包含某个字符串,那么它将替换找到该字符串的整行。
$fileName = 'Usecase.csv';
$tempName = 'temp.csv';
$inFile = fopen($fileName,$fileName);
技术上 $line[0] == "$fin"
检查 $fin 的值是否与 $line[0] 匹配,如果是,则将整个 $line 替换为 $tempstr10
如果字符串匹配,那么它将增加 $asd 的值,并且不会执行下一部分代码
否则将根据 if 语句执行:
if( $asd==0 && filesize("Usecase.csv")>0)
{ file_put_contents("Usecase.csv",FILE_APPEND | LOCK_EX); }
问题:在 php8 中,当字符串已存在于 csv 文件中时,它将用新字符串替换整行(包含字符串的行) 但在 php7 中它不会替换它只是添加带有新值的新行
解决方法
不确定这是否是问题的根源,但应注意:在 php 版本 8 中,与字符串比较的数字规则不同。见https://www.php.net/releases/8.0/en.php#saner-string-to-number-comparisons。
考虑使用“严格”等式检查(=== 而不是 ==),以避免隐式类型转换,并在比较之前显式转换类型。
例如
if((string) $line[0] === (string) $fin)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。