2009-07-30 7 views
0

J'utilise PHP + curl pour récupérer un fichier XSL, mais d'abord je veux faire une validation minimale que le fichier est vraiment un fichier XSL.En-têtes HTTP reçus incorrects/inattendus pour le type de fichier XSL

Je m'assure que le fichier existe, a le code d'état 200 OK, et qu'il a l'extension de fichier correcte, mais ensuite je veux vérifier l'en-tête pour le Content-Type. Je fais cela en utilisant la fonction curl_getinfo(). Tout va bien.

Mais les fichiers XSL renvoient toujours "application/xml" ou "text/xml" comme type de contenu, qui est pour les fichiers XML. Je crois qu'un en-tête XSL devrait être "application/xslt+xml". Alors, que se passe-t-il ici et comment puis-je m'assurer que c'est un document XSL?

Répondre

0

Vous pouvez vérifier l'espace de noms XSLT dans le fichier. Si la version PHP> = 5.1.2, utilisez SimpleXMLElement::getNamespaces()

+0

Ainsi, une requête exécuté de DOMXPath pour xmlns: xsl = "http://www.w3.org/ 1999/XSL/Transformer "??? réellement de la mémoire Je pense que les éléments d'interrogation de domxpath avec un deux-points dans lui comme xmlns: xsl ne fonctionnera tout simplement pas? (Parce que personne ne l'a mis à jour depuis très longtemps!) Ce qui signifie que je devrais faire une expression régulière pour le trouver ... bugger! Y a-t-il un autre moyen de le faire? – EddyR

+0

... ou trouver l'élément racine xsl comme @andygeers suggère d'être plus facile? – EddyR

+0

@EddyR: domxpath prend en charge l'espace de noms, regardez la fonction 'registerNameSpace()'. Vous devez enregistrer le préfixe d'espace de noms "xsl" avant la requête, mais cela fonctionnerait. – Tomalak

0

Utilisez-vous ceci pour accéder à des sites tiers ou à un site que vous configurez vous-même? Si c'est votre propre site, vous devez configurer Apache pour qu'il serve les types MIME appropriés en fonction de l'extension du fichier.

S'il s'agit de sites tiers, je ne suis pas sûr que vous puissiez compter sur les types MIME, car ils peuvent servir ce qu'ils veulent. Le meilleur pari est probablement d'obtenir juste les premières lignes du fichier et de vérifier que l'élément racine est xsl.

0

approche différente, pour PHP 5:

  1. Vous pouvez essayer de charger la feuille de style dans un XSLTProcessor. Peut-être une exception est levée si la feuille de style est incorrect
  2. (meilleure à mon humble avis) Validate la feuille de style XSL contre son schéma
+0

Merci les gars, je ne connaissais aucun de ceux-ci. Je vais les essayer tous demain. – EddyR

+0

@streetpc - Vous n'êtes pas sûr de la chose du schéma xsl ... existe-t-il un schéma par défaut si vous n'en référencez pas un? Aussi je viens de vérifier l'espace de noms xsl et je ne savais pas qu'il existe des versions 1 et 2. Je pense que j'ai seulement utilisé la version 1. Lequel dois-je utiliser et pourquoi? – EddyR

+0

J'ai décidé que cela devrait être une nouvelle question de validation de xsl puisque nous devons quand même charger tout le contenu du fichier. La question actuelle a été prise aussi loin que possible. Merci! – EddyR

Questions connexes