Dinheiro, medida e código no PHP: o que cada etapa apaga e como manter o tipo no arquivo
Um sistema PHP que passa dinheiro, CPF ou peso por JSON ou CSV perde tipo, zero à esquerda e unidade. O SDK em PHP do jsonW grava cada campo com o tipo declarado e permite conferir o arquivo depois.

Em outubro, a iMasters publicou que uma falha crítica de execução remota no PHP, achada com ajuda de IA, tirou sites de governo do ar na Europa e nos Estados Unidos. Segundo a matéria, o FBI e a PHP Foundation pediram atualização imediata, e a fundação já tinha liberado as correções. No dia 10 de novembro, a cobertura do Web Summit, também na iMasters, relatou no palco que ferramentas de análise com IA estão encontrando brechas antigas, entre elas uma falha de 15 anos no PHP.
Na prática, quem mantém um sistema PHP começa pelo básico: confirmar a versão em produção e se a correção já foi aplicada, direto ou pelo provedor de hospedagem. O jsonW não corrige o PHP nem o servidor. Ele resolve outro problema, que continua depois da atualização: o dado que sai do banco e vai para arquivo, relatório ou outro sistema sem perder o tipo de cada valor.
O que o JSON comum deixa passar
O JSON tem texto, número, verdadeiro e falso, nulo, lista e objeto. Não tem dinheiro, medida, código ou data com precisão de microssegundo. Na prática, um CPF com zero à esquerda vira número e perde o zero. Um preço pode passar por ponto flutuante. Um peso chega sem unidade, e ninguém sabe se era grama ou quilo. O README do jsonW abre com esses três casos.
O CSV no meio do caminho piora a situação. O AGENTS.md do projeto, escrito para agentes de código, recomenda não exportar para CSV ou JSON no meio do caminho, porque isso perde tipo, zero à esquerda e precisão.
Os tipos que o SDK em PHP grava
- dinheiro: moeda ISO 4217 em cada valor, como 12,50 BRL. A soma só acontece na mesma moeda.
- decimal[2]: o valor nunca passa por ponto flutuante, então 12,50 continua 12,50.
- codigo: CNPJ, CPF, chave, placa, SKU e CEP ficam em bytes exatos, sem normalização e sem corte de espaços.
- medida[kg]: uma entrada em outra unidade da mesma grandeza é convertida ao gravar, e outra grandeza é recusada.
- tempo: microssegundos em UTC.
Como o SDK em PHP funciona
O arquivo sdk/php/jsonw.php usa a extensão FFI do PHP para chamar a biblioteca C. Pelo código, a biblioteca é procurada pela variável JSONW_LIB, depois na pasta do SDK e em bin/ da plataforma. Se nenhuma for encontrada, o erro informa qual plataforma foi buscada. O README traz binários para macOS arm64, Linux x86_64 e Windows x86_64.
require 'sdk/php/jsonw.php';
$w = new JsonW\Escritor('vendas.jsw', 'id:i64,produto:texto,preco:dinheiro');
$w->gravarTexto('{"id":1,"produto":"Café especial","preco":"12,50 BRL"}');
$w->fechar();
$r = new JsonW\Leitor('vendas.jsw');
echo $r->campo(0, 'preco');
$r->conferir();
O fluxo completo fica assim:
flowchart LR
A[Sistema PHP] --> E[JsonW Escritor]
E --> F[(arquivo .jsw)]
F --> C[conferir: sha256 e crc32c]
F --> L[JsonW Leitor]
L --> V[visao por escopo]
V --> R[Resposta a quem tem o escopo]
Comparação honesta com o que se usa hoje
| Tema | JSON ou CSV hoje | jsonW no PHP |
|---|---|---|
| Tipos de negócio | JSON não tem dinheiro, medida nem código; CSV é texto puro | Declarados no esquema e conferidos ao gravar |
| Zero à esquerda | Pode sumir na conversão | codigo guarda os bytes exatos |
| Tamanho em disco | JSONL como base | 4,9 vezes menor, nas medições do README |
| Ler um campo de uma linha | JSONL lido pelo leitor de JSON do projeto como base | 3.281 vezes mais rápido, nas mesmas medições |
| Dependência | Só o PHP e a biblioteca padrão | Extensão FFI e a libjsonw da plataforma |
| Licença | Formato aberto | Uso grátis dentro do produto; sem revenda do jsonW como serviço; núcleo em C fechado |
A troca tem custo. O jsonW exige a biblioteca no servidor e a extensão FFI, e um sistema que só usa a função de JSON do próprio PHP não tem esse passo. Faz sentido quando o dado tem moeda, código ou unidade e a equipe precisa provar que nada mudou na ida e na volta.
Disco, memória, rede e servidor: o que está medido
- Disco: 4,9 vezes menor que o JSONL, em 100 mil registros. O ganho no seu caso depende do seu dado.
- Memória: o README não traz medição de memória. Antes de prever economia, rode
wjsw medirna sua máquina. - Rede: segundo o README, a biblioteca e os SDKs nunca acessam a rede. A leitura parcial por HTTP Range existe no wremoto, que é ferramenta de linha de comando e não faz parte do SDK em PHP.
- Servidor: o wjsw-cgi roda em Apache, nginx, LiteSpeed, Caddy e IIS, e entrega, com Range, só o que a sessão pode ver.
Velocidade e qualidade do dado
A medição de 3.281 vezes é de leitura de um campo de uma linha, em 100 mil registros, contra JSONL lido pelo leitor de JSON do próprio projeto. O README avisa que bibliotecas de JSON mais otimizadas diminuem a diferença para gravar e ler tudo, e que a vantagem grande vem do acesso direto ao campo no formato em colunas.
Na qualidade do dado, wjsw conferir verifica crc32c e SHA-256 em cadeia, e o método conferir() do SDK faz o mesmo. Qualquer byte trocado aparece na conferência. Os números aceitam vírgula ou ponto, e o README afirma que um PHP configurado em pt-BR não troca o separador.
Liberdade funcional e permissão dentro do arquivo
A permissão fica no esquema. Uma coluna marcada com +pessoal ou +escopo(financeiro) sai nula para quem não tem o escopo, e não pode ser usada em filtro. Uma coluna tenant separa os dados de cada cliente, e blocos de outros tenants nem são abertos. No PHP, o leitor recebe os escopos da sessão pelo método visao():
$r = (new JsonW\Leitor('clinica.jsw'))->visao('financeiro');
A licença é de uso sustentável: uso grátis dentro do seu produto, em quantos servidores quiser. Não vale revender o jsonW como serviço nem fazer engenharia reversa do núcleo em C. Para outro uso comercial, o README indica contato com a Wortic.
Três situações do dia a dia (exemplos hipotéticos)
Os casos abaixo ilustram o uso. Não são medições de nenhum cliente.
1. O contador pede as vendas do mês
Situação: o sistema fecha o mês e precisa entregar um arquivo com preço, SKU e CPF. O que fazer: declarar preco:dinheiro, sku:codigo e cpf:codigo?+pessoal, gravar com JsonW\Escritor e chamar conferir() antes de entregar. Resultado esperado: o valor sai com a moeda, o SKU chega igual ao original, e quem não tem o escopo pessoal recebe o CPF nulo.
2. Atendimento e financeiro olham o mesmo arquivo
Situação: a recepção precisa do histórico de atendimento e o financeiro, do valor cobrado. O que fazer: marcar o valor com +escopo(financeiro) e abrir o arquivo com visao() conforme a área. Resultado esperado: a recepção não recebe a coluna de valor, mesmo que faça a consulta.
3. A importação cai no meio
Situação: uma carga de dados para no meio por erro do script ou queda de energia. O que fazer: se o script falhar antes do fim, chamar abandonar(), que não publica nada e deixa o destino como estava. Se o arquivo ficar cortado, wjsw reparar refaz o fim. Resultado esperado: o arquivo publicado está completo, ou só o último bloco se perde, e o conferir mostra o estado.
Passo a passo para testar no seu PHP
- Confira a versão do PHP em produção e se a correção de segurança já foi aplicada, direto ou pelo provedor.
- Confirme que o PHP carrega a extensão FFI, porque o SDK usa a classe FFI.
- Baixe o pacote da sua plataforma e aponte JSONW_LIB para a biblioteca.
- Declare o esquema com dinheiro, codigo e decimal, e grave uma amostra com zero à esquerda e centavos.
- Rode
wjsw conferire oconferir()do SDK, e leia de volta comcampo(). - Teste em homologação antes de subir para o PHP 8.6. O README não diz quais versões do PHP foram testadas.
Perguntas frequentes
O jsonW funciona com PHP 8?
O README lista um SDK para PHP 8 que usa FFI sobre a biblioteca C. Ele não informa quais versões do PHP foram testadas, então o teste em homologação é o passo certo.
O CPF com zero à esquerda sobrevive?
Sim, desde que o campo seja declarado como codigo. Um campo i64 não serve para CPF, porque o zero da frente se perde.
O SDK envia dados para algum servidor?
Não. Segundo o README, a biblioteca e os SDKs nunca acessam a rede. O wjsw envia só versão e plataforma uma vez, na primeira execução, e JSONW_SEM_PING=1 desliga esse aviso.
Posso migrar o sistema inteiro de uma vez?
O README não traz caso de migração completa. A leitura da Wortic é começar por um arquivo de exportação ou de histórico, que o conferir valida, antes de mudar o fluxo de escrita principal.
O PHP 8.6 já é compatível?
O README não confirma. O PHP 8.6 tem lançamento previsto para 19 de novembro, e em 6 de novembro o suporte geral a ele ainda não estava listado para as versões estáveis do WordPress, do TYPO3 e do Shopware. Teste antes de atualizar.
Como a Wortic ajuda
A Wortic cria e mantém o jsonW, e roda o formato nos próprios sistemas, entre eles os 100 sistemas de gestão com IA citados no rodapé do README. Para começar, a página do projeto em jsonw.org resume os recursos, e o código está no repositório, com o AGENTS.md para quem usa agentes de código.
Perguntas frequentes
O jsonW funciona com PHP 8?
O README lista um SDK para PHP 8 que usa FFI sobre a biblioteca C. Ele não informa quais versões do PHP foram testadas, então o teste em homologação é o passo certo antes de produção.
O CPF com zero à esquerda sobrevive?
Sim, desde que o campo seja declarado como codigo. Um campo i64 não serve para CPF, porque o zero da frente se perde.
O SDK envia dados para algum servidor?
Não. Segundo o README, a biblioteca e os SDKs nunca acessam a rede. O wjsw envia só versão e plataforma uma vez, na primeira execução, e a variável JSONW_SEM_PING=1 desliga esse aviso.
Posso migrar o sistema inteiro de uma vez?
O README não traz caso de migração completa. A leitura da Wortic é começar por um arquivo de exportação ou de histórico, que o conferir valida, antes de mudar o fluxo de escrita principal.
O PHP 8.6 já é compatível?
O README não confirma. O PHP 8.6 tem lançamento previsto para 19 de novembro de 2026, e em 6 de novembro o suporte geral a ele ainda não estava listado para as versões estáveis do WordPress, do TYPO3 e do Shopware. Teste antes de atualizar.
Fontes
- Repositório developer-wortic/jsonw (README e AGENTS.md)
- SDK em PHP do jsonW (sdk/php/jsonw.php)
- jsonW: o formato de dados da Wortic
- iMasters: falha crítica no PHP achada com ajuda de IA tira sites de governo do ar
- iMasters: IA como caçadora de vulnerabilidades, cobertura do Web Summit
- Laravel News: What's New in PHP 8.6
- scinet: PHP 8.6, cronograma e status em 6 de novembro de 2026
Conheça: jsonW em PHP 8.
Quer isso funcionando na sua empresa?
Um consultor da Wortic olha o seu caso e mostra o caminho, sem compromisso.
Falar com um consultorEquipe editorial
Equipe editorial da Wortic especializada em automacao, IA, ERP, CRM e crescimento operacional.
- Automacao com IA
- Gestao empresarial
- CRM
- ERP
- Marketing digital


