Google App Engine app.yaml PHP 脚本参数

Google App Engine app.yaml PHP scripting parameters

在我的 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

谢谢 迭戈

不能在"script:"参数中传递参数。

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

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

然后您可以在 app.yaml

中引用

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

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

<$php
$path = parse_url($_SERVER['PATH_INFO'], PHP_URL_PATH);

if ($path == '/path') {
}
?>

其他答案适用于有限数量的硬编码值(如问题所示)。

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

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

以上方法无效。您可以使用简单的 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;
?>

Since parse_url always gets the path info, we can safely depend on hardcoded indices. The array produced by explode for string /MyLinks/value_1 will contain an empty string at index 0, MyLinks at 1, value_1 at 2, and so on.

原始笨拙的方法:

<?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;
?>

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