2015-03-12 3 views
1

В моем GAE PHP app.yaml я пытаюсь сделать это:Google App Engine 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

благодаря диего

+0

1), если вы назвали ваш файл app.yamp, это приложение .yaml, так что это может быть причиной. 2) нам нужно будет увидеть ваш код. – Patrice

+0

Патрис, спасибо за ответ. файл на самом деле «app.yaml» (опечатка исправлена). какой код вам нужен? – diego

+0

myDynamicContent.php возможно? поскольку он не отображается, я бы предположил, что это rootcause :) – Patrice

ответ

1

Остальные ответы были бы штраф за конечное число значений, которые HARDCODED (как показано на вопрос).

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

- 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 , MyLinks на , value_1 на , и так далее.

Оригинал clunkier метод:

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

Вы не можете передать параметры в «сценарий: ".

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

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

Что вы можете ссылаться на app.yaml

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

+0

отличный ответ. как насчет моделирования mod_rewrite? – diego

Смежные вопросы