Как создать файл app.yaml?

Я пробую GAE для php и потерялся в конструкции файла app.yaml. Я могу понять часть из учебника Google, в котором показано, как указать все запросы URL-адресов в одном файле.

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

Но в моем случае это не помогает. Я собираюсь опубликовать то, что у меня настроено, и структура файлов показана на рисунке. введите описание изображения здесь

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

Итак, моя целевая страница для xxx.appspot.com или xxx.appsport.com/main будет main.php. И работает нормально.

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');

Таким образом, он загружается, запускает сеанс и получает имя пользователя и адрес электронной почты, выполняет форматирование нескольких строк, а затем устанавливается как переменная сеанса, а затем я проверяю соответствие условию и на основе условия перенаправление на другой сценарий, который выполняет дополнительную проверку и так далее. Чтобы сделать это просто, я просто перенаправляю его на login.php

login.php

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

Таким образом, отображаемый вывод должен быть именем переменной сеанса, но вместо этого я получаю это

введите описание изображения здесь

Так что я сделал не так? Я собираюсь использовать страницу входа в систему для извлечения пользовательских данных из базы данных SQL и на основе значения перенаправлять пользователя на разные страницы, которые будут отображать разные формы, таблицы и отчеты в зависимости от их настроек.

Например. Из login.php

если userA принадлежит Dept1

заголовок ('Расположение: /Dept1/main.php');

Еще

заголовок ('Расположение: /Deptx/main.php');

Поэтому я ожидаю много перенаправлений, и каждое из перенаправлений должно также иметь возможность переносить установленные переменные сеанса. Я могу сделать это, работая на обычном сервере PHP. Версия GAE требует некоторого повторного изучения. Я хотел бы заранее поблагодарить любого, просто за то, что он нашел время, чтобы читать до конца. Спасибо.

Также было бы неплохо, если бы кто-нибудь мог сделать подробное руководство о том, как использовать app.yaml и как его можно использовать с демонстрационным примером, например, в w3school.


person Abilash Amarasekaran    schedule 12.07.2013    source источник


Ответы (2)


Ваш app.yaml выглядит хорошо; это просто неполно.

Вы определили, что / и /main отображаются на ваш скрипт main.php, и он отлично работает.

Но когда браузер пользователя запрашивает /login.php, App Engine просматривает app.yaml и не находит ни одного подходящего маршрута, поэтому вы получаете эту ошибку 404.

Чтобы справиться с этим конкретным случаем, вы можете ввести другую запись с url: /login.php и script: login.php.

Затем я просмотрел бы ваше приложение и убедился, что вы не пропустите ни одного другого маршрута.

Вам также может потребоваться использовать подстановочные знаки в URL-адресах в app.yaml. В противном случае, если ваше приложение когда-либо отправит пользователя по URL-адресу, например /main/subpage, оно не перейдет к обработчику main.php, потому что оно не соответствует маршрутам в app.yaml. В этом случае вы можете использовать url: /main.\* в качестве примера. Или вы можете использовать обработчик catchall /.* в конце вашего app.yaml.

Вы можете узнать об этих подстановочных знаках и других параметрах app.yaml на справочной странице PHP app.yaml: https://developers.google.com/appengine/docs/php/config/appconfig

(Однако вам не нужны подстановочные знаки для таблиц стилей, javascript и изображений, потому что для них вы использовали static_dir.)

person Jamie Niemasik    schedule 14.07.2013
comment
Я предполагаю, что App Engine учитывает только имя пути (игнорируя строку запроса) при сопоставлении URL-адресов, но я мог ошибаться. - person icktoofay; 14.07.2013
comment
Спасибо за проверку. Я попробую это сделать. Вы также можете объяснить, как работают специальные символы? - person Abilash Amarasekaran; 16.07.2013
comment
Специальные символы позволяют использовать регулярные выражения - широко распространенный метод поиска шаблонов в строках. Их стоит изучить; Помимо вашего app.yaml, вы можете захотеть использовать их в своем PHP в будущем. Вот руководство, а вот руководство по PHP. - person Jamie Niemasik; 16.07.2013
comment
Спасибо @JamieNiemasik - person Abilash Amarasekaran; 20.07.2013

Вот мой, может поможет. Pcode - это всего лишь одна из моих папок (не уверен, нужно ли вам определять папки, но я все равно оставил ее там):

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

В принципе, я думаю, что следующие строки будут работать аналогично обычному хосту php, например hostgator, godaddy и т. Д .:

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
person user2123424    schedule 17.07.2013