Subir archivos pero como le cambiamos el nombre?

Tengo el siguiente problema he logrado de forma perfecta subir archivos.

en mi base de datos yo tengo que subir los curriculums de la gente.

en formato doc, pdf y odt

los formatos la subida todo perfecto cuando le doy almacenar la base de datos

tiene un campo llamado cv que guarda el nombre del archivo en su registro

mi problema consiste en que cuando subo 2 archivos con el mismo nombre y extension

se sobre-escriben

tengo el siguiente codigo


<?php

     

     class RegistroController extends Controller

{


	public function actionIndex()

	{

	$model = new Usuarios;

	$form = new CForm('application.views.forms.registro.registroForm',$model);

	if($form->submitted('registrar') && $form->validate())

		{

		$model->attributes = $form->elements;

		$model->cv=CUploadedFile::getInstance($model,'cv');

		$model->cv->name = time().$model->cv->name;

		if ($model->save())

		{

		echo $model->cv;

		$model->cv->saveAs('cv/'.$model->cv);

		}

		/*$this->redirect(array('site/index'));*/

		}

	else

		$this->render('index',array('registro'=>$form));

	}


}


?>

noten y perdonen que el temita tiene algunas trazas que le hice de pruebas

el caso es que quiero lograr usar TIME() para ponele nombres a los archivos

y que no se repitan.

y cuando lo intento me dice el siguiente error

CException

Description

Property "CUploadedFile.name" is read only.

evidentemente fui a las API y veo que es read only ese argumento ahora me pregunto

como puedo cambiarlo? para que en la bd se guarde con el nombre parecido a

123123123cv.doc

por ejemplo

y que el archivo fisicamente se almacene igual que en la Db para luego yo ir a buscarlo???

porfavor si me lo ayudan a resolver les estaré agradecidos.

Aquí te dejo una función de mi aplicación en la que hago algo parecido :




public function actionUpdate()

	{

		$model=$this->loadusuario();

		

		if($model->id != Yii::app()->user->id && Yii::app()->user->getState("tipo")!=0)

				throw new CHttpException(500,'Se ha producido un error.');

		

		

		if(isset($_POST['usuario']))

		{

			$model->attributes=$_POST['usuario'];

			$model->avatar = strtolower($model->avatar);

			$logo = CUploadedFile::getInstance($model,'avatar');

			

			if($logo){				

			

				$ext = substr($logo->name, strpos($logo->name,"."),strlen($logo->name));

				$model->avatar= "avatar_".$model->id.strtolower($ext);

				

				if($model->save())

				{

					$logo->saveAs('images/uploads/'.$model->avatar);

					$image = Yii::app()->image->load('images/uploads/'.$model->avatar);

					$image->resize(50, 50, Image::WIDTH)->quality(75);

					$image->save();

					$this->redirect(Yii::app()->urlManager->createUrl('/usuario/show',array('id'=>$model->id)));

				}				

			}

			else{

				

				if($model->save())

					$this->redirect(Yii::app()->urlManager->createUrl('/usuario/show',array('id'=>$articulo->id)));

			}

		

		

		}

		$this->render('update',array('model'=>$model));

	}



No se si es la mejor manera, lo que yo hago es guardar la ruta en $model->avatar creando el nombre que quiero.

Ya intentaste hacer algo mas sencillo como lo siguiente, digo solo para hacer la prueba…


$archivo = CUploadedFile::getInstance($model,'cv');

$model->cv->name = $archivo->name."_".time();

Hey!

I’ve extended CFileHelper and added some little methods to handle this, like




<?php

class MyFileHelper extends CFileHelper{


    public static function deleteFile($path){

        return unlink($path);

    }




    public static function extractZipFile($zipFile,$pathToSave){

        $zip = new ZipArchive();

        if ($zip) {

            if (($zip->open($zipFile)) && ($zip->extractTo($pathToSave))){

                $zip->close();

                return true;

            }

        }

        return false;

    }




    public static function createDir($path, $recursive){

        if (!is_dir($path)) {

            return @mkdir($path, 0755, $recursive);

        }

        return false;

    }




    public static function renameFile($oldName, $newName){

        if (file_exists($oldName))

            return rename($oldName,$newName);


        return false;

    }


    public static function deleteDir($dirName){

        if (is_dir($dirName))

            $dir_handle = opendir($dirName);


        if (!$dir_handle)

            return false;


        while($file = readdir($dir_handle)) {

            if ($file != "." && $file != "..") {

                if (!is_dir($dirName."/".$file))

                    unlink($dirName."/".$file);

                else

                    self::deleteDir($dirName.'/'.$file);

            }

        }


        closedir($dir_handle);

        rmdir($dirName);

        return true;

    }


}

?>




Put this in a file under protected/components and use like:




MyFileHelper::renameFile($oldName, $newName);



Hope it helps!

:)