PHP exec() 函数使用 apache 抛出空数组值,但 CLI 没问题

PHP exec() function throws empty array values with apache, but CLI's are fine

我有这个:

exec('lsblk -no "UUID" 2>&1', $result);
print_r($result);

在CLI模式下,一切正常,输出为:

Array
(
    [0] =>
    [1] =>
    [2] => d5b31fcc-ba84-47bc-ab1e-7f71178c791f
    [3] =>
    [4] => Dj0hJ3-c9C4-B1px-HIYW-DGwi-v9I9-eppfgL
    [5] => e266aff1-e6a7-444a-b9b3-2da2f9b71202
    [6] => 3fc422ac-0cde-4b54-aab1-cac10d3d5f0b
    [7] =>
)

但是从http,输出是:

Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => 
    [4] => 
    [5] => 
    [6] => 
    [7] => 
)

这是错误,还是 charset 问题?

问题是,当您通过 CLI 登录时,我们称之为 root 的用户。但是,当您通过浏览器访问时,浏览器会通过您的网络服务器,它会使用不同的用户登录,我们将 apache.

root 可以访问 UUID,apache 没有。

您特定计算机上的实际用户可能有所不同。