Aller au contenu

Bug De Php ?


Messages recommandés

Bonjour,

Je rencontre actuellement un problème bizzar sur mon DS1512+ qui m'empéche d'installer le Framework Symfony.

En cherchant un peu dans les fichiers de Symfony, je me suis rendu compte que le problème venait d'une ( ou plusieurs ) Constante pré-définies de PHP.

En effet, la constante INF ne semble pas correctement définie sur mon nas et elle est apparement indispensable au bon fonctionnement de Symfony.

Ce qui est vraiment étrange, c'est que j'ai un autre Nas (DS207) avec le même firmware (4.1) donc exactement la même version de PHP et d'apache et pourtant, je n'ai pas ce problème...

Pour savoir si vous avez ce problème sur votre environnement, utilisez ce script :

<?php

$test = INF;

var_dump($test);

<?

Si ce script affiche "float(0)" vous avez le même problème, si il affiche float(INF) c'est ok.

Bref, si vous avez la moindre idée de la façon de corriger ce problème, n'hésitez pas à repondre :P.

Merci et bonne soirée

Modifié par niko38190
Lien vers le commentaire
Partager sur d’autres sites

Alors j'ai déjà essayé de mettre ces lignes au début de mon script de test :

ini_set('INF', 'test');

et

define('INF' , 'test');

Mais ça n'a absolument rien changer, la sortie affiche toujours float(0).

Et pour définir les constante directement depuis le php.ini je ne sais pas vraiment comment m'y prendre, je ne sais même pas si c'est possible...

Un mec semble avoir le même problème ici :

http://stackoverflow...-has-value-zero

Ici aussi : https://groups.google.com/forum/?fromgroups=#!topic/silex-php/peZqxXhC0yw

Modifié par niko38190
Lien vers le commentaire
Partager sur d’autres sites

Bon, je viens de faire un reset de mon synology et j'en ai profité pour mettre à jour le firmware en 4.1-2661.

Hélas, j'ai toujours le même problème, impossible d'installer Symfony2...

Si quelqu'un possédant un DS1512+ passe sur ce Topic, merci de faire le test avec mon script, ça me rassurerais de savoir que je ne suis pas le seul à avoir ce bug...

Lien vers le commentaire
Partager sur d’autres sites

Le script de Mike913 me renvoi "INF" donc il semblerait que cette constante soit défini.

Le problème c'est que c'est la seule différence que j'ai trouvé entre mon DS1512+ et mon DS207 qui pourrait peut-être expliquer les problèmes rencontrés.

Pour info, voici le message d'erreur que j'ai à l'installation de Symfony :

preg_match(): Compilation failed: unmatched parentheses at offset 41 in /volume2/web/Symfony/app/cache/dev/appdevUrlMatcher.php line 154

Ligne 154 sur le DS1512+ (celui qui bug):


if (0 === strpos($pathinfo, '/_configurator/step') && preg_match('#^/_configurator/step(?:/(?<index>[^/]+))?)?$#s', $pathinfo, $matches)) {

Sur mon DS209 cette ligne est différente est ne pose pas de probléme :

if (0 === strpos($pathinfo, '/_configurator/step') && preg_match('#^/_configurator/step/(?<index>[^/]+)$#s', $pathinfo, $matches)) {

Le fichier appdevUrlMatcher.php est généré par Symfony au moment de l'installation et comme vous pouvez le voir ici, les regexp générés sont un peu différentes.

Au début je pensais que c'était à cause d'une version trop veille de PCRE sur mon DS1512+, mais pourtant c'est exactement la même version qui équipe le DS209...

J'en ai donc conclu en cherchant un peu sur la toile que celà pouvait étre lié à cette constante prédéfinie.

Je rappel que mes 2 syno utilisent la version 4.1-2661 de DiskStation.

Voici leurs phpinfo() :

DS1512+ : http://nikoserveur.com/test.php

DS209 : http://nikoserveur.com:2000/test.php

Merci beaucoup pour votre aide :)

Modifié par niko38190
Lien vers le commentaire
Partager sur d’autres sites

Le script de Mike913 me renvoi "INF" donc il semblerait que cette constante soit défini.

Justement non, PHP retourne le nom de la constante si elle n'est pas définie.

Par exemple :


var_dump('NASFORUM');

retourne

string( "NASFORUM"

Maintenant si la constante INF doit retourner un float(0), il suffit de la définir.

Lien vers le commentaire
Partager sur d’autres sites

Dans la ligne qui plante, il y a une parenthèse fermante de plus qu'il n'y en a d'ouvrante. D'ou l'erreur.

Par contre je ne suis pas un expert des expressions régulières donc je ne me sens pas en mesure de débogger cette ligne... Je vais chercher un peu quand même

Edit : en attendant essaye de remplacer la ligne qui plante par celle qui fonctionne...

Modifié par psuken
Lien vers le commentaire
Partager sur d’autres sites

Le problème psuken c'est que toutes les Regexp générés par Symfony posent problème, c'est pour cette raison que je veux trouver le fond du problème afin de toutes les régénérer correctement et non pas seulement celle-ci.

Sinon PiwiLAbruti, la constante INF est bien définie mais pas correctement, enfin pas comme sur la majorité des environnement qui n'ont pas de problème avec Symfony...

Et comme tu le sais surement, ce n'est pas vraiment correcte (Voir peut-être impossible) de redéfinir une constante.

Edit : J'ai déjà essayer de remplacer la regexp de mon 1512+ par celle de mon DS209 et en effet ça ne pose plus de problème, mais le problème c'est que je dois faire ça pour chaque regexp, et j'aurai ce problème à chaque fois que symfony m'en générera une...

J'essai donc plutôt de trouver la raison des cette "mauvaise génération de regexp" plutôt que de réparer les dégâts.

@Mike913 : Le DS1512+ et le DS712+ sont très proches, je pense que si tu essaies d'installer Symfony sur ton DS712+ tu seras confronté au même problème que moi, ça peut-être intéressant de vérifier...

Modifié par niko38190
Lien vers le commentaire
Partager sur d’autres sites

Et comme tu le sais surement, ce n'est pas vraiment correcte (Voir peut-être impossible) de redéfinir une constante.

Je ne parlais pas de la redéfinir, mais de simplement la définir.

Si "INF" est retourné, c'est que la constante du même nom n'est pas définie. D'où la possibilité de faire un define('INF',0);

Lien vers le commentaire
Partager sur d’autres sites

Le problème c'est que INF est définie mais vaut 0 sur mon DS1512+, donc impossible de lui donner une valeur.

Mais bon au final et comme dit un peu plus haut, je ne sais pas vraiment si mon problème de regexp est directement lié à ce problème de constante. C'est possible qu'il n'y ai aucun rapport entre les deux mais en tous cas j'ai constaté dans mon entourage que tous les environnement PHP qui affiche INF = float(0) rencontre l'erreur des regexp mal générées dans Symfony.

Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai trouver un moyen de contourner le problème :).

Pour ceux qui souhaitent installer Symfony sur un Nas rencontrant ce problème, il faut éditer le fichier RouteCompiler.php qui se trouve a l'emplacement suivant : Votre-dossier-webDossier-de-SymfonyvendorsymfonysymfonysrcSymfonyComponentRoutingRouteCompiler.php

Trouvez la ligne suivante (ligne 71 dans la version actuelle de Symfony2) :


 // find the first optional token

 $firstOptional = INF;
et remplacez la par :

 // find the first optional token

 $firstOptional = -log(0);

Videz le dossier appcache et recommencez l'installation, tout devrait fonctionner.

Lien vers le commentaire
Partager sur d’autres sites

Justement non, PHP retourne le nom de la constante si elle n'est pas définie.

Par exemple :


var_dump('NASFORUM');

retourne

string( "NASFORUM"

Maintenant si la constante INF doit retourner un float(0), il suffit de la définir.
Justement on ne peut pas la redéfinir puisqu' elle est deja définie voir mon script, et elle ne renvoie pas un float() mais une chaine de caractéres: 'INF'
<?php

if (!defined('INF'))

{

//define('INF', 1.8e307);

echo 'non défini<br>';

}

else

{

echo -log(0).'<br>'; // renvoie 'INF'

}

?>

Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai trouver un moyen de contourner le problème :).

Pour ceux qui souhaitent installer Symfony sur un Nas rencontrant ce problème, il faut éditer le fichier RouteCompiler.php qui se trouve a l'emplacement suivant : Votre-dossier-webDossier-de-SymfonyvendorsymfonysymfonysrcSymfonyComponentRoutingRouteCompiler.php

Trouvez la ligne suivante (ligne 71 dans la version actuelle de Symfony2) :


// find the first optional token

$firstOptional = INF;
et remplacez la par :

// find the first optional token

$firstOptional = -log(0);

Videz le dossier appcache et recommencez l'installation, tout devrait fonctionner.
Bonjour, Je me suis demandé pourquoi un script veux connaitre la valeur de l' infini, puis j' ai compris qu'il voulait savoir la valeur maximum que peux prendre un float() et il serait plus judicieux de définir $firstOptional avec une valeur finie.
 // find the first optional token

 $firstOptional = 1.8e307;

1.8e307 étant proche de la valeur maximum pouvant être attribuée à un float()

Lien vers le commentaire
Partager sur d’autres sites

Voici la réponse de Synology

Hi Nicolas,

Thanks for your feedback.

Your issue is reported to our engineer for the future checking and fixing.

To thank you, we would like to send you a special gift from Taiwan. If you don't mind, please kindly provide your postal address and telephone number for delivery and we will arrange the parcel for you immediately:

Ils vont surement m'envoyer un Nas tout neuf ( l’espoir fait vivre :) ).

Lien vers le commentaire
Partager sur d’autres sites

Merci de tout lire : ;)

C' est plutôt doit qui devrait tout lire, car INF est bien défini dans les 2 Cas.

<?php

if (!defined('INF'))

{

//define('INF', 1.8e307);

echo 'non défini<br>';

}

else

{

echo -log(0).'<br>'; // [b]renvoie 'INF' et prouve bien que INF est déjà défini[/b]

}

?>

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.