У меня есть скрипт, который при запуске создает новый файл в каком-то каталоге. При создании нового файла он проверяет, существует ли файл:
1
к имени файла2
,$filecount = 0;
if (! file_exists ( SOME_DIR . $fileName )) {
echo "not there";
//so save normally
} else {
echo "there";
$fileName = $fileName."_" .$file_count++.".txt";
// save with number at the end
}
В настоящее время, когда файл запускается несколько раз, он сохраняется только с номером в первый раз, как переменная $filecount
снова установлен в 0
,
Есть ли работа, чтобы увеличить filename
когда его имя повторяется?
Вы можете сделать это
<?php
define('SOME_DIR', '');
$fileName = 'file';
if (! file_exists ( SOME_DIR . $fileName.'.txt' )) {
echo "not there";
//so save normally
}
else{
$files = glob(SOME_DIR.$fileName.'_*.txt');
$counter = count($files)+1;
echo "there";
$fileName = $fileName."_" .$counter.".txt";
echo $fileName;
// save with number at the end
}
Проверено, работает хорошо для меня
Вам нужно где-то хранить количество запусков вашего скрипта. Если вы уже пишете файлы, я бы использовал обычный текстовый файл для хранения количества прогонов.
Другие варианты — использовать метку времени в качестве дедупликатора имени файла.
define('SOME_DIR', __DIR__ . '/');
$basename = 'test.txt';
$path = SOME_DIR . $basename;
// Consider clearing stat cache before using `file_exists` and similar
// functions that run `stat`, or `lstat` system calls under the hood.
clearstatcache(true, $path);
if (file_exists($path)) {
$filename = pathinfo($basename, PATHINFO_FILENAME);
$ext = pathinfo($basename, PATHINFO_EXTENSION);
$files = glob(SOME_DIR . "${filename}_[0-9]*.${ext}", GLOB_BRACE);
$basename = sprintf(
'%s_%d.%s',
$filename,
(count($files) + 1),
$ext
);
$path = SOME_DIR . $basename;
}
// Replace with your logic
touch($path);