Reputation: 85
I am trying to handle duplicate filenames. if a user uploads a file name called "file" then another user uploads a file called "file" I want to be able to add a 1 to the new file so it would be now called "1file". I am able to do this but my issue is when someone uploades "file" for a third time it overrides "1file" I need the 1 to increase. I am using The yii framework
Here is my function in my controller:
function actionIndex(){
//$dir = Yii::getPathOfAlias('application.images');
//$dir is a variable that will hold the files uploaded
$dir = Yii::app()->controller->module->cssFolder;
//uploaded is a flag to see if we need to display a success/error message
$uploaded = false;
$model=new CssUpload();
if(isset($_POST['CssUpload'])){
$model->attributes=$_POST['CssUpload'];
//see if file is correct format and allows us to see and save the file
$file=CUploadedFile::getInstance($model,'file');
if($model->validate()){
$i = 0;
//trying to add a int to the front/end of a duplicate file
//able to handle the duplicate one time then gets stuck in an infinete loop
//(it actually breaks on the first duplictae but it uploads)
do{
if(file_exists($dir.'/'.$file)){
//increase $i by 1 every time it loops through
$i++;
//for test purposes only
echo $i;
//upload the file
$uploaded = $file->saveAs($dir.'/'.$i.$file->getName());
//stops the infinute loop
break;
}
}while(file_exists($dir.'/'.$file));
//upload the original file with no new extensions
$uploaded = $file->saveAs($dir.'/'.$file->getName());
}
}
$this->render('index', array(
'model' => $model,
'uploaded' => $uploaded,
'dir' => $dir,
));
}
Upvotes: 0
Views: 748
Reputation: 11887
Well I think you have two options:
append something like microtime()
to the end of the filename, that way it's virtually impossible for you to have the same file name twice.
if you need the files to be kept in order and don't want to use the approach above, then you'd have to store the last inserted number in a database and then retrieve it, increment and store again.
I use the YII framework as well, but can't remember of anything specific to Yii that would help you here.
Upvotes: 1
Reputation: 1754
You will have to scan through all files that could possibly match the pattern.
Have a look here for how to find files using a wildcard-search: PHP file_exists and wildcard
From there you acn do 2 things.
Upvotes: 0