How to construct a app.yaml file?

[亡魂溺海] 提交于 2019-12-07 02:34:42

问题


I am trying out GAE for php and got lost in the app.yaml file construction. I can understand the part from the google tutorial which shows how to point all url request to a single file

https://developers.google.com/appengine/docs/php/gettingstarted/helloworld

But it does not help in my case. I am going to post what I have setup and the file structure is in the pic.

App.yaml

application: xxx
version: 1
runtime: php
api_version: 1
threadsafe: true

handlers:
- url: /stylesheets
  static_dir: stylesheets

- url: /images
  static_dir: images

- url: /scripts
  static_dir: scripts

- url: /favicon.ico
  static_files: favicon.ico
  upload: favicon.ico

- url: /
  script: main.php
  login: required
  auth_fail_action: redirect

- url: /main
  script: main.php
  login: required
  auth_fail_action: redirect

So my landing page for xxx.appspot.com or xxx.appsport.com/main would be main.php. And it works fine.

main.php

<?php
session_start();
date_default_timezone_set('America/Los_Angeles');
require_once 'google/appengine/api/users/UserService.php';

use google\appengine\api\users\User;
use google\appengine\api\users\UserService;

$user = UserService::getCurrentUser();
$name= $user->getNickname();
$name = explode(".",$name);
$name[0]= ucfirst($name[0]);
$name[1]= ucfirst($name[1]);
$name = $name[0]." ".$name[1];
$_SESSION['name']=$name;
$_SESSION['email']= getenv('USER_EMAIL');

header('Location: login.php');

So it loads starts a session and gets the user name and email do a few string formatting and then set as Session variable and then I check to match a condition and based on the condition redirect to another script which does some more validation and so on. To make is simple I am just redirecting it to login.php

login.php

<?php
session_start();
echo $_SESSION['name'];

So the out put displayed should be the session variable name but instead I get this

So what did I do wrong? I am going to use the login page to pull user data from a SQL db and based on the value redirect the user to different pages which will display different forms, tables, reports based on their settings.

Eg. From login.php

if userA belongs to Dept1

header('Location: /Dept1/main.php');

Else

header('Location: /Deptx/main.php');

So I expect a lot of redirects and each of the redirects must be able to also carry over the session variables that are set. I as able to do this while running on normal PHP server. The GAE version requires some re learning. I would like to thank any one in advance just for taking time to read till hear. Thank you.

Also it would be nice if some one could do a detail tutorial on how to use app.yaml and how it could be used with a demo example like in w3school.


回答1:


Your app.yaml is looking good; it's just incomplete.

You've defined that "/" and "/main" map to your main.php script, and that works fine.

But when the user's browser requests "/login.php", App Engine looks in app.yaml and does not find any route that matches, so you get this 404 error.

To handle this particular case, you can another entry with "url: /login.php" and "script: login.php".

Then I would look through your application and make sure you're not missing any other routes.

You also may need to use wildcards in your URLs in app.yaml. Otherwise, if your application ever sends the user to a URL like "/main/subpage", it will not go to the main.php handler because it matches no routes in app.yaml. In this case you might want to use "url: /main.*", as an example. Or you can use a catchall "/.*" handler at the end of your app.yaml.

You can learn about these wildcards and the other app.yaml options on the PHP app.yaml reference page: https://developers.google.com/appengine/docs/php/config/appconfig

(You don't need wildcards for your stylesheets, javascript, and images, though, because you've used static_dir for those.)




回答2:


Here's mine, it may help. Pcode is just one of my folders (not sure if you need to define folders but I just left it there anyway):

application: theclearview1
version: 10
runtime: php
api_version: 1

handlers:
- url: /(.*\.(htm$|html$|css$|js$))
  static_files: \1
  upload: (.*\.(htm$|html$|css$|js$))
  application_readable: true

- url: /css
  static_dir: css

- url: /js
  static_dir: js

- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: \1
  upload: (.*\.(ico$|jpg$|png$|gif$))
  application_readable: true

- url: /Pcode/(.+)
  script: Pcode/\1

- url: /(.+)
  script: \1

- url: /.*
  script: index.php

Basically, I think the following lines will run similar to a regular php host like hostgator, godaddy etc.:

handlers:
- url: /(.*\.(htm$|html$|css$|js$))
  static_files: \1

  upload: (.*\.(htm$|html$|css$|js$))
  application_readable: true

- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: \1

  upload: (.*\.(ico$|jpg$|png$|gif$))
  application_readable: true

- url: /(.+)
  script: \1

- url: /.*
  script: index.php


来源:https://stackoverflow.com/questions/17620667/how-to-construct-a-app-yaml-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!