Пытаясь встроить сторонний Javascript, который использует <? Js = value?>, Как я могу остановить php от разбора "<?" - PullRequest
3 голосов
/ 22 сентября 2011

Я работаю в безумном беспорядке системы CMS, где php, javascript и html находятся внутри шаблонов.Я пытаюсь добавить код со стороннего сайта для интеграции функций, но у них есть JavaScript в виде:

<script type="lib">
Hello, <?js= firstName ?>!
</script>

Интерпретатор PHP видит и делает свое дело, и, следовательно, весь шаблон ошибок,

Кто-нибудь знает, как, возможно, обернуть этот блок кода, чтобы об этом не беспокоился PHP-интерпретатор?

Заранее спасибо!

Ответы [ 4 ]

4 голосов
/ 22 сентября 2011

Если отключение коротких тегов PHP невозможно, вы можете просто вывести указанную строку с помощью PHP, чтобы получить что-то вроде этого:

Hello, <?php print "<?js= firstName ?>"; ?>!
3 голосов
/ 22 сентября 2011

В документе PHP с включенными короткими открытыми тегами интерпретатор PHP увидит <? часть тега <?js и попытается проанализировать его как PHP, что приведет к этой ошибке:

Parse error: syntax error, unexpected T_STRING in ... on line ...

Чтобы устранить проблему, отключите краткую форму (<? ?>) открытого тега PHP.

Теперь это отключит использование <? и<?= в ваших скриптах PHP.Если на вашем сайте используются только теги <?php, это безопасно.если он также использует <?, то это небезопасно, поскольку ваши сценарии больше не будут работать должным образом.

Существует два способа, которыми ваш веб-хост или системное администрирование настроит настроенный Apache для использованияPHP :

  • Apache загружает интерпретатор PHP как модуль Apache
  • Apache запускает интерпретатор PHP как двоичный файл CGI

Какое решение выбудет использоваться ниже, будет зависеть от того, как Apache запускает PHP в вашей среде *.

В файле Apache .htaccess укажите следующее:

# PHP as an Apache Module
php_value short_open_tag 0

В глобальном или локальном php.ini файл, поместите следующее:

# PHP as a CGI Wrapper
short_open_tag = Off

В любом случае вы захотите перезапустить Apache после внесения каких-либо изменений в конфигурацию, чтобы убедиться, что новые настройки выбраны.


Примечание. Если ваш сервер настроен для запуска PHP в качестве модуля Apache, у вас будет выбор: использовать файлы php.ini или Apache .htaccess.Тем не менее, если на вашем сервере PHP работает как оболочка CGI, у вас будет выбор: использовать php.ini файлы локально для изменения настроек, поскольку Apache больше не контролирует PHP.

Когда PHP работает как оболочка CGI, размещение настроек PHP в файле .htaccess приведет к ошибке сервера.

3 голосов
/ 22 сентября 2011

Отключить PHP Short-Tags , и у вас не должно возникнуть проблем.

1 голос
/ 22 сентября 2011

Вы случайно не запускаете apache?Эти файлы живут отдельно от PHP?Если это так, вы можете использовать файл .htaccess (или httpd.conf, если у вас есть права на его изменение), чтобы сделать что-то вроде этого:

<FilesMatch "\.template_file_ext">
    php_flag engine off
</FilesMatch>
...