Contenu-type de ne pas travailler en PHP
J'ai quelques problèmes avec un fichier PHP qui ne fonctionne pas correctement. Le type de Contenu n'obtient pas reçu par n'importe quel navigateur. Firebug interprète le fichier en tant que texte/html au lieu de css. Voici le fichier :
<?php
header('Content-Type: text/css; charset=UTF-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 'On');
/* CSS goes on from here */
J'ai testé de mettre une ligne avec echo 'TEST';
avant de la ligne d'en-tête, et m'attendais à voir le classique "headers already sent" erreur, mais rien ne s'affiche!
Normal .css-les fichiers sont comme un charme.
Que puis-je faire pour régler cette question?
Mise à JOUR:
Ne changer default_mimetype = "text/html"
à default_mimetype = "text/css"
en php.ini et toutes les pages s'est immédiatement interprété comme css, donc il doit être un moyen de simplement envoyer css en-têtes de ce fichier 🙂
Le dossier complet de demande de Jean:
<?php
header('Content-Type: text/css; charset=UTF-8');
echo 'body {background-color: #000000; }';
?>
Mise à JOUR #2:
L'ajout de ini_set('default_mimetype', 'text/css');
pour le fichier PHP résout ce fichier, mais ça ne résout pas le problème que les causes de cette anomalie...
Mise à JOUR #3:
Testé en ajoutant AddType text/css .css
à la fois .htaccess et de configuration d'Apache. Toujours pas de chance. Également testé d'envoyer des en-têtes séparés de charset: header('Content-Type: text/css');
- Toujours pas de chance...
Mise à JOUR #4:
Avez réinstallé Apache+PHP sur le serveur pour voir si le problème disparaît, mais non. Même vieux, même vieux...
Content-Type: text/html
Je sais que c'est une question idiote, mais êtes-vous de la fermeture de la <?php avant la sortie de la css? Bien sûr, si vous êtes en écho à la css, de m'ignorer.
Salut Matt! Yep! Le css est fait l'écho, merci!
Grâce industrielle! J'ai testé le code et il génère le css bien (et avec le bon type mime). Essayez de changer de 'display_errors' " on " en php.ini. Il y a certainement quelques funky erreur naturel, mais il ne s'affiche pas. Edit: savez-vous si vous êtes à l'aide de mod_php ou FastCGI avec apache?
OriginalL'auteur Industrial | 2010-03-24
Vous devez vous connecter pour publier un commentaire.
Vérifier votre php.fichier ini pour l'output_buffering réglage. Si elle n'est pas réglé sur "off" que PHP est automatiquement faire le tampon de sortie pour vous. Jeu de off et que l'écho de quelque chose avant de l'en-tête de commande, et vous devriez voir le classique "erreur".
Vous ne devriez pas utiliser la fermeture ?>. Je sais que c'est une suggestion controversée, mais trop souvent, les gens ajouter un retour et/ou de l'espace après celui-ci, qui est sortie vers le navigateur (avant l'en-tête). Il y a très peu de cas où il ne l'utilisez pas pourrait poser problème.
?>
à la fin d'un fichier.OriginalL'auteur Brent Baisley
Vous pouvez ajouter la
Content-Type
propriété peut être substituée dans l' .fichier htaccess(s). (par exemple,ForceType
etAddType
)OriginalL'auteur AlexV
la raison en est que la
header
fonction ne fonctionne que si il est le premier à être appelé!Si vous mettez un
echo
avant, le type de contenu devient automatiquementtext/html
essayez d'imprimer un code CSS après l'en-tête pour tester si cela fonctionne réellement.
Lire cette page pour plus d'infos
EDIT: avez-vous changé de poste ? 🙂
Mise à JOUR: essayez de remplacer le
default_mimetype
de la php.ini dans le code...Bonjour Giovanni, qui ont travaillé pour ce fichier! Merci!
OriginalL'auteur Giovanni Di Milia
Ce problème est généralement causé par une erreur fatale (c'est à dire, erreur de syntaxe) qui provoque le script pour abandonner avant que tout le code est execute (avant display_errors peut être réglé grâce à la fonction ini_set() au moment de l'exécution). Essayez de changer display_errors dans le fichier de configuration php (php.ini).
Post le css, quelque chose qui provoque une erreur fatale. C'est pourquoi l'écho déclaration au bas n'a rien fait et les erreurs php ne sont pas affichés. Il pourrait y avoir quelque chose dans votre css, qui est de briser le script (particulièrement vrai si vous êtes écho avec elle, il est facile de manquer un devis sans échappement)
Salut Jean, posté le dossier complet dans le premier post, même si c'est juste une ligne de Css qui doit être valide...
OriginalL'auteur John Himmelman
Peut-être la fonction
header()
est désactivé dans votre configuration?Test:
OriginalL'auteur fuxia
Il peut être utile de vérifier avec curl pour voir ce que les en-têtes sont en cours d'expédition.
Essayez ceci à partir d'une ligne de commande et vérifier le "text/css":
En fonction de la demande du navigateur les en-têtes, PHP peut également envoyer le format de sortie en utilisant le tampon de sortie. Dans le fichier PHP, essayez ceci pour vérifier
ob_gzhandler
.Si elle est activée, la case pour
zlib.output_compression
dans votre php.ini ou de configuration d'Apache.OriginalL'auteur dave1010
J'ai trouvé le fichier complet est mis en retrait.
Parce que l'indentation de la ligne 1 sortie 4 espaces, par conséquent, l'en-tête ne fonctionne pas.
OriginalL'auteur Ming-Tang
Cela ressemble à votre serveur web est d'interpréter le script comme un fichier normal. A-t-il .extension de php et de faire d'autres .les fichiers php fonctionnent comme prévu?
OriginalL'auteur a'r
Semble parfaitement au point et de la ligne avec le
echo
devrait certainement générer un avertissement. Se pourrait-il que vous modifiez le fichier incorrect?OriginalL'auteur soulmerge
Vous pouvez essayer
Content-Style-Type: text/css
Voir ci-dessous, à partir de la ici
<META http-equiv="Content-Style-Type" content="text/css">
Edit:
À la lien , il est mentionné pour ajouter
AddType text/css .css
dans le fichier de configuration d'apache.Peut-être que vous pouvez lui donner un essai
Edit2
Rechercher pour " css " à ce lien. Quelqu'un a eu le même problème que vous. Essayer d'envoyer l'en-tête sans le jeu de caractères
Modifier 3
Il y avait un post à propos de certaines formes de ne pas soumettre des données à cause d'un utilitaire appelé AVG Linkscanner. Puisque vous avez réinstallé Apache + php et je suppose que vous n'avez pas à réinstaller le système, de sorte que vous pouvez peut-être enquêter sur cette/essayer en tournant quelques utilitaires/fiches-ins off.
Salut à nouveau! Essayé ainsi à la fois dans httpd.conf & .htaccess. Pas de succès...
Salut à nouveau. Essayé d'envoyer simplement le type de contenu sans aucun jeu de caractères plus tôt. Rien de nouveau. Merci pour votre aide!
La "feuille de style par défaut de la langue" s'applique au style attribut, les éléments de style, de prendre leur langue dans le type de l'attribut, liés les feuilles de style de leur prendre de l'en-tête HTTP.
OriginalL'auteur ccheneson
Sauvage deviner : ouvrez votre fichier avec quelque chose qui serait d'afficher toutes les BOM. Si vous voyez des caractères étranges avant de
<?php
vous avez votre problème. Vérifier votre actuelle de l'éditeur des options pour enregistrer les fichiers UTF-8 et de faire enregistrer sans BOM.OriginalL'auteur Arkh
Peut-être il y a des problèmes avec la mise en cache.
Essayez ceci:
Fonctionne pour moi sur une sortie de la zone d'installation de XAMPP et firefox firebug indique correctement le type de contenu.
OriginalL'auteur zaf
output_buffering = Off
en php.ini a été la raison de moi pourquoi il continue à envoyer desContent-Type = text/html
. Le paramètre 1 de la résoudre.OriginalL'auteur deathemperor