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


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
Auteur

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

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>