2010-01-05 16 views
12

बस संदर्भ मुख्य प्रश्न को स्पष्ट करने के लिए में डालने पर एक संकलित php-cgi के साथ एक .htaccess में getenv() php और setenv में उपयोग कैसे करें:एक साझा मेजबान

मेरे विकास मशीन पर, PHP5.3.1 है मॉड्यूल के रूप में अपाचे पर स्थापित, मैं अपने अनुप्रयोग की रूट .htaccess फ़ाइल में SetEnv APPLICATION_ENVIRONMENT विकास का उपयोग करता हूं। इसके बाद getenv ('APPLICATION_ENVIRONMENT') के साथ किसी भी php स्क्रिप्ट से आसानी से पुनर्प्राप्त किया जा सकता है।

उत्पादन सर्वर पर, साझाहोस्ट (सपनेहोस्ट) पर, मैंने स्वयं को php5.3.1 संकलित किया क्योंकि यह सीधे समर्थित नहीं था। सब कुछ ठीक काम करता है सिवाय इसके कि getenv ('APPLICATION_ENVIRONMENT') झूठी रिटर्न देता है।

अपने डोमेन के लिए sharedhost जड़ .htaccess में, मैं इस .htaccess फाइल

Options +ExecCGI 
AddHandler php-cgi .php 
Action php-cgi /cgi-bin/php.cgi 

<FilesMatch "^php5?\.(ini|cgi)$"> 
    Order Deny,Allow 
    Deny from All 
    Allow from env=REDIRECT_STATUS 
</FilesMatch> 

Options -indexes 

php5.cgi/cgi-bin में रहता है और बहुत अच्छी तरह से काम करता है का उपयोग करें। अपने आवेदन के रूट फ़ोल्डर में बेशक मैं एक .htaccess परिभाषित किया है:

SetEnv APPLICATION_ENVIRONMENT production 

लेकिन यह गलत लौटाता है जब getenv ('APPLICATION_ENVIRONMENT') का उपयोग कर, किसी भी विचार कैसे इस को हल करने?

+0

बस अनुमान लगा रहा है: हो सकता है कि आपका होस्ट इस निर्देश को .htaccess फ़ाइलों में ओवरराइड करने की अनुमति न दे? –

उत्तर

11

ठीक है, मुझे अंततः यह मिला। सपनेहोस्ट पर, फास्टसीजी का उपयोग करना संभव है और इसलिए इसके साथ पर्यावरण चर घोषित करना संभव है। इसमें बस इस सरल स्क्रिप्ट को जोड़ना शामिल है

#!/bin/sh 
export PHP_FCGI_CHILDREN=2 
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi 

जहां मेरा संकलित PHP5.3.1 स्थित था। उस फ़ाइल पर chmod 744 जिसे dispatch.fcgi कहा जाता है जिसे सपनेहोस्ट के वॉचडॉग द्वारा अधिक स्मृति की अनुमति दी जाएगी।

है कि मैं अपने डोमेन के करने के लिए जोड़ा के बाद निम्नलिखित .htaccess:

SetEnv APPLICATION_ENVIRONMENT staging 

एक php स्क्रिप्ट में है के माध्यम से पुनः प्राप्त करने योग्य है:

Options +ExecCGI 
AddHandler fastcgi-script fcg fcgi fpl 
AddHandler php5-fastcgi .php 
Action php5-fastcgi /dispatch.fcgi 
अब आवेदन के रूट में

मैं के साथ एक और .htaccess है getenv ('REDIRECT_APPLICATION_ENVIRONMENT');

+0

ओह धन्यवाद !!! मैं .htaccess में पर्यावरण चर सेट करने की कोशिश कर रहे बाल खो रहा था। मैं फास्टसीजीआई को एक सीजीआई आवेदन के रूप में चलाने से PHP को बदलकर अंत में ऐसा करने में सक्षम था। –

+5

getenv ('APPLICATION_ENVIRONMENT') के बजाय आप getenv ('REDIRECT_APPLICATION_ENVIRONMENT') का उपयोग क्यों कर रहे हैं? –

+0

इसके लिए मेरे लिए काम करने के लिए, मुझे पर्यावरण परिवर्तक के प्रीपेड "रेडियरैक" भाग को छोड़ना पड़ा। –

9

SetEnv निर्देश काम करने के लिए, अपने होस्टिंग सेवा mod_env मॉड्यूल सक्रिय

, होना चाहिए ... लेकिन फिर भी अगर यह सक्रिय है, हो सकता है आप SetEnv उपयोग करने की अनुमति की जरूरत नहीं है।

बस यह सुनिश्चित करने के लिए कि समस्या आपके कोड में नहीं है, तो आप पृष्ठ के निचले हिस्से में phpinfo() के आउटपुट को देखना चाहेंगे: PHP से देखा गया वातावरण चर युक्त एक अनुभाग होना चाहिए - यदि आपका है वहां नहीं, यह आपके लिए एक अच्छा संकेत नहीं है ...

+0

हाँ आप सही हैं, मुझे उत्पादन सर्वर के तहत PHP चर के तहत कुछ भी नहीं मिल रहा है और मैं अपनी विकास मशीन पर करता हूं। मैं इसके लिए उनके समर्थन से संपर्क कर रहा हूं और एक समाधान जवाब देने की कोशिश करूंगा। –

+0

@ स्टीवन: शुभकामनाएँ ^^ –

संबंधित मुद्दे