Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Hello,
Je m'arrache les cheveux avec un truc, si certains ont une idée.
Sur une seule machine j'ai installé la dernière version de ZendServer CE (la 5), je récupère exactement le même projet via SVN que sur les autres machines de dev, mais j'ai un problème que je ne comprend pas.
Sur cette machine donc, j'obtiens lorsque j'envoie une réponse JSON, ceci :
{"data":"{\"id\":null,\"country\":null,\"login\":\"utilisateur\",\"password\":\"mot de passe\",\"email\":null,\"active\":false,\"activationCode\":null,\"roleId\":null,\"_notification\":{\"_errors\":[]}}","errors":{"authLogin":{"authFailed":"Echec de l\u2019authentification!"}}}<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <p>Additionally, a 400 Bad Request error was encountered while trying to use an ErrorDocument to handle the request.</p> </body></html>
Ce que fait ma vue:
<?php $this->response->setHeader('Content-Type', 'application/json'); if ($this->account->getNotification()->hasErrors() || false === $this->authResult) : $this->response->setHttpResponseCode(400); // bad request echo $this->json(array( 'data' => $this->account->toJson(), 'errors' => array('authLogin' => array( 'authFailed' => $this->_('global.auth.errors.authFailed') )) )); else : $this->response->setHttpResponseCode(200); // ok echo $this->json(array( 'data' => $this->account->toJson(), 'redirect' => $this->url(array( 'controller' => 'index', 'action' => 'index' ), 'default') )); endif;
Sachant que ça fonctionne sur toutes les machines sauf celle-ci, il me rajoute le html avec cette erreur 400 tout seul. J'ai regardé dans les conf, je n'ai pas de ErrorDocument de configuré.
J'ai aussi comparé les fichiers httpd.conf et php.ini avec une autre machine de dév sur laquelle ça fonctionne et je ne vois rien de particulier
Les autres machines de dév. ont un environnement tel qu'il est par défaut à l'installation de Zend Server CE 4.
Les alias sont configurés exactement de la même manière :
<Location /test> SetEnv APPLICATION_ENV development # Zend rewrite rules RewriteEngine On RewriteBase /test RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] Order deny,allow Allow from all </Location> Alias /test "D:\PHPServer\Zend\Apache2\htdocs\test\www"
Je ne sais franchement pas quoi faire !
Des idées ?
Merci pour votre aide,
A+ benjamin.
Hors ligne
Perso, je n'utilise pas ZServer CE.
Mais, je te conseille d'utiliser un outil comme firebug (extension firefox) ainsi, tu vois exactement les requêtes/réponses avec entêtes.
Exmple très bête, je me suis arracher les cheveux plusieurs a cause de cette ligne de mon fichier application.ini
phpSettings.default_charset = 'utf-8'
Cette ligne posait des problèmes avec IE. Une requête ajax fesait que IE affichait un code d'erreur incomprenhensible. En résumé, ce sont les simples guillemets qui posaient problème.
Tout ca pour dire, que ca tient defois à un tout petit détail qui ne saut pas forcément aux yeux
Désolé de ne pouvoir t'aider.
Une pistes au pif : ZEndCE réagit différemment de tes autres machines (apache ?). Pt être que tu envois tes données JSON mais avec un code 400 et que ton ZendCE rajoute du html à cause de ce code
Hors ligne
nORKy a écrit:
Une pistes au pif : ZEndCE réagit différemment de tes autres machines (apache ?). Pt être que tu envois tes données JSON mais avec un code 400 et que ton ZendCE rajoute du html à cause de ce code
Oui exactement, je suppose que le serveur essaie de "handle" l'erreur mais ne peut pas, seulement je ne sais pas où je maitrise ce fonctionnement d'apache.
Sur les autres machines ce n'est pas la même version de Zend Server, mais par contre le projet est identique en tous points (fichiers ini etc., ça vient du svn). Mais je n'ai pas trouvé de différences entre les php.ini et les httpd.conf et malheureusement mes compétences serveur s'arrêtent là :p
Je soupçonne très fortement le serveur de réagir à mon code de réponse.
Hors ligne
Beh, t'as pas le choix, faut que tu lises tous tes fichiers de conf jusqu'à trouvé une ligne qui t'es inconnus.
Moi, j'utilise les filtres pour modifier des adresses http dans des cas précis sur des reverses proxy. Je modifie la page web à la volée, donc, je suppose que les filtres peuvent aussi rajouté à la suite du document
C'est *Filters* dans les fichiers de conf.
Autre piste : Si ton serveur réagit en fonction d'entête, il est possible qu'un "setenvif" traine qqpart (pour tester le code dans les headers)
sinon, comme tu dis, faut trouver un addHandler
Ou alors, carrément un module apache fournis par ZCE
Dernière modification par nORKy (03-03-2010 08:29:53)
Hors ligne
Pages: 1