PHP重命名()重复文件而不是使用新版本

时间:2016-02-08 16:02:36

标签: php csv fgetcsv

我们的网站每天都会发送一个.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;
}

1 个答案:

答案 0 :(得分:0)

在执行fopen()之前,在文件上记录stat()的结果。还可以尝试添加clearstatcache()。

如果你正在做一个include(),我会看看任何字节码编译器的缓存设置,但你不是。因此,我将开始质疑托管环境和fs层。

http://php.net/stat

http://php.net/manual/en/function.clearstatcache.php