PHP shell_exec() 腳本從 CPanel 終端機運行,但不是從 ajax POST 呼叫運行

PHP shell_exec() 腳本從 CPanel 終端機運行,但不是從 ajax POST 呼叫運行

在我的網站上,我有一個 javascript 函數,它對伺服器(運行 CentOS 6 的 GoDaddy VPS)上的 PHP 檔案進行 POST ajax 調用,該函數透過 shell_exec() 執行 python 腳本並返回輸出。

JavaScript 函數:

function submitdivsheet()
{
    $.post("test.php", {}, function(data,status){
        console.log(data);
    }); 
}

PHP腳本:test.php

<?php
    $command = escapeshellcmd('python3.6 test.py');
    $output = shell_exec($command);
    echo $output;
?> 

Python腳本:test.py

import sys
print("This is the output")

當我嘗試從 CPanel 上的 bash 終端機運行 php 檔案時,沒有任何問題, 如圖所示。然而,在執行 javascript 函數時,只有一個空字串輸出到控制台。我不確定為什麼它只能在 CPanel 終端上運行,但我懷疑這可能是某個地方的權限問題。我該如何解決這個問題?

注意:如果 shell_exec() 不存在,這在伺服器和 POST 呼叫上都可以正常運作。看來是 shell_exec 導致了這個問題。


編輯:將 PHP 腳本更改為:

<?php print shell_exec('echo $PATH'); ?>

是輸出。

答案1

從 shell 中存在的 Web 伺服器呼叫 python 時,您缺少環境值。候選者是PATHpython 手冊頁中提到的變數。

嘗試這個:

env -i python3.6 test.py

您可能會收到一些錯誤訊息,希望能夠指出問題所在。然後嘗試 shell 環境中存在的變數,例如:

env -i PYTHONHOME=$PYTHONHOME python3.6 test.py

新增所有必要的環境變數。當此方法有效時,將它們新增至腳本的呼叫中。呼叫腳本時,您已經提供了變數的實際值,不能將它們稱為$PYTHONHOME.

相關內容