Poster un fichier json afin de le traiter en php

Par Mizzou, il y a 9 ans


Bonjour,
Je voudrais savoir s'il est possible de poster un fichier json, afin de recuperer le contenu en php et d'effectuer le traitement?
Cordialement

3 réponses

Manghao, il y a 9 ans

Oui c'est possible, alors tu as:

$_FILES['fichier_json']['tmp_name']

ces deux fonctions permettent de récupérer le chemin temporaire du fichier uploadé et avec:

file_get_contents() json_decode()

tu peux récupérer le contenu du fichier et décoder le json, en gros ça donne ça:

$json = file_get_contents($_FILES['file']['tmp_name']); $content = json_decode($json); // json_decode($json, true) => retourne des tableaux, sinon c'est un object var_dump($content);

si tu utilise Slim ou Symfony ou un framework qui utilise RequestInterface (psr-7) tu as ceci pour récupérer le fichier

$files = $request->getUploadedFiles(); $json = file_get_content($file['tmp_name']) // le reste c'est comme au-dessus

je te conseillerai de le laisser sous forme d'object, je trouve ça plus pratique car tu as juste a faire:

$var = $content->var;

pour le code du formulaire:

<form action="upload.php" method="post" enctype="multipart/form-data"> Fichier Json <input type="fichier_json" name="file" id="fichier_json"> <input type="submit" value="Envoyer" name="envoyer"> </form>

Voilà en espérant t'avoir aidé :)

Mizzou, il y a 9 ans

Bonjour Manghao, ta réponse est largement satisfaisante. Grace à tes explications, j'ai pu parser mon json et pouvoir faire le traitement adéquate.
Si je peux juste abuser, je suis en train d'accentuer mon apprentissage sur de l'ajax, et je voulais savoir si il etait possible d'envoyer ce fichier en ajax?
Cordialement

Manghao, il y a 9 ans

Alors avec ajax, c'est possible, pour le JS c'est comme ceci :

$('#formulaire').on('submit', function(e) { e.preventDefault() var pr = $.ajax($(this).attr('action'), { type: $(this).attr('method'), contentType: false, processData: false, context: $(this), dataType: 'JSON', // Retour de la fonction d'upload en jSON, mais c'est pas obligé data: $(this).serialize() }) pr.done(function(response) { alert(response) }) pr.fail(function(response, status, error) { alert('Une erreur est survenue au moment de l\'upload') }) return false })

et le fomulaire est le même, il faut juste lui donner un id

<form id="formulaire" action="upload.php" method="post" enctype="multipart/form-data"> Fichier Json <input type="file" name="fichier_json" id="fichier_json"> <input type="submit" value="Envoyer" name="envoyer"> </form>