Наш сайт имеет CSV-файл, отправленный каждый день, который мы импортируем из другой системы. Иногда импорт работает правильно, но я столкнулся с проблемой, когда скрипт импортирует повторяющиеся данные вместо использования нового файла.PHP rename() дублирует файл вместо новой версии
Система будет продолжать импортировать старый файл до тех пор, пока я не заберусь через SFTP, чтобы просмотреть файл, а затем он захватит новый файл. Кажется, скрипт загружает старый файл в память, а затем не очищает его.
, например:
- Файл загружен на 1 января
- Этот файл правильно импортируется.
- 2 января тот же файл снова импортируется.
- 3 января тот же файл снова импортируется.
- 4 января я просматриваю файл через SFTP.
- 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;
}
проверка статуса завершения работы переименовывать! карп, если не удалось. Вы можете попробовать «переименовать» в исходную папку, а затем скопировать в dest и отсоединить исходный код после завершения копирования. – YvesLeBorg
- это правильно? вы открываете '$ CFG-> dirroot. '/'." report.csv "', но вам нужно переименовать '$ CFG-> dirroot. '/'. $ CFG-> energyuportal_filelocation. '/'." report.csv "' и здесь '$ CFG-> dirroot. '/'. '/ old /'." report ".date (" YmdH-ia ").". csv "' у вас есть двойные слэбы, например '// old/report .csv'. –
Wizard
И я хотел бы рекомендовать использовать одинарные кавычки вместо двойных, потому что двойные кавычки заставляют php-интерпретатор оценивать контент, даже если строка не удовлетворяет анализируемым выражениям. – Wizard