Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Du bon usage de header()


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Du bon usage de header()
    Salut,
    Je voudrais télécharger du serveur web où tourne php un fichier de type json.
    Après une consultation sur internet, j'ai trouvé une piste intéressante:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename= index.json");
    ?>

    Le fichier à charger dans le navigateur s'appelle index.json.
    Cependant, ce fichier est écrit dans le répertoire téléchargement de mon Mac, mais ne contient aucun octets (0).
    Qu'est-ce qui coince ?

  2. #2
    Modérateur

    Salut,

    je t'explique ce que tu fais : tu informes le navigateur qu'il doit se préparer à recevoir un flux de données au format json.
    Lui il se prépare, mais ne reçoit rien : où est-ce que tu lui envoies le fichier ?
    Il te manque au moins un echo après le dernier header()

  3. #3
    Membre régulier
    Merci, mais
    Merci.
    ça marche aussi avec readfile("mon fichier.json");
    Au fait, est-il possible d'avoir la liste de tous les format de fichier du header ?
    Je m'explique :
    Il y multipart/data pour les formulaires et d'autres que j'aimerai connaitre ?
    Je suppose que les formats reconnus dépendent de la config du serveur ?

  4. #4
    Expert éminent
    Dans le cas d’Apache, le serveur a différents handlers pour les fichiers se trouvant dans son système de fichier, et reconnaît les types en regardant l’extension du fichier. Par exemple, un fichier avec l’extension .php est traité avec le type application/x-httpd-php et Apache le passe à son module PHP, au lieu d’envoyer le contenu brut du fichier (autrement dit le code source) au client. Les images, elles, se voient ajouter des directives de cache, etc.
    Plus d’infos&#8239;: Utilisation des gestionnaires Apache

    Dans le cas des navigateurs et de HTTP en général, l’en-tête 'Content-Type' indique un type MIME, et un navigateur peut être configuré pour déclencher une action à la réception d’un type donné. Par exemple, pour le type text/html, le navigateur va le gérer lui-même en utilisant son analyseur de code HTML&#8239;; pour un format de média (image, vidéo, son), selon les capacités du navigateur, il peut le lire lui-même, proposer de l’enregistrer, ou de le passer directement à un lecteur tiers. Le choix de l’utilisateur peut être retenu pour les fois suivantes.
    Sous Windows, le navigateur peut consulter les associations de fichier dans la base de registre, ce qui fait par exemple que Firefox propose par défaut d’ouvrir un .gif avec Internet Explorer.
    Ce qu’il faut retenir de tout ça, c’est que l’action du navigateur dépend fortement des choix de l’utilisateur, et tu ne peux pas vraiment prédire ce qui va se passer côté client.

    Les types de formulaire comme multipart/form-data ou application/x-www-form-urlencoded servent plutôt à l’envoi de données vers un serveur. Mais la plupart des types sont utilisables dans les deux sens. Tout dépend de ce que la partie réceptrice est capable de traiter.

    Le type application/octet-stream est un peu particulier car il n’a jamais d’association définie (sauf si l’utilisateur a vraiment fait de la grosse bidouille), c’est donc un peu un type joker.
    Quant à l’en-tête Content-Disposition: attachment, il permet de forcer l’enregistrement du fichier, et c’est une directive que le navigateur respecte toujours.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  5. #5
    Membre régulier
    Juste encore une question s.v.p
    Merci pour cette explication détaillée.
    J'ai vu, mais pas vraiment compris qu'il existe un "Content-type" "application/json".
    Est-ce un moyen de passer un fichier json au serveur ?
    Encore merci.

  6. #6
    Expert éminent
    C’est le type qui indique le format JSON. Tu peux l’utiliser du client vers le serveur, et du serveur vers le client.
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  7. #7
    Membre régulier
    A savoir, donc
    Plutôt que de faire des lectures de fichiers à chaque page, j'emploierai le format "application/json".
    Merci encore et bon courage pour la recherche de travail.