Adicionem o novo domínio do blog aos seus favoritos! www.crashcomputer.com.br

Postagens com a tag ‘Newbie’

   quarta-feira, 27 de agosto de 2008

Gambiarra, "Recurso técnico" ou o que seja.



1 Star2 Stars3 Stars4 Stars5 Stars (Nenhum voto, seja o primeiro!)
Loading...

Em minhas aventuras como gambiar…. erhhh… programador em php, como todo bom iniciante, as vezes apanho por bobeira, mas nada que uma consultinha no Google ou em um dos zilhões de fóruns sobre php não conserte depois de bater testa uns 15 minutos no monitor.

Mas ontem aconteceu uma que me deixou atordoado. Estava do lado de cá montando um script pra cuspir um e-mail multpart, formatado em texto plano e html. No meio do meu código (o html gerado pelo script para o e-mail) tem uma linha que deve ser carregado com valores passados por variaveis vindas do script php que monta a página web. Até ai, nada de novo… nada que $_SESSION[cesta][$indice][ITEM] não insira o valor no html gerado para o e-mail.

Tudo vai muito bem na parte txt… Mas na hora de gerar o html começa o martírio com as aspas.

E pra atribuir uma string (valores não numéricos) a uma variável, é necessário que o dado esteja delimitado por aspas, desse jeito: $v_iten .= “blábláblá”;

Legal, logo se for atribuir tags html é preciso dizer ao interpretador php que a próxima aspa (que no caso pertence a uma tag html) não é a que fecha a delimitação da string… OU usar aspas simples ( ‘ ) ao invés da aspas dupla ( ” ).

Sabido o que eu queria agora vamos ao pepino em si. De cara eu fui pelo método mais simples, o que gera menos texto pra escrever, usei tudo aspas simples nas tags html.

No servidor local, que esta instalado em meu pc (web developer suite, ou seja php5 + apache for windows) tudo funcionou redondamente, como deveria ser. O código cuspido no e-mail era assim: <tr><td class=’grid’ height=’26’ width=…

Maaaaassss… murphy esta de plantão e é claro que DEU pau na hora que eu subi pro servidor, que roda em linux (não me pergunte a versão do php que esta por lá deve ser 4.alguam coisa).

Explicando um pouco mais, a tripa de tags html são geradas em $v_iten que na verdade é um array. E este é passado ao script que gera o e-mail através de um field hidden no código e envia via post.

Do outro lado a variável é recebida do post e copiada para $v_iten novamente.

Porém no servidor linux ela chegava assim: <tr><td class=\’grid\’ height=\’26\’ width=…

Não me pergunte porque o php que esta rodando lá no servidor, inventou de inserir \ (backslach) nas aspas simples, talvez querendo dizer… a próxima aspas é pra imprimir e não é código, tal como se faz com a aspas duplas, quando ela é imprimivel e não é delimitadora: \”

Dai vou eu tentar o plano B nas tags html… ao invés de aspas simples, vamos usar \” que deve funcionar.

Aha… não funcionou! Não sei porque, ai tanto faz no meu servidor local quanto no web, o php se perdia nas aspas e misturava o código html presente na variável, no código da pagina, fazendo um rebú danado.

Não teve o que eu fizesse que resolveu. A solução (porca mas digamos… “bem sacada”) que acabei utilizando foi… fazer search & replace na variável depois de passada pelo post, a procura dos \ e substituir por… nada…

Resumindo (inclusive com o comentário, que ficou engraçado):

//GAMBIAR... OPS! RECURSO TÉCNICO PRA CONSERTAR O BUG QUE ACONTECE NO PHP DO SERVER LINUX...
$v_itens = str_replace("\\", "", $v_iten);

É feio? É porco? É… mas funcionou. Quando eu tiver tempo e cabeça ou vou atrás de entender o que esta acontecendo e como resolver da forma correta, mas por enquanto dessa forma esta funcionando eheheh



  Melhor visualizado a
1024 x 768 True color
Proudly powered by WordPress. Theme developed with WordPress Theme Generator.
E altamente gambiarrado por mim mesmo :)
Copyright © 2010 by Crash Computer. All rights reserved.