11
votes

Type de contenu ne fonctionne pas dans PHP

J'ai des problèmes avec un fichier PHP qui ne fonctionne pas correctement. Le type de contenu n'est reçu reçu par aucun navigateur. Firebug interprète le fichier en tant que texte / html au lieu de CSS. Voici le fichier: xxx

J'ai testé pour mettre une ligne avec echo 'test'; avant la ligne d'en-tête et s'attendant à voir les en-têtes classiques "déjà envoyés "Erreur, mais rien n'apparaît!

Normal .CSS-Files fonctionne comme un charme.

Que puis-je faire pour résoudre ce problème?

< Strong> Mise à jour: A changé par défaut_mimetype = "text / html" sur par défaut_mimeType = "text / css" dans php.ini et toutes les pages ont été immédiatement interprétées comme CSS, il doit donc y avoir une manière Pour simplement envoyer des en-têtes CSS pour ce fichier :)

Le fichier complet de la demande de John: xxx

update # 2: Ajout ini_set ('faulau_mimeType ',' Text / css '); sur le fichier PHP corrige ce fichier, mais cela ne résout pas le problème qui cause cette erreur ...

Mise à jour n ° 3: Testé Ajout AddTtTy Text / CSS .CSS à la fois sur .htaccess et Apache config. Toujours pas de chance. Également testé pour envoyer des en-têtes séparés de Charset: en-tête ('Type de contenu: Texte / CSS'); - toujours pas de chance ...

Mise à jour # 4: Ont réinstallé Apache + PHP sur le serveur pour voir si le problème disparaît, mais non. Même vieux, vieux vieux ...


12 commentaires

Pouvez-vous voir quels headers sont envoyés aux navigateurs de Figrebug?


Je sais que c'est une question idiote, mais fermez-vous le


Salut Matt! Ouais! Le CSS est écho, merci!


Merci industrielle! J'ai testé le code et génère l'amende CSS (et avec le type MIME correct). Essayez de changer 'Display_Errors' à "On" dans php.ini. Il existe définitivement une erreur funky survenue mais ne pas être affichée. EDIT: Savez-vous si vous utilisez mod_php ou FastCGI avec Apache?


Salut! D'après ce que je peux dire, j'utilise mod_php. Les erreurs sont sur, mais rien n'apparaît :(


Ok les gars, personne n'a aucune idée?


Le CSS réel est-il envoyé au navigateur?


Industrial: quelle est l'extension de votre fichier CSS ou PHP?


Le CSS est envoyé, mais lu comme HTML tel que décrit.


Le fichier CSS est chargé par un fichier PHP, de sorte que la feuille de style liée est un fichier PHP.


Et vous absolument, certainement, croisement de votre cœur-heart-et-espoir-mourir, n'a pas de blancheur avant le ?


J'ai essayé toutes les réponses et l'outil de développeur de réseau Firefox me dit toujours que le fichier .js renvoyé par mon routeur.php est de type HTML au lieu de JavaScript. Chrome, le type est rapporté comme "script". Donc, cela ressemble vraiment à un bug dans Firefox. J'aimerais pouvoir poser ma propre question et fournir mon code, mais je ne suis pas autorisé à poster des questions ici, uniquement des commentaires et des réponses.


14 Réponses :


2
votes

La raison est que la fonction en-tête ne fonctionne que si elle est la première à être appelée!

Si vous mettez un echo avant, le type de contenu devient automatiquement texte / html

Essayez d'imprimer un code CSS après l'en-tête pour tester s'il fonctionne réellement.

lire Cette page Pour plus d'infos

Edit: Avez-vous changé votre message? : -)


1 commentaires

Salut mec! Oui, édité le message pour le rendre un peu plus clair. Désolé!



0
votes

Ce sonne semblable à votre serveur Web interpréte le script sous forme de fichier normal. At-il une extension .php et faire d'autres fichiers .php fonctionnent comme prévu?


1 commentaires

Salut! Ça fait bien. Tout le reste fonctionne comme un charme et mod_rewrite est activé également!



0
votes

a l'air parfaitement ok et la ligne avec le echo devrait générer définitivement un avertissement. Pourrait-il être que vous modifiez le mauvais fichier?


1 commentaires

J'ai bien peur de ne pas, c'est le premier de ma liste de contrôle à essayer :)



1
votes

Ceci est généralement causé par une erreur fatale (c'est-à-dire une erreur de syntaxe) qui entraîne l'intervalle du script avant l'exécution de l'un des codes (avant que display_errors ne puisse être défini via INI_SET () au moment de l'exécution). Essayez de changer Display_Errors dans le fichier de configuration PHP (php.ini).


3 commentaires

Effectivement nettoyé tout le fichier et il suffit d'avoir la ligne d'en-tête là-bas. Il ne veut toujours pas interpréter comme CSS.


Postez le CSS, quelque chose provoque une erreur fatale. C'est pourquoi l'instruction ECHO au bas n'a rien fait et les erreurs PHP ne sont pas affichées. Il pourrait y avoir quelque chose dans votre CSS qui enfreint le script (particulièrement vrai si vous l'avez fait écho, il est facile de manquer une citation non évaluée)


Bonjour John, a affiché le fichier complet dans le premier post, même s'il n'est qu'une ligne de CSS qui devrait être valide ...



0
votes

Vous pouvez essayer type de style de contenu: Texte / CSS

Voir ci-dessous sur le ici

La langue de style par défaut peut également être définie avec HTTP en-têtes. Ce qui précède meta La déclaration équivaut à l'HTTP Header:

Type de style de contenu: Texte / CSS

EDIT:

au lien , il est mentionné d'ajouter addTtype texte / CSS .CSS. dans le fichier de configuration Apache. Peut-être que vous pouvez donner un essai

Edit2 Recherchez les 'CSS' à ce lien . Quelqu'un avait le même problème que vous. Essayez d'envoyer l'en-tête sans le chartet

J'ai récemment eu une menace coiffeuse Problème avec Firefox et XHTML 1.0 Transitional.

Cela a fonctionné bien avec d'autres navigateurs, et aussi avec HTML 4.1.

couper une longue histoire courte, Les fichiers JS et CSS générés PHP étaient toujours rapporté par les en-têtes comme Texte / HTML, tandis que dans le HTML, ils étaient Texte / CSS et application / JavaScript; Firefox ayant été dit la page était Xhtml 1.0 est devenu anal additionnel et refusé de styler la page. (Je pense Le JS a toujours travaillé mais je l'ai réparé de toute façon.)

solution:

en-tête ('Type de contenu: Text / CSS'); et Hauteur ('Type de contenu: Application / JavaScript ');

edit 3 Il y avait un POST À propos de certaines formes qui ne soumettent aucune donnée en raison d'un utilitaire appelé AVG Linkscanner. Depuis que vous avez réinstallé Apache + PHP et que je suppose que vous n'avez pas réinstallé le système d'exploitation, vous pouvez peut-être enquêter sur cela / essayer en tournant des utilitaires / plugs-ins.


3 commentaires

Nan! N'a rien changé j'ai peur :(


Re-bonjour. J'ai essayé d'envoyer juste le type de contenu sans préparation de caractères plus tôt. Rien de nouveau. Merci pour ton aide!


La "langue de la feuille de style par défaut" s'applique au style attribut , les éléments de style prennent leur langue à partir de l'attribut de type requis, les feuilles de style liées prennent leur choix à partir de l'en-tête HTTP.



1
votes

Peut-être que la fonction en-tête () code> est désactivée dans votre configuration?

Test: p>

print ini_get('disable_functions');


0 commentaires

1
votes

Il peut être intéressant de vérifier avec Curl pour voir quels horizons sont en cours d'envoi .

Essayez ceci à partir d'une ligne de commande et vérifiez le "Text / CSS": P>

print_r(ob_list_handlers());


0 commentaires

0
votes

Guess Wild Guess: ouvrez votre fichier avec quelque chose qui afficherait tout BOM . Si vous voyez des caractères étranges avant vous avez votre problème. Vérifiez vos options d'éditeur actuelles pour enregistrer le fichier UTF-8 et le faire enregistrer sans bom.


0 commentaires

0
votes

Peut-être qu'il y a des problèmes avec la mise en cache.

Essayez ceci: p>

header('Content-type: text/css');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");

echo 'body {background-color: #000000; }';


0 commentaires


1
votes

J'ai trouvé le fichier complet est en retrait.

    <?php
    header('Content-Type: text/css; charset=UTF-8');
    echo 'body {background-color: #000000; }';
    ?>


0 commentaires


0
votes

sortie_buffering = OFF dans php.ini était la raison pour laquelle il est pourquoi il conserve l'envoi de Type de contenu = Texte / HTML . Le régler à 1 résolvez-le.


0 commentaires

0
votes

Dans mon cas, j'ai eu des difficultés pendant des heures avec mon code en-tête ("text / javascript"); , vous demandez pourquoi le type de réponse MIME n'a pas été envoyé. Le code PHP correct est en-tête ('type de contenu: texte / javascript'); . Il n'y a pas de détection d'erreur appropriée pour cette erreur de programmation dans PHP, Apache, les navigateurs ou les outils de développeur Web.


0 commentaires