【问题标题】:Google App Engine app.yaml PHP scripting parametersGoogle App Engine app.yaml PHP 脚本参数
【发布时间】:2015-05-15 03:21:03
【问题描述】:

在我的 GAE PHP app.yaml 中,我正在尝试这样做:

application: myapp
version: 1
runtime: php
api_version: 1
threadsafe: yes

handlers:

- url: /sitemap.xml    
  static_files: sitemap.xml
  upload: /sitemap\.xml

- url: /MyOneLink
  script: /myDynamicContent.php?myparam=hardcoded_value_1

- url: /MySecondLink
  script: /myDynamicContent.php?myparam=hardcoded_value_2

因此可以浏览http://example.com/MyOneLink 并获得动态 php 的结果(这取决于硬编码的 myparam 值)

问题是浏览时什么都没有显示。 有什么想法吗?

顺便说一句:你可以弄清楚为什么我还要发布“sitemap.xml”:它将用于公开所有 myLinks

谢谢 迭戈

【问题讨论】:

  • 1) 如果你调用你的文件 app.yamp,它就是 app.yaml,所以这可能是一个原因。 2) 我们需要查看您的代码。
  • 帕特里斯,感谢您的回复。该文件实际上是“app.yaml”(已纠正错字)。你需要什么代码?
  • myDynamicContent.php 可能吗?因为它没有显示,我猜这是根本原因:)
  • ”; foreach ($_GET as $key => $value) echo "GET Key: $key Val: $value
    "; ?>
  • ...我刚刚点击阅读您的 yaml...我认为您不需要添加查询参数(我不在 php 中编码,但我的 Python 应用程序从未有完整的查询其中的参数)

标签: php google-app-engine app.yaml sitemap.xml


【解决方案1】:

不能在“script:”参数中传递参数。

解决此问题的一种方法是两个有两个“入口”脚本,然后包含您的主脚本,如下所示:

<?php
$_GET['myparam'] = 'hardcoded_value_1';
require('main_script.php');

然后您可以在 app.yaml 中引用它

这可能是使现有代码工作的最快方法(尽管有更好的方法)。

【讨论】:

  • 很好的答案。 mod_rewrite 模拟呢?
【解决方案2】:

对于有限数量的硬编码值(如问题所示),其他答案会很好。

但如果您想使用具有无限可能值的真正动态版本,您可能会想到以下方法(不起作用):

- url: /MyLinks/(.*)/?
  script: /myDynamicContent.php?myparam=\1

以上行不通。您可以使用简单的 PHP hack 解决此问题。

app.yaml 更新为:

- url: /MyLinks/.*
  script: /myDynamicContent.php

myDynamicContent.php 中,获取$_SERVER['REQUEST_URI'] 的值并解析此字符串以获得myparam 的预期值。

更新!更优雅的方法:

<?php
$requestURI = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
$requestURI = explode("/", $requestURI);
$myparam = $requestURI[2];
echo $myparam;
?>

由于parse_url 总是获取路径信息,我们可以安全地依赖硬编码索引。 explode 为字符串 /MyLinks/value_1 生成的数组将在索引 0 处包含一个空字符串,在 1 处包含 MyLinks1 处包含 value_12 等等。

原始的笨方法:

<?php
$requestURI = explode("/", $_SERVER["REQUEST_URI"]);
for ($i = 0; $i < count($requestURI); $i++) {
    if (strcmp($requestURI[$i], "MyLinks") == 0) {
        $myparam = $requestURI[$i + 1];
        break;
    }
}
echo $myparam;
?>

提示:您可以使用单引号 ' 代替双引号 "

【讨论】:

    【解决方案3】:

    阅读官方文档https://cloud.google.com/appengine/docs/php/config/mod_rewrite 我这样做了:

    <$php
    $path = parse_url($_SERVER['PATH_INFO'], PHP_URL_PATH);
    
    if ($path == '/path') {
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 2015-01-28
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多