Google App Engine是否忽略了我的set_include_path?

时间:2014-04-18 05:46:42

标签: php google-app-engine

在PHP的过去和当前版本中,我能够为这样的库设置路径:

define("ROOT", dirname(__FILE__));
set_include_path(ROOT . DIRECTORY_SEPARATOR . "libraries" . DIRECTORY_SEPARATOR . "smarty" . PATH_SEPARATOR . get_include_path());

这样做可以做到这样:

require_once "Smarty.class.php";
spl_autoload_register(
    function($class) {
        if (!class_exists($class)) {
            require_once("$class.php");
        }
    }
);
$smarty = new Smarty();
etc...

但是,现在我尝试使用Google App Engine,我必须提出:

require_once ROOT . DIRECTORY_SEPARATOR . "libraries" . DIRECTORY_SEPARATOR . "smarty" . DIRECTORY_SEPARATOR . "Smarty.class.php";

我的自动加载器功能不再适用于其他各种库。

在控制台日志中,我得到了这个:

PHP Fatal error:  require_once(): Failed opening required 'Smarty.class.php' (include_path='/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/source:/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/libraries/smarty:/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/libraries/swift:/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/libraries/html-purifier:/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/libraries/xhprof_lib:/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/source/modules/main:.;/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/;/base/data/home/runtimes/php/sdk') in /base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/bootstrap.php on line 70

尽管Smarty.class.php已明确上传并位于/base/data/home/apps/s~shiftedbits-cms/1.375217798547404203/libraries/smarty

在正常情况下很容易被PHP找到。

我是否需要对我的app.yaml文件(下面)做一些特别的事情来允许这些文件被PHP读取,或者对实例的限制是否太多我需要找到另一种方式?

application: shiftedbits-cms
version: 1
runtime: php
api_version: 1
threadsafe: yes

handlers:
# Serve images as static resources.
- url: /(.+\.(gif|png|jpg|ico))$
  static_files: \1
  upload: .+\.(gif|png|jpg|ico)$

- url: /resources
  static_dir: resources

- url: /index\.html
  script: index.php

- url: /
  script: index.php

- url: /(.+)$
  script: index.php`

2 个答案:

答案 0 :(得分:0)

您必须使用调试工具并找到“ROOT”常量解析的内容。然后用您的基本路径替换ROOT

答案 1 :(得分:0)

不确定它与您的主要问题有关但是您是否注意到您的包含路径似乎混合了unix路径分隔符(开头的“:”)和Windows路径分隔符(最后的“;”)?

(很抱歉发布此答案,我的声誉仍然太低,无法发表评论:/)