2

Apache Web サーバーで 1 つの EC2 Linux サーバーを管理する AWS Elastic Beanstalk for PHP を使用しています。

管理コンソールを介して別のバージョン (すべての php スクリプトを含む zip ファイル) をデプロイすると、奇妙な状況に陥ることがあります。

場合によっては、以前はすべて機能していたスクリプトとまったく同じバージョンをデプロイしていても、一部のスクリプトが突然機能しなくなります。別のバージョン (同じスクリプト、同じコンテンツ) を再度デプロイすると、突然、すべてが正常に機能するようになります。

問題のあるサービスの例:

<?php
// dynamically loads needed classes
    function __autoload($class_name) {
        include $class_name . '.php';
    }
    $response = new Response();

    $response->data = array('platform_version' => Configuration::PLATFORM_VERSION);
    die(json_encode($response));
?>

通常、このスクリプトは json オブジェクトを返します。何も変更せずにバージョンをデプロイした後、このスクリプトは何も返しません。エラーが発生したかどうかを確認する方法はありますか?

ところで、Apache の application_access_log でサービスへの呼び出しが返され、ステータス 200 が返されているのを確認できます。

EDIT: Webサーバーのエラーレベルを変更した後、 application_error_log に興味深い情報が表示されるようになりました:

*[Mon Nov 05 17:19:44 2012] [error] [client 10.210.159.209] PHP 致命的なエラー: require_once() [function.require-once]: /var/www/html/InstallerLog でクラス応答を再宣言できません。 php on line 12 [Mon Nov 05 17:19:44 2012] [error] [client 10.210.159.209] PHP Stack trace: [Mon Nov 05 17:19:44 2012] [error] [client 10.210.159.209] PHP 1 . {main}() /var/www/html/InstallerLog.php:0*

なぜこのエラーが発生するのですか? 私は使っている :

require_once 'Response.php';

私のスクリプトでは、この種のエラーは私の知る限り発生しないはずです...

4

1 に答える 1

3

わかった。最終的にはかなり基本的なものになりました。

私が使用していたクラス名「Response」がすでに他の場所で使用されていたため、エラーが発生しました(私のコードではなく、SDKなどで使用されている可能性があります)。名前を一般的ではない名前に変更した後、エラーは再び発生しませんでした。安全にプレイするために、私も追加しました:

if(!class_exists('MyNewResponse'))

クラスを作成する前に。

于 2012-11-06T07:44:18.407 に答える