#php #csv
Вопрос:
Приведенный ниже код прекрасно работает для копирования и переименования файла с переменной датой, но теперь мне нужно добавить порядковый номер в ??? в формате GRPROMO_0000_».$дата->(‘Ymd-Его’). «->???.ГОТОВЫ. Возможно ли это вообще, когда дата также меняется?
В конце файл должен выглядеть примерно так: GRPROMO_0000_20210910-155301-145.ГОТОВО
Заранее благодарю вас за помощь…
<?php
$date = new DateTime();
$file = '/var/www/html/stock/BRNCH0.csv';
$newfile = '/var/www/html/stock/csvs/BRNCH0.csv';
$file2 = '/var/www/html/stock/csvs/BRNCH0.csv';
if(!copy($file, $newfile)){
echo "failed to copy $file";
}
else{
echo "copied $file into $newfilen";
rename($file2 , "/var/www/html/stock/csvs/GRPROMO_0000_".$date->format('Ymd-His'). "-???.READY");
}
?>
Я обновил свой код. Он работает с файлом, в котором нет даты, или дата совпадает с GRPROMO_0000_20210913-094044-01.csv GRPROMO_0000_20210913-094044-02.csv.
Но с датой изменения мой код думает, что это новый файл, и неправильно увеличивает его GRPROMO_0000_20210913-100457-01.ГОТОВ GRPROMO_0000_20210913-100734-01.ГОТОВ GRPROMO_0000_20210913-101015-01.ГОТОВ. Пожалуйста, помогите.
Спасибо
<?php
$file = '/var/www/html/stock/BRNCH0.csv'; //orignal file
$newfile = '/var/www/html/stock/csvs/BRNCH0.csv'; //copy orignal file to this Dir
$date = new DateTime();
$dir1 = '/var/www/html/stock/csvs/'; // read folder name
$dir2 = '/var/www/html/stock/csc/'; // move to folder name
if(!copy($file, $newfile)){
echo "failed to copy $file";
}
else{
echo "copied $file into $newfilen";
}
$filearr = scandir ($dir1); // read folder
Unset ($filearr [0]); // remove redundant elements
unset($filearr[1]);
$filearr = array_values ($filearr); // start the array from 0 and increment it by 1
$filecount = count ($filearr); // number of files
$onenum = 1; // start number
$maxnum = $onenum $filecount; // max cycles
$title ="GRPROMO_0000_".$date->format('Ymd-His')."-"; // file title
$ext = '.READY'; // file suffix
for ($i = $onenum; $i <= $maxnum; $i ) {
for ($j=0; $j < $filecount ; $j ) {
if($i<10){
$i = '0'.$i;
}
rename($dir1.$filearr[$j],$dir2.$title.$i.$ext);
$i ;
}
}
?>
Комментарии:
1. используйте цикл, который увеличивает переменную счетчика, добавляет ее к имени файла и проверяет, существует ли файл. Когда вы найдете несуществующий номер, используйте это имя файла.
2. Есть еще какие-нибудь идеи?