/ / Estou usando o argumento errado em fopen? - php, html, ajax, json, string

Estou usando o argumento errado em fopen? - php, html, ajax, json, string

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 № 1

Bem, 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!