XHP с PHP 5.4 не влияет на парсер, когда скрипт вызывается через Apache

Недавно я собрал XHP 1.5 из исходного кода и установил его на существующий веб-сервер. Веб-сервер работает под управлением PHP 5.4.32, Apache 2.2.15 вызывает PHP с использованием mod_php (не fastcgi), CentOS 6.5. Весь наш существующий код PHP (который не зависит от нового синтаксиса XHP) по-прежнему прекрасно работает, включая другие расширения, такие как Imagick, curl и JSON.

Использование тестового файла на основе Установка XHP тестовое задание:

<?php
echo "XHP!\n";
exit;
echo <a/>;
?>

Это работает, как и ожидалось, при запуске из командной строки. (Он печатает XHP!, Затем завершает работу. Он не приводит к сбою синтаксического анализатора, но также не отображается, поскольку мы не загружаем зависимости.)

Когда я получаю этот скрипт через Apache, я получаю ошибку

Parse error: syntax error, unexpected '<' in /var/www/html/bloom/play.php on line 4

Получение phpinfo () через Apache показывает, что XHP загружен, extension_loaded («xhp») через Apache возвращает true.

Что может быть причиной того, что XHP работает из командной строки, но не работает (даже не анализирует) при запуске через Apache?

2

Решение

Одной из возможных причин является различие в версиях PHP, тем более что вы создаете XHP из исходного кода. Я столкнулся с похожим странным поведением на общем хосте, на котором установлено несколько версий PHP. Сравните версию PHP, сообщаемую Apache (посмотрите на вывод phpinfo ()), с версией, которую вы используете в командной строке. php -v, Если есть разница, это может быть одним из объяснений проблемы, с которой вы столкнулись.

0

Другие решения

Изучив более подробную информацию о том, чем мой рабочий сервер (не работает), отличается от моих тестовых серверов (работает), я обнаружил, что на всех серверах установлен APC 3.1.15, но на производстве кэш кода операции APC был отключен в /etc/php.d/apc.ini:

# BAD NEWS
apc.enable_opcode_cache=0

Как оказалось, это не то, что мы хотели по несвязанным причинам производительности.

Включение кэша кода операции APC, изменив эту строку в /etc/php.d/apc.ini и перезапуск Apache заставил XHP немедленно начать работать:

# WORKING
apc.enable_opcode_cache=1

Я также смог решить проблему, полностью удалив APC (хотя в моем приложении это не практично).

Это также объясняет, почему он работает из CLI, а не из Интернета — все мои серверы имеют apc.enable_cli = 0, поэтому APC не будет мешать XHP из CLI.

0

По вопросам рекламы [email protected]