2013-04-24 107 views
0

我想給一個變量從PHP到bash而不使用標準輸出。 我的問題可以簡化爲以下幾種:用PHP更改環境變量

如何使這段代碼有效?

export A=1; 
php -r "echo 'variable A equals: '.\$_SERVER['A'].\"\n\";" 
php -r "\$_SERVER['A']=0;" 
echo $A 

編輯:

下面的代碼不起作用:

export A=1; 
php -r "echo 'variable A equals: '.\$_SERVER['A'].\"\n\";" 
php -r "putenv(\"A=0\");" 
// Same problem with: 
// php -r "exec(\"export A=0\");" 
echo $A 
+0

使用'putenv(「A = 0」);' – bwoebi 2013-04-24 17:35:17

+0

查看我的更新評論。可以將bash腳本作爲子進程運行,也可以通過在命令行中將子進程作爲子進程產生,直接返回shell變量。 – 2013-04-24 17:52:46

+0

作爲一個孩子產卵的PHP過程將意味着使用標準輸入來獲取變量,我錯了嗎? – 2013-04-24 17:56:52

回答

1

你想看看使用putenvhttp://php.net/manual/en/function.putenv.php

如果你在不同的範圍內運行此(例如,讓PHP腳本模具,然後運行bash腳本),請嘗試以下分配myvar作爲文件的輸出:

$ myvar=$(php -f example.php) 
+0

-1這不起作用。閱讀文檔:**環境變量僅在當前請求期間存在。在請求結束時,環境恢復到原始狀態。** – 2013-04-24 17:39:00

+1

@TimCooper他沒有指定他在PHP範圍之外運行bash腳本(例如,讓PHP腳本死掉,然後運行bash腳本)。 – 2013-04-24 17:41:10

0
putenv("A=0"); 

應該按預期工作:)

+0

不,它不應該。閱讀文檔:**環境變量僅在當前請求期間存在。在請求結束時,環境恢復到原始狀態。** – 2013-04-24 17:41:05

0

這個怎麼樣? exec("export A=".$_SERVER['A'].)

+0

不幸的是,我只是試過了,它也不起作用。 – 2013-04-24 17:40:56