2009-10-12 8 views
2

J'ai récemment effectué une mise à niveau vers xampp v1.7.2 qui a jeté PHP 5.3 sur moi. Avec cela tous mes httpd.confs et php.ini ont été effacés (j'avais pris pour acquis que cette version sera une mise à niveau comme toutes les versions antérieures de xampp). Quoi qu'il en soit, il m'a fallu du temps pour reconfigurer tous les services - mais maintenant j'ai rencontré un drôle de problème.Syntaxe conditionnelle alternative (if-else) échouant sur PHP 5.3.0 (xampp)

Ce CMS auto-écrit qui est utilisé dans mon lieu de travail utilise beaucoup de la syntaxe conditionnelle alternative if-else, à savoir

if(condition): ?> 
    <some html /> 
<?php else: ?> 
    <some other html /> 
<?php endif; 

Ceci fonctionnait très bien avec PHP 5.2.x qui est venu avec xampp 1.7.1 - et maintenant tout d'un coup ces blocs de code produisent cette erreur:

Parse error: syntax error, unexpected T_ELSE in ...

Je n'ai pas modifié mon script de quelque façon - même utilisé pour travailler absolument sans accroc en PHP 5.2.x.

Donc ma question est, est-ce que PHP 5.3 permet de telles conditions alternatives? Ou dois-je activer une option cachée dans mes fichiers de configuration?

Veuillez noter que je n'utilise pas de shorttags - ils ne sont donc pas un problème ici.

+0

on dirait que vous parlez la mise à niveau dans le cadre d'un système d'emballage ou la distribution? Qu'est ce que tu utilises? –

+0

Pour le développement, j'utilise la pile LAMP appelée xampp (http://www.apachefriends.org/en/index.html). C'est ce que cette nouvelle version de PHP est venu avec. –

Répondre

4

Bien que la syntaxe if/else n'ait pas été modifiée dans 5.3, beaucoup d'autres parties de la syntaxe ont. Vous devez vérifier les lignes juste avant l'instruction else en question pour voir si l'une des autres nouvelles fonctionnalités de syntaxe est source de confusion pour l'analyseur.

Si vous ne pouvez pas savoir où le problème est, vous pouvez toujours commencer à supprimer systématiquement les lignes de code jusqu'à ce que vous vous retrouvez avec les trois lignes suivantes:

<?php if(condition): ?> 
<?php else: ?> 
<?php endif ?> 

Mise à jour: Vous avez vraiment devrait tester votre code avec short_open_tag activé, car l'erreur de syntaxe que vous voyez est ce que vous obtiendriez si vous aviez ce code quelque part:

<? if(condition): ?> 
<?php else: ?> 
<?php endif ?> 
+1

Essayé le même ... et toujours obtenir la même erreur sur la ligne 'else'. –

+1

Vous aviez raison! Il a recommencé à fonctionner lorsque j'ai activé short_open_tags On. Donc je dois avoir mal orthographié le

+0

BTW, pouvez-vous s'il vous plaît me diriger vers une page décrivant tous les changements de syntaxe dans ce ver PHP? Merci. –

0

Oui, PHP 5.3 autorise alternative syntax pour les structures de contrôle, y compris vos instructions conditionnelles.

Je suggère d'essayer de déboguer en remplaçant la syntaxe alternative par une syntaxe régulière en un ou deux endroits pour voir si elle résout le problème. Si c'est le cas, alors vous savez avec certitude quel est le problème.

+0

Droit! Je ferai la même chose et reviendrai à vous sous peu ... :) –

+0

Chose drôle .. si je modifie le bloc de code à la syntaxe standard, c'est-à-dire si (état) echo '' - ça marche !!! Mais si c'est le chemin à parcourir, je dois m'asseoir et modifier des milliers de lignes de code ...: S –

+0

Pourriez-vous poster un extrait du code où vous l'avez modifié et cela fonctionne? Incluez également un peu avant/après. Peut-être que je serai capable de repérer quelque chose. –