2015-10-05 90 views
1

shell_exec() 不能在我的本地主機上工作。我讀了很多網站來解決這個問題,但找不到解決方案。 此代碼:在PHP中的shell_exec不起作用

$output = shell_exec("env"); 
    print "<pre>$output</pre>"; 

不給任何輸出。

我在php.ini中登記了disable_functions,但shell_exec未被禁用。 我做了error_reporting = E_ALL但是沒有輸出(沒有錯誤)。我所得到的只是一個空白的屏幕。即使safe_mode已關閉。

如果我在上面的代碼後寫echo "BULB";它打印「BULB」。

可能是什麼問題?

+1

如果你只是在控制檯上運行'env',你會得到輸出結果嗎? – Federkun

+0

我得到這個輸出'ReferenceError:env未定義' – abbas

+0

其他命令如'ls'或'dir'工作嗎? –

回答

2

您期望從env得到什麼信息?根據你的意見,在我看來,如果你想在Windows系統上使用Linux命令 - 這是行不通的。

在Linux系統上,env命令本身就像返回已定義的環境變量列表一樣。但env在Windows中不是有效的命令。

如果您只是在尋找環境變量的列表,這實際上可以在PHP中獲得,而無需轉到shell命令。 PHP有一個內置的全局變量$_ENV,它包含程序聲明時定義的所有環境變量的副本。只需print_r($_ENV)即可看到它們。另一方面,如果出於某種原因您確實需要使用shell_exec(),那麼您需要考慮您正在使用的操作系統。在Linux上,您可以使用env命令。 Windows上的等價物是set,沒有任何參數。所以,你的代碼就變成了:

$output = shell_exec("set"); 

請注意,輸出的格式可能不等同於你在Linux上得到什麼,所以如果你解析它,該代碼將不得不改變過。

如果您需要您的代碼能夠在多個平臺上運行,那麼您需要在shell_exec()調用之前編寫額外的代碼來確定操作系統並制定出正確的命令來使用。

+1

一般而言,關於'shell_exec'調用的可移植性的觀點是有效的,但'env'是Windows中的有效命令。 –

+0

@TomFenech - 我剛剛打開我的dos提示符並鍵入'env',並得到了經典的''env'不被識別爲內部或外部命令。所以如果它是Windows命令,它不在我的系統路徑中。 – Simba

+0

不夠公平 - 在我的系統上(Windows 8.1)在命令提示符下是一個有效的命令。 –