2013-07-12 13 views
5

Sto provando GAE per php e mi sono perso nella costruzione del file app.yaml. Posso capire la parte dal tutorial di Google che mostra come a punto tutte le richieste URL in un singolo fileCome costruire un file app.yaml?

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

Ma non aiuta nel mio caso. Ho intenzione di pubblicare ciò che ho impostato e la struttura del file è nella foto. enter image description here

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 

Così la mia pagina di destinazione per xxx.appspot.com o xxx.appsport.com/main sarebbe main.php. E funziona bene.

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

Quindi carichi inizia una sessione e ottiene il nome utente e-mail fare qualche formattazione di stringhe e quindi impostare come Session variabile e poi verifico per abbinare una condizione e sulla base del condizione reindirizzare a un altro script che esegue un po 'più di convalida e così via. Per rendere semplice sto solo ad orientarli verso login.php

login.php

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

Così il put out visualizzata dovrebbe essere il nome della variabile di sessione, ma invece ho questa

enter image description here

Quindi cosa ho sbagliato? Utilizzerò la pagina di accesso per estrarre i dati utente da un db SQL e in base al valore reindirizzare l'utente a pagine diverse che visualizzeranno diversi moduli, tabelle, rapporti in base alle loro impostazioni.

Es. Da login.php

se userA appartiene a dip1

intestazione ('Località /Dept1/main.php');

Else

intestazione ('Località /Deptx/main.php');

Quindi mi aspetto un sacco di reindirizzamenti e ognuno dei reindirizzamenti deve essere in grado di riportare anche le variabili di sessione impostate. Sono in grado di farlo mentre gira su un normale server PHP. La versione GAE richiede un po 'di apprendimento. Vorrei ringraziare qualcuno in anticipo solo per aver dedicato del tempo a leggere fino a sentire. Grazie.

Inoltre sarebbe bello se qualcuno potesse fare un tutorial dettagliato su come usare app.yaml e come potrebbe essere usato con un esempio demo come in w3school.

risposta

7

La tua app.yaml ha un bell'aspetto; è solo incompleto.

Hai definito quella "/" e "/ principale" mappa per il tuo script main.php, e che funziona bene.

Ma quando il browser dell'utente richiede "/login.php", App Engine si trova in app.yaml e non trova alcuna route corrispondente, quindi ottieni questo errore 404.

Per gestire questo caso particolare, è possibile un'altra voce con "url: /login.php" e "script: login.php".

Quindi vorrei esaminare l'applicazione e assicurarmi che non manchino altri percorsi.

Potrebbe inoltre essere necessario utilizzare i caratteri jolly negli URL in app.yaml. Altrimenti, se la tua applicazione invia l'utente a un URL come "/ main/subpage", non andrà al gestore main.php perché non corrisponde a route in app.yaml. In questo caso potresti voler usare "url: /main.*", ad esempio. Oppure puoi usare un gestore "/.*" catchall alla fine della tua app.yaml.

È possibile conoscere questi caratteri jolly e le altre opzioni app.yaml sulla pagina di riferimento app.yaml PHP: https://developers.google.com/appengine/docs/php/config/appconfig

(Non è necessario jolly per i fogli di stile, JavaScript e immagini, però, perché hai usato static_dir per quelli.)

+0

mi piacerebbe pensare App Engine considera solo il nome del percorso (ignorando la stringa di query) quando corrispondenza degli URL, ma potrei sbagliarmi. – icktoofay

+0

Oh sì, grazie, ho modificato la risposta. –

+0

Grazie per il controllo. Ci proverò. Puoi spiegare anche come funzionano i personaggi speciali? –

2

Ecco il mio, potrebbe essere d'aiuto. Pcode è solo una delle mie cartelle (non so se è necessario definire le cartelle, ma ho appena lasciato lì comunque):

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 

Fondamentalmente, penso che le seguenti linee verrà eseguito simile a un host php regolare come hostgator, godaddy ecc .:

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