CJuiProgressBar

Sr’s

Alguem já usou um CJuiProgressBar pra informar o progresso de um action que está lendo e processando um arquivo texto de 5 mil linhas ??

Tentei passar o progresso via session mas nao tive sucesso.

A barra de progresso ficou assim




<?php


				$session=new CHttpSession;

				$session->open();


				$this->widget('zii.widgets.jui.CJuiProgressBar', array(

					'id'=>'progress',

					'value'=>$session['progressBar'],

					'htmlOptions'=>array(

						'style'=>'width:500px; height:20px; float:left;'

					),

				));

				?>



A função em javascript que estou tentando pegar o progresso.




function progressBarTest(){

		   /* start DB operation */

		   $.ajaxSetup({async:true});

		   $.ajax({

				 url: '<?php echo CController::createUrl('site/processtext'); ?>', 

				 async: true,

				 dataType: 'json'

		   });

		

		

		   var myInterval = setInterval(function(){

				 $.getJSON('<?php echo CController::createUrl('site/progressbarsession'); ?>', function(data) {

					$('#total').text(data.progressBar+'%');

					

					

					$('#progress').progressbar({

								value: data.progressBar,

					complete: function(event, ui) {

						

						clearInterval(myInterval);

						


					}


					});

				 });

		}, 500);

			return false;

		}	



O Código dos actions




	public function actionProgressBarSession() {

		$session=new CHttpSession;

		$session->open();

		echo CJSON::encode(array(

			'progressBar' => $session['progressBar'],

		));	

	}	

	

	public function actionProcessText() {

        if (Yii::app()->request->isAjaxRequest) {


		$session=new CHttpSession;

		$session->open();

		


			for ($i=0;$i<20;$i++)

			{

                                // Aqui seria a leitura do arquivo txt

				$session['progressBar'] = $session['progressBar'] + 1;

				sleep(1);

			}   

		

		

		echo CJSON::encode(array(

			'progressBar' => $session['progressBar'],

		));

		

		Yii::app()->end();

		}

	}



Bronca resolvida

O problema estava nas sessões

	&#036;session-&gt;open();


	&#036;session['linesTotal'] = &#036;lines;


	&#036;session-&gt;close();	

os 2 metodos acessavam a sessão ao mesmo tempo, e somente 1 poderia acessar, resolvido abrindo e fechando.

Nesse post tem a explicação.

http://konrness.com/php5/how-to-prevent-blocking-php-requests/

[]s