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