2008-11-04 6 views
2

J'ai une application que j'écris en PHP5, en utilisant le framework CodeIgniter. Je l'ai exécuté sur Windows (en utilisant Xampp) et Ubuntu (en utilisant Apache standard, PHP, pile MySQL).PHP SimpleXML, CodeIgniter et Apache avec Suhosin

J'ai un formulaire, qui prend XML, l'analyse (en utilisant simpleXML) et publie les résultats dans une base de données.

Sous Windows - pas de problème, fonctionne comme prévu.

Sous Linux - gros problème. Il a des erreurs.

J'ai vérifié le code XML, et ça va. J'ai supprimé une grande partie du code XML, et il semble que ce soit OK.

Je pense que c'est lié à la taille de la chaîne XML affichée à partir du formulaire, mais je ne suis pas sûr. Encore une fois, sous Windows, c'est OK - sous Linux, il y a des erreurs.

La taille des données affichées dans le formulaire est ~ 160k (oui, c'est beaucoup de texte, mais il est automatisé - ET il sera finalement d'environ 200k).

L'erreur est ci-dessous.

Toute aide très appréciée.

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /var/www/ci/system/application/controllers/system.php:49 Stack trace: #0 /var/www/ci/system/application/controllers/system.php(49): SimpleXMLElement->__construct('') #1 [internal function]: System->add_system() #2 /var/www/ci/system/codeigniter/CodeIgniter.php(233): call_user_func_array(Array, Array) #3 /var/www/ci/index.php(115): require_once('/var/www/ci/sys...') #4 {main} thrown in /var/www/ci/system/application/controllers/system.php on line 49

ligne 49 se présente comme suit:

$xml = new SimpleXMLElement($this->input->post('form_systemXML'));

EDIT - FIXES

trouvés la question. Suhosin est installé sur Ubuntu. dans le fichier /etc/php5/apache2/conf.d/suhosin.ini, j'ai activé la ligne suhosin.post.max_value_length = 65000 et changé la valeur à 195000. Redémarré Apache, et tout bon. Merci pour les pointeurs les gars.

Répondre

0

Vous avez peut-être déjà essayé cette approche, mais avez-vous vérifié les fins de ligne? \ r \ n (DOS) par opposition à \ n (UNIX)? Il se peut que les expressions régulières utilisées par simpleXML puissent être confondues par elles sur différentes plates-formes ...

+0

SimpleXML ne se soucie pas des fins de ligne utilisés. $ a1 = " \ "; –

+0

$ x = new SimpleXmlElement ($ a1); print_r ($ x); SimpleXMLElement Object ( [balise1] => SimpleXMLElement Object ( [tag2] => SimpleXMLElement Object ( [0] => ) ) ) –

+0

essayer de Nice. La chaîne XML _is_ générée dans Windows, j'ai donc remplacé toutes les fins de ligne (unix2dos -u -o filename) dans Ubuntu. N'a fait aucune différence. –

1

Veuillez vérifier votre configuration PHP sur la machine Linux et comparez-la à vos paramètres Windows. En particulier, les paramètres suivants:

  • memory_limit
  • post_max_size
  • magic_quotes_gpc
  • max_input_time

Peut-être que vous pouvez faire une décharge des données affichées dans le script

print_r($_POST); 

pour voir quelles données je s vraiment venir dans le serveur.

+0

memory_limit: linux 16m, Windows 32m post_max_size: linux 8m, Windows 16m Vous devez modifier les paramètres Linux et voir ce qui se passe. –

+0

Damn - mis à jour et redémarré Apache (et revérifié avec phpinfo()) - pas de changement. Même erreur –

+0

J'ai essayé d'ajouter print_r ($ _ POST), mais tout ce qui revenait était Array ([submit] => Submit) Avec le message d'erreur existant. Il devrait y avoir une variable pour "form_systemXML". Pas sûr ... peut-être config apache? –

0

Mise à jour - trouvé ceci dans syslog

4 novembre 21:53:32 ubu804 suhosin [7944]: ALERTE - Demande configuré limite de longueur de valeur de variable dépassé - a chuté variable 'form_systemXML' (attaquant « 127.0.0.1 ', fichier' /var/www/ci/index.php ')

Je regarde la configuration apache, maintenant.