2

最近、XHP 1.5 をソースからビルドし、既存の Web サーバーにインストールしました。Web サーバーは PHP 5.4.32、mod_php (fastcgi ではない) を使用して PHP を呼び出す Apache 2.2.15、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 

Apache 経由で phpinfo() を取得すると、XHP がロードされていることが示され、Apache 経由で extension_loaded("xhp") を実行すると true が返されます。

XHP がコマンド ラインから動作するのに、Apache 経由で実行すると動作しない (解析すらしない) 原因は何ですか?

4

2 に答える 2

0

本番サーバー (動作していない) とテスト サーバー (動作している) の違いを詳しく調べたところ、すべてのサーバーに APC 3.1.15 がインストールされていることがわかりましたが、本番環境では、APC の opcode キャッシュが無効になっていました/etc/php.d/apc.ini

# BAD NEWS
apc.enable_opcode_cache=0

たまたま、パフォーマンス上の理由から、これは私たちが望んでいたことではありません。

この行を変更して Apache を再起動することにより、APC のオペコード キャッシュをオンにする/etc/php.d/apc.iniと、XHP がすぐに機能し始めました。

# WORKING
apc.enable_opcode_cache=1

また、APC を完全にアンインストールすることで問題を解決することもできました (ただし、これは私のアプリでは実用的ではありません)。

これは、Web からではなく CLI から機能した理由も説明します。すべてのサーバーに apc.enable_cli=0 があるため、APC は CLI からの XHP に干渉しません。

于 2014-09-29T20:57:49.683 に答える
0

考えられる理由の 1 つは、特に XHP をソースからビルドしているため、PHP のバージョンの違いです。複数のバージョンの PHP がインストールされている共有ホストで、同様の奇妙な動作に遭遇しました。コマンド ラインで使用しているバージョンに対して、Apache によって報告された PHP のバージョン (phpinfo() の出力を参照) を比較しますphp -v。違いがある場合は、それが問題の 1 つの説明である可能性があります。

于 2014-09-22T19:24:30.067 に答える