Dependiendo del analizador php obtengo un error de sintaxis

Acabo de reducir uno de estos errores extraños que solo ocurren en ciertos entornos.

El siguiente código se analiza bien en mi instalación predeterminada de Linux php 5.3.6, en la instalación predeterminada de Windows php 5.4.3, pero falla en algunas de las máquinas de Windows que tenemos con Windows php 5.3.6.

El mensaje que recibimos es:

Error de análisis: error de sintaxis, '}' inesperado en C:\bogus.php en la línea 7

La línea 7 es el "}".

Solo puedo pensar que este error es causado por una configuración de php.ini. ¿Alguien sabe cuál es el problema?

<?php
if(!empty($data['foo'])) {
    ?>
    <div>
        <?=$data['bar'];if(!empty($data['foo'])) {?> (Foo: <?=$data['foo'];?>) <?php }?></div>
    <?php
}
?>      

preguntado el 22 de mayo de 12 a las 18:05

intente eliminar etiquetas cortas en entornos donde ocurre el problema -

Esto funciona como un encanto para mí. ¿Tiene short_open_tags habilitado en php.ini? También está mezclando múltiples declaraciones dentro del

no lo tenia habilitado. Ahora funciona si lo habilito. ¿Es una buena práctica (soy nuevo en php) tenerlo habilitado? -

3 Respuestas

Esto se ve extraño:

<?=$data['bar'];if(!empty($data['foo'])) {?>

Estas mezclando <?= con varias declaraciones. Trataría de evitar la etiqueta corta aquí si fuera usted.

Pero independientemente, creo que esto significa que las máquinas de Windows NO tienen short_open_tags habilitado en php.ini. Habilítelo y sus problemas probablemente desaparecerán.

contestado el 22 de mayo de 12 a las 18:05

Probablemente porque: 1) Tiene short_open_tags habilitados en sus máquinas Linux, y 2) esta etiqueta siempre está habilitada en PHP 5.4, independientemente de la configuración. - Emil Vikström

¡Muchas gracias! Eso fue realmente. salvavidas :-) - Edu

yo cambiaria todos esos {...} para hacerte la vida un poco más fácil:

<?php if(!empty($data['foo'])):?>
    <div>
        <?php echo $data['bar'];
         if(!empty($data['foo'])):?> 
              (Foo: <?php echo $data['foo']?>) 
        <?php endif?>
    </div>
<?php endif?>      

contestado el 22 de mayo de 12 a las 18:05

<?php
if(!empty($data['foo'])) {
    echo '<div>'.$data['bar'];if(!empty($data['foo']))echo 'Foo:'.$data['foo']; 
echo '</div>';
}
?>

Usar la función de eco

contestado el 22 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.