2010-01-04 10 views
5

से एक चर निर्यात करें मैं एक चर सेट करने की कोशिश कर रहा हूं जो बाहरी PHP से पहुंच योग्य होना चाहिए। आदर्श रूप से यह एक स्थानीय चर होना चाहिए, लेकिन पर्यावरण चर भी स्वागत है।PHP से खोल

पहले, मैं putenv() की कोशिश की है, लेकिन यह कोई परिणाम देता है:

$ php -r "putenv ('PHP_TEST = स्ट्रिंग');" ; गूंज $ PHP_TEST

$

जब मैं एक ही स्क्रिप्ट से getenv() कहते हैं - यह सही 'स्ट्रिंग' मूल्य का परिणाम है। सुरक्षित मोड बंद है, लेकिन मैनुअल कहते हैं, 'PHP_' उपसर्ग सुरक्षित के साथ महत्वपूर्ण है = तो मैं इसका इस्तेमाल पर सिर्फ मामले :) में

तब मैं system() या shell_exec() कोशिश

:

$ php -r "shell_exec ('PHP_TEST = स्ट्रिंग');" ; echo $ PHP_TEST

$ php -r "shell_exec ('export PHP_TEST = string');" ; गूंज $ PHP_TEST

$

वहाँ एक समाधान है? कारण क्या हो सकता है? मैं उबंटू लिनक्स 9 .10 "कर्मिक" का उपयोग कर रहा हूं, लेकिन फ्रीबीएसडी सर्वर एक ही परिणाम देता है।

उत्तर

3

आप एक खोल चर के लिए कुछ उत्पादन पारित करने के लिए कोशिश कर रहे हैं, तो आप इस तरह यह कर सकते हैं:

$ testvar=$(php -r 'print "hello"') 
$ echo $testvar 
hello 

दिखा कैसे निर्यात चीजों को प्रभावित करता है:

$ php -r '$a=getenv("testvar"); print $a;' 
$ export testvar 
$ php -r '$a=getenv("testvar"); print $a;' 
hello 

इन उदाहरणों में, इंटरैक्टिव खोल मूल प्रक्रिया है और बाकी सब कुछ एक बच्चा है (और एक दूसरे के भाई बहन)।

+0

धन्यवाद! इससे प्रश्न स्पष्ट हो जाता है। लेकिन फिर, कैसे 'getopt' (और कुछ अन्य गैर-निर्मित प्रोग्राम) बाहरी संदर्भ में चर निर्यात करने के लिए प्रबंधन करते हैं? (उदा। 'Getopt' निर्यात' $ OPTIND') – kolypto

+0

आप बाहरी '/ usr/bin/getopt' को भ्रमित कर रहे हैं जो कि निर्मित 'getopts' के साथ ऐसा नहीं करता है और नहीं कर सकता है। –

2

निर्यात किए गए पर्यावरण चर केवल बाल प्रक्रियाओं में उपलब्ध हैं।

तो आप एक पर्यावरण चर सेट करने और फिर एक बच्चे की प्रक्रिया को जन्म देने में सक्षम होंगे। उस पर्यावरण प्रक्रिया में पर्यावरण चर दिखाई देगा। हालांकि इसे php में सेट करना और फिर ऊपर दिए गए उदाहरण में क्रमशः प्रक्रिया (echo) लॉन्च करना काम नहीं करेगा।

आप चर सेट और फिर अंडे/एक नई प्रक्रिया exec, तो यह है कि नई प्रक्रिया में दिखाई देना चाहिए।