2013-07-12 9 views
5

मैं php के लिए GAE को आजमा रहा हूं और app.yaml फ़ाइल निर्माण में खो गया है। मैं गूगल ट्यूटोरियल से हिस्सा कैसे एक एकल फाइलapp.yaml फ़ाइल कैसे बनाएं?

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

करने के लिए सभी यूआरएल अनुरोध बात को दर्शाता है जो समझ सकते हैं लेकिन यह मेरे मामले में मदद नहीं करता है। मैं जो पोस्ट अप किया है उसे पोस्ट करने जा रहा हूं और फ़ाइल संरचना तस्वीर में है। 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 

तो 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']; 

तो बाहर डाल सत्र चर नाम होना चाहिए लेकिन प्रदर्शित बजाय मैं इस

enter image description here

मिलता है

तो मैंने गलत क्या किया? मैं SQL डेटा से उपयोगकर्ता डेटा खींचने के लिए लॉगिन पेज का उपयोग करने जा रहा हूं और मूल्य के आधार पर उपयोगकर्ता को अलग-अलग पृष्ठों पर रीडायरेक्ट करता हूं जो उनकी सेटिंग्स के आधार पर विभिन्न रूपों, तालिकाओं, रिपोर्ट प्रदर्शित करेगा।

उदा। login.php से

USERA Dept1 को

हैडर अंतर्गत आता है, तो ('स्थान: /Dept1/main.php');

वरना

हैडर ('स्थान: /Deptx/main.php');

तो मुझे बहुत सारे रीडायरेक्ट की उम्मीद है और प्रत्येक रीडायरेक्ट सेट किए गए सत्र चर को भी ले जाने में सक्षम होना चाहिए। मैं सामान्य PHP सर्वर पर चलते समय ऐसा करने में सक्षम हूं। जीएई संस्करण को कुछ सीखने की आवश्यकता है। मैं सुनवाई तक पढ़ने के लिए समय लेने के लिए पहले से किसी को भी धन्यवाद देना चाहता हूं। धन्यवाद।

यह भी अच्छा होगा अगर कोई ऐप.मैम का उपयोग कैसे करें और डब्ल्यू 3 स्कूली जैसे डेमो उदाहरण के साथ इसका उपयोग कैसे किया जा सकता है, इस बारे में एक विस्तृत ट्यूटोरियल कर सकता है।

उत्तर

7

आपका ऐप.मैमल अच्छा दिख रहा है; यह सिर्फ अपूर्ण है।

आपने परिभाषित किया है कि "/" और "/ main" मानचित्र आपकी main.php स्क्रिप्ट पर है, और यह ठीक काम करता है।

लेकिन जब उपयोगकर्ता का ब्राउज़र "/login.php" का अनुरोध करता है, तो ऐप इंजन app.yaml में दिखता है और मेल खाने वाला कोई भी मार्ग नहीं मिलता है, इसलिए आपको यह 404 त्रुटि मिलती है।

इस विशेष मामले को संभालने के लिए, आप "url: /login.php" और "script: login.php" के साथ एक और प्रविष्टि कर सकते हैं।

फिर मैं आपके आवेदन को देखता हूं और सुनिश्चित करता हूं कि आप कोई अन्य मार्ग नहीं खो रहे हैं।

आपको app.yaml में अपने यूआरएल में वाइल्डकार्ड का उपयोग करने की आवश्यकता हो सकती है। अन्यथा, यदि आपका एप्लिकेशन कभी उपयोगकर्ता को "/ main/subpage" जैसे यूआरएल में भेजता है, तो यह main.php हैंडलर पर नहीं जाएगा क्योंकि यह app.yaml में कोई मार्ग नहीं है। इस मामले में आप उदाहरण के रूप में "url: /main.*" का उपयोग करना चाहेंगे। या आप अपने app.yaml के अंत में एक कैचल "/ .* हैंडलर का उपयोग कर सकते हैं।

आप इन वाइल्डकार्ड और पीएचपी app.yaml संदर्भ पृष्ठ पर अन्य app.yaml विकल्पों के बारे में सीख सकते हैं: https://developers.google.com/appengine/docs/php/config/appconfig

(आप अपने स्टाइलशीट, जावास्क्रिप्ट, और छवियों के लिए वाइल्डकार्ड, हालांकि जरूरत नहीं है, क्योंकि आपने उन लोगों के लिए static_dir का उपयोग किया है।)

+0

मुझे लगता है कि यूआरएल मिलान करते समय ऐप इंजन केवल पथ का नाम (क्वेरी स्ट्रिंग को अनदेखा कर रहा है) मानता है, लेकिन मैं गलत हो सकता हूं। – icktoofay

+0

ओह हाँ, धन्यवाद, मैंने जवाब संपादित कर लिया है। –

+0

जांच के लिए धन्यवाद। मैं इसे आज़माउंगा। क्या आप यह भी समझा सकते हैं कि विशेष पात्र कैसे काम करते हैं? –

2

यहां मेरा है, इससे मदद मिल सकती है। 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 

मूल रूप से, मुझे लगता है कि निम्नलिखित लाइनों hostgator की तरह एक नियमित रूप से php मेजबान के लिए इसी तरह चलेंगे, 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 
संबंधित मुद्दे