PHP rename() 复制文件而不是使用新版本


PHP rename() duplicates file instead of using new version

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