responder educadamente o porquê este código está falhando.
Necessito que esta função retorne variações semelhantes a cab_01.swf
cujo arquivo deve obrigatoriamente existir. Sendo que não pode haver
repetições do mesmo swf até que termine a lista para poder começar
novamente.
No momento só existem 2 swf aqui comigo, o cab_01.swf e cab_02.swf
portanto o efeito seria de alternação entre um e outro sem repetir
o mesmo consecutivamente. Mas é o que não acontece e estou aqui
para tentar decifrar o que há de errado. Obrigado.
[php]function CabSelector() {
$q = $_COOKIE[query_cab];
$query = explode('-', $q);
$max_cabs = 10;
// Lista os cab_??.swf existentes
for($i=0; $i < $max_cabs; $i++) {
$cab = 'cab_'.(($i<10)?'0'.$i:$i).'.swf';
if(file_exists($cab)) $cabs[] = $cab;
}
// Executa a operação até que não seja mais necessária
while((!$exists || $on_list) && !$exit) {
$on_list = false; // Reinicia a variável on_list se já foi usada no loop anterior
$num++; // Adiciona 1 ao contador
$ncab = ($num<10)?'0'.$num:$num; // Seleciona dois digitos para serem adicionados ao nome do arquivo swf
// Verifica se os dois digitos já estão na lista contando até a primeira ocorrência
for($i=0; $i < sizeof($query); $i++) if(!$on_list && $query[$i] == $ncab) $on_list = true;
// Verifica se os dois digitos não são o último da lista e se a quantideda de cab's na lista é igual ao
// nº de cab's existentes para não necessitar executar novamente esta operação
if(sizeof($query) < sizeof($cabs)) {
// Verifica se os digitos estão na lista como arquivo swf
for($i=0; $i < sizeof($cabs); $i++) if(!$exists && $cabs[$i] == 'cab_'.$ncab.'.swf') $exists = true;
if($exists) $cab = 'cab_'.$ncab.'.swf';
} else {
$ncab = '01';
$cab = 'cab_'.$ncab.'.swf';
$exit = true;
}
}
// Se quantidade de cab's gravados no cookie for a mesma que o nº de cab's existentes então reinicia a lista
// ou adiciona o novo cab ao final da lista
$cc = (sizeof($query) >= sizeof($cabs))?$ncab:$q.'-'.$ncab;
// Atualiza o cookie
setcookie('query_cab', $cc, time()+604800, '/');
return $cab;
}
echo CabSelector();[/php]Outra coisa.. a função funciona perfeitamente se atualizar página em segundos de carregada. Por exemplo, coloco este echo logo antes do return para informar as alterações:[php] echo // echo de apuração de valores
'
. numcab: '.$ncab.'
. end: '.end($query).'
. cabs: '.sizeof($cabs).'
. query: '.sizeof($query).'
. q: '.$q.'
. setcookie: '.$cc.'
. cookie: '.$_COOKIE[query_cab].'
esse é o código que tá no meu site e como podem ver ele repete o cabeçalho em flash em cada carregamento. http://www.imoveiscenter.com.br/
Com sessions acontece a mesma coisa, parece que o script não é executado algumas vezes.
[php]function CabSelector() {
session_start();
if(!isset($_SESSION[qcs])) $_SESSION[qcs] = array();
$max_cabs = 10;
// Lista os cab_??.swf existentes
for($i=0; $i < $max_cabs; $i++) {
$cab = 'cab_'.(($i<10)?'0'.$i:$i).'.swf';
if(file_exists($cab)) $cabs[] = $cab;
}
// Executa a operação até que não seja mais necessária
while((!$exists || $on_list) && !$exit) {
$on_list = false; // Reinicia a variável on_list se já foi usada no loop anterior
$num++; // Adiciona 1 ao contador
$ncab = ($num<10)?'0'.$num:$num; // Seleciona dois digitos para serem adicionados ao nome do arquivo swf
// Verifica se os dois digitos já estão na lista contando até a primeira ocorrência
for($i=0; $i < sizeof($_SESSION[qcs]); $i++) if(!$on_list && $_SESSION[qcs][$i] == $ncab) $on_list = true;
// Verifica se os dois digitos não são o último da lista e se a quantideda de cab's na lista é igual ao
// nº de cab's existentes para não necessitar executar novamente esta operação
if(sizeof($_SESSION[qcs]) < sizeof($cabs)) {
// Verifica se os digitos estão na lista como arquivo swf
for($i=0; $i < sizeof($cabs); $i++) if(!$exists && $cabs[$i] == 'cab_'.$ncab.'.swf') $exists = true;
if($exists) $cab = 'cab_'.$ncab.'.swf';
} else {
$ncab = '01';
$cab = 'cab_'.$ncab.'.swf';
$exit = true;
}
}
// Se quantidade de cab's gravados no cookie for a mesma ou maior que o nº de cab's existentes então reinicia a lista
// ou adiciona o novo cab ao final da lista
if(sizeof($_SESSION[qcs]) >= sizeof($cabs)) {
session_unregister(qcs);
$_SESSION[qcs][] = $ncab;
} else $_SESSION[qcs][] = $ncab;
echo // echo de apuração de valores (Provisório)
'
. numcab: '.$ncab.'
. cabs: '.sizeof($cabs).'
. query: '.sizeof($_SESSION[qcs]).'
return $cab;
}[/php]