我们的网站每天都会发送一个.csv文件,我们用户从不同的系统导入数据。导入有时工作正常,但我遇到了脚本导入重复数据而不是使用新文件的问题。
系统将继续导入旧文件,直到我通过SFTP登录查看文件,然后它将抓取新文件。似乎脚本正在将旧文件加载到内存中,然后不清除它。
例如:
- 文件于 1 月 1 日上传
- 该文件已正确导入。
- 1 月 2 日,再次导入相同的文件。
- 1 月 3 日,再次导入相同的文件。
- 1月4日,我通过SFTP查看文件。
- 1 月 4 日,将导入新文件。
系统将继续导入旧版本的文件,直到我通过SFTP登录。
我的导入代码如下。这里有什么可以解释可能发生的事情吗?
function energyuportal_cron () {
if (($handle = fopen($CFG->dirroot.'/'."report.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
if (energyuportal_check_data($data[1], $data[4])) {
// This imports the data
energyuportal_manage_completions($data[1], $data[4], $data[5], $data[7]);
}
}
fclose($handle);
rename($CFG->dirroot.'/'.$CFG->energyuportal_filelocation.'/'."report.csv",
$CFG->dirroot.'/'.'/old/'."report".date("Y-m-d-H-ia").".csv");
} else {
// Error
}
return true;
}
在执行 fopen(( 之前将 stat(( 的结果记录在文件上。 同时尝试添加 clearstatcache((。
如果你正在做一个include((,我会查看任何字节码编译器的缓存设置,但你不是。 因此,我会开始质疑托管环境和 fs 层。
http://php.net/stat
http://php.net/manual/en/function.clearstatcache.php