2

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

谢谢迭戈

4

3 回答 3

2

您不能在“脚本:”参数中传递参数。

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

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

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

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

于 2015-03-12T22:09:30.417 回答
1

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

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

- 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总是获取路径信息,我们可以安全地依赖硬编码索引。explodefor string生成的数组将在索引012等处/MyLinks/value_1包含一个空字符串。MyLinksvalue_1

原始笨拙的方法:

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

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

于 2015-07-20T11:46:08.933 回答
0

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

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

if ($path == '/path') {
}
?>
于 2015-03-15T22:57:31.550 回答