Eu estou anexando valores json a um arquivo externo. Os dados do formulário são capturados com variáveis ajax e post. Eu tenho um pequeno script que explode a cadeia de dados json e tenta implodir o arquivo de volta junto com as variáveis post no meio (ou, na verdade, no final).
<?php
$json_file = "data.json";
$json_data = $_POST["newUpload"]."]}";
//something like {"name":"foo","email":"foo@bar.com"}
$fh = fopen($json_file, "r+"); //I think this is the problem???
$data = fread($fh, filesize($json_file));
$jsonFrags = explode("]}",$data);
$new_data = implode($json_data,$jsonFrags);
fwrite($fh, $new_data);
fclose($fh);
?>
Esta foi a coisa mais fácil que eu poderia fazer com a permitir que uma lista de usuários crescesse em um site rodando fora do XAMPP e uma máquina Windows com acesso limitado à Internet. Uma vez talvez duas vezes por dia.
O JSON inteiro é assim:
{"uploads": [{"name":"foo","email":"foo@bar.com","imgurl":"http://placehold.it/50x50"}]}
Eu carrego os dados do arquivo em $data
e explodi-lo no final do caractere de arquivocorda "]}". Dessa forma, sempre acrescenta ao final. Mas não explodir / implodir me dando problemas. Eu posso usar str_replace e obter o mesmo resultado. Depois de executar o script PHP acima, recebo isso em data.json:
{"uploads": [{"name":"foo","email":"foo@bar.com","imgurl":"http://placehold.it/50x50"}]}{"uploads": [{"name":"bar","email":"bar@foo.com","imgurl":"http://placehold.it/100x100"}]}
Eu tenho sido capaz de mudar o argumento para fopen para obter resultados diferentes, nenhum dos quais são os resultados que eu esperava. Alguma ideia?
Respostas:
1 para resposta № 1Bem, você não definiu a variável $json
em absoluto. para todo PHP sabe, $json
é nulo. seu código está tentando abrir um arquivo (para leitura), mas o arquivo é nulo!