Тег <? Неполадка в PHP

Я работаю с устаревшим кодом, который у кого-то ушел, и это моя задача – повторно развернуть код. Я использую Windows Server 2003, Apache 2.0.63 и PHP 5.2.10.

Это не работает. По крайней мере, не так, как я ожидал, что это сработает. Назовите это ошибками, если хотите.

При проверке у меня возникло подозрение, что этот код (который появляется много раз в приложении) является виновником.

     & $ This->

Чтобы проиллюстрировать проблему, я воспроизвожу этот код:

     <? PHP
        phpinfo ();
        // $ variable = & $ this-> request;
     ?>

Вышеприведенный код выполнен красиво и, как ожидалось. Однако, если я изменил код на:

     <?
        phpinfo ();
        // $ variable = & $ this-> request;
     ?>

Код неверно работает, и вместо этого выдает этот результат на экране, что, конечно, совершенно нежелательно и неожиданно.

     запрос;  ?>

Теперь код завален таким же кодом, как и выше, и, таким образом, приложение теперь производит вывод на экране, подобном этому:

     запрос;  $ user = & $ this-> user;  // Это комментарий return false;  ?>

для кода, который читается как:

     <?
         $ request = & $ this-> request;
         $ user = & $ this-> user;
         // Это комментарий
         return false;
     ?>  

Я пытался изменить все <? с <? php всякий раз, когда & $ this-> возвращает свою уродливую голову, но большую часть времени вместо этого вводит новую ошибку.

Я переустановил PHP и Apache, даже используя другую версию PHP (5.2.6), и это все равно не сработает. Я развернул код в своем локальном хосте (Mac OS X, PHP 5.2.8 и Apache 2.0.63), и он работал без хлопот.

Пожалуйста, никому, никакого просветления будет более чем достаточно.

В php.ini вам необходимо установить следующую директиву:

short_open_tag = On 

Из руководства :

Указывает, разрешена ли короткая форма ( <? ?> ) Открытого тега PHP …

Если у вас есть время на ваших руках, вы можете захотеть заменить все те короткие теги ' <? 'с полноформатными <?php , для лучшей переносимости (см., что только что произошло с вами? 🙂

моя рекомендация – не использовать открытые теги, потому что это может помешать кодам <?xml . У меня также была эта проблема раньше, просто замените все <?php на <? , а затем снова все <? до <?php .

Таким образом, вы не получите никаких

 <? <-- one space after the '?' 

а также

 <?php <-- one space after the 'p' 

надеюсь, это поможет …

Если вы хотите использовать короткие теги: ("<?")

они должны быть включены в php.ini. См. Эту ссылку.