AWS Elastic Beanstalk - 部署新版本后,PHP脚本无法执行

时间:2012-11-05 15:55:37

标签: php amazon-web-services elastic-beanstalk

我正在使用AWS Elastic Beanstalk for PHP,它使用Apache Web服务器管理1个EC2 linux服务器。

当通过管理控制台部署不同版本(包含所有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.

修改 更改Web服务器上的错误级别后,我开始在application_error_log中看到有趣的信息:

* [Mon Nov 05 17:19:44 2012] [错误] [客户端10.210.159.209] PHP致命错误:require_once()[function.require-once]:无法在/ var /中重新声明类响应第12行的www / html / InstallerLog.php [Mon Nov 05 17:19:44 2012] [错误] [客户端10.210.159.209] PHP堆栈跟踪: [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';

在我的脚本中,所以我的知识不应该出现这种错误......

1 个答案:

答案 0 :(得分:3)

行。所以最终它非常基本。

发生错误是因为我正在使用的类名“响应”已在其他地方使用(不在我的代码中,可能在SDK中或类似的东西)。 将名称更改为不太通用的名称后,错误不再发生。 为了安全起见,我还补充说:

if(!class_exists('MyNewResponse'))

在创建课程之前。