web-dev-qa-db-fra.com

PHP echo vs PHP balises courtes

Sont-ils égaux en sécurité? J'ai été informé que l'utilisation

<?=$function_here?>

était moins sûr et ralentissait le temps de chargement des pages. Je suis strictement partisan de l'utilisation de l'écho.

Quels sont les avantages/inconvénients?

60
homework

<? et <?= sont appelées balises ouvertes courtes et ne sont pas toujours activées (voir short_open_tag directive) avec PHP 5.3 ou inférieur (mais depuis PHP 5.4.0, <?= est toujours disponible).

En fait, dans le fichier php.ini-production fourni avec PHP 5.3.0, ils sont désactivés par défaut:

$ grep 'short_open' php.ini-production
; short_open_tag
short_open_tag = Off

Donc, les utiliser dans une application que vous souhaitez distribuer n'est peut-être pas une bonne idée: votre application ne fonctionnera pas si elle n'est pas activée.

<?php, de l'autre côté, ne peut pas être désactivé - il est donc plus sûr d'utiliser celui-ci, même s'il est plus long à écrire.


Sauf que les balises ouvertes courtes ne sont pas nécessairement activées, je ne pense pas qu'il y ait beaucoup de différence.

96
Pascal MARTIN

Echo est généralement mieux à utiliser car ...

  1. Il prend en charge un bon style de programmation.
  2. Il ne peut pas être désactivé dans php.ini (les balises courtes peuvent l'être)
  3. Les balises courtes seront supprimées dans PHP 6)

Mais, ils sont généralement les mêmes. Voir également:

  1. Les balises courtes PHP sont-elles acceptables?
  2. En quoi l'écho et l'impression diffèrent-ils en PHP?
32
carl

Outre tout le débat semi-religieux sur la question de savoir si l'utilisation de balises courtes est une bonne idée et si elle doit ou non être considérée comme obsolète, la question initiale était de savoir dans quelle mesure ils étaient sûrs ou dangereux.

En termes simples, si vous utilisez des balises courtes sur un serveur qui ne les prend pas en charge, des parties de votre code PHP peuvent être exposées, ce qui peut être considéré comme une vulnérabilité de sécurité.

19
Frank

http://php.net/manual/en/language.basic-syntax.phpmode.php déclare:

À partir de PHP 5.4, la balise d'écho courte est toujours reconnue et valide, quel que soit le short_open_tag réglage.

short_open_tag Off ou On n'a plus d'importance.

Alors maintenant, vous pouvez, sans souci, mettre des balises comme celle-ci dans vos modèles:

    <?= (($test) ? "val1" : "val2") ?>

C'est officiel maintenant, le "short echo tag" est quelque chose de très différent du "short tag".

11
Blouarf

Juste pour ajouter une autre source de PSR: http://www.php-fig.org/psr/psr-1/

Le code PHP DOIT utiliser les balises longues ou les balises à écho court; il NE DOIT PAS utiliser les autres variantes de balises.

en précisant:

 <?php ?> and <?= ?>
4
leopold

Alors pourquoi ne suppriment-ils pas simplement l'option de désactiver la balise ouverte courte et de la laisser activée par défaut.

C'est une décision TRÈS dangereuse de PHP. La raison en est que si vous placez votre code existant contenant des balises courtes sur un serveur PHP6 et que quelqu'un consulte cette page, il obtiendra le code brut téléchargé sur son navigateur que vous pourrez visualiser. Cela pourrait sérieusement tuer PHP.

0
Ritey