Google App Engine app.yaml Параметры сценариев PHP

В моем 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

Спасибо
диего

2

Решение

Другие ответы были бы хороши для конечного числа значений, которые жестко закодированы (как показано в вопросе).

Но если вы хотите работать с действительно динамичной версией с бесконечными возможностями значений, вы можете подумать о следующем (не работает):

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

Выше не работает. Вы можете обойти проблему, используя простой PHP мотыга.

Обновите 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, MyLinks в 1, value_1 в 2, и так далее.

Оригинальный более грубый метод:

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

Совет: Вы можете использовать одинарные кавычки ' вместо двойных кавычек "

1

Другие решения

Вы не можете передавать параметры в параметре «script:».

Один из способов исправить это — два сценария «входа», которые затем включают ваш основной сценарий, например:

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

Который вы можете затем ссылаться в app.yaml

Вероятно, это самый быстрый способ заставить ваш существующий код работать (хотя есть и лучшие способы сделать это).

2

чтение официального документа https://cloud.google.com/appengine/docs/php/config/mod_rewrite
я сделал это:

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

if ($path == '/path') {
}
?>
0
По вопросам рекламы [email protected]