• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Gurzi

Estou a obter um ciclo infinito

2 mensagens neste tópico

Boas malta, tenho um problema.

Estou a trabalhar com a classe FPDF e vou buscar á base de Dados uma descricao de um livro que eu não faço ideia quantos caracteres tem, ou seja, tanto pode ter 10/20/100/200(..) por aí fora.

Acontece que com um print(na linguagem do FPDF, que agora não interessa) ele chega ao fim da linha e nao faz break line, simplesmente ignora os restantes que não foram imprimidos.

Então arranjei uma forma simples de resolver o problema, de 50 em 50 caracteres ele guardava num array.

Acontece que esqueci-me completamente e quando testei existiam palavras cortadas , do género, tiago em vez de estar da forma correcta , como estava no final do match range de 50 caracteres, era cortada a palavra para a linha de baixo.

Elaborei então um script alternativo, mas parece que está a entrar num ciclo infinito porque obti esta resposta do browser :

Fatal error: Maximum execution time of 30 seconds exceeded in /home/novaecl/public_html/catalog.php on line 59

Não estou a ver onde, até porque me parece tudo porreiro

    $text  =  $row['Descricao'];
// Total de caracteres da string
$total = strlen($text);
$x = 0;

//A posicao ja corrida da string
$corrente = 0;

if($total <= 50)
    $string[0] = $text;
else
{
   // Se o restante ainda nao verificado for maior que 50
   while( $total >= 50 )
   {
        $i = 0;
        // Vai Procurar por um espaço branco, se nao encontrar, continua a procura para tras
        while( substr($text, $corrente + 50 - $i,0) != " ")
            $i++;
    
        // Depois de encontrado um espaco branco, guarda a string toda para tras na posicao x do array
        $string[$x] = substr($text, $corrente, 50 - $i);
   
        // Aumenta o que ja foi visto , o I aparece visto que foi os que tirou pelo espaco em branco
        $corrente += 50 - $i;
        // Caracteres ainda em falta para atribuir
        $total -= 50 - $i;
        $x++;
    }
    // Caso o total seja ainda maior que 0 atribuir ao array
  ( $total > 0 ) ? $string[$x] = substr($text,$corrente,$total) : false;
}

// Isto vai imprimir no PDF o array com os breaks
for($i = 0; $i < count($string) ; $i++)
{
    $pdf->Cell(0,0,$string[$i],0,1);
    $pdf->Ln(8);
}


}

$pdf->Output();
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que o problema é no

substr($text, $corrente + 50 - $i,0) != " "

, o 0 não devia ser 1?

E porque não utilizas em vez da função substr,

$text{$corrente + 50 - $i}

já que queres testar só 1 caracter.

E porque não inicias o i com 50 e vais decrementando? Evitavas uma data de contas, em todos os sítios que tens "+ 50 - $i" ficavas apenas com "+ $i".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora