Apache+PHP Mac OS X 10.0-它是否阻止了在shell_exec()中使用diskutil



我在Mac OS X 10 Yosemite上,所以我想知道其他人是否也遇到了同样的问题。此代码使您能够深入了解问题。制作一个index.php文件,里面是:

<?php
$exec = "diskutil list";
echo $exec;
$output = shell_exec($exec);
echo $output;

这是在使用内置的Apache+PHP版本时发生的。当使用XAMPP或Nightrain时,运行上面的命令没有问题。所以我想知道Apache或PHP版本的OSX是否会阻止某些shell_exec命令?

到目前为止我的经验:

当我在命令行中键入以下命令时:

diskutil info /dev/disk1s1

我得到了磁盘信息的完整概述。

但是当我在OSX上使用shell_exec()在PHP中执行相同的命令时,我会得到一个错误:

找不到磁盘:/dev/disk1s1

Apache被配置为使用与我的用户(user:staff)相同的所有权,并且所有其他命令都可以工作。

此外,当我在命令行中使用以下命令时:

diskutil list

我得到了一个完整的概述。但是shell_exec()没有返回任何内容,在Apache错误日志中我看到:

无法启动DiskManagement会话

我在谷歌上搜索了一下,结果为零。

首先,命令行命令是一回事,但PHP脚本中的命令是另一回事。这意味着你的命令行示例是:

 diskutil info /dev/disk1s1

但是PHP脚本中的命令遗漏了磁盘/dev/disk1s1,如下所示:

 diskutil list

太不清楚你在做什么了,这是行不通的。此外,通常在PHP脚本中,您需要为正在调用的任何二进制文件设置完整路径。所以代替这行:

$exec = "diskutil info";

将其更改为此;注意:我添加了/dev/disk1s1,所以命令有一个磁盘可以操作:

$exec = "/usr/sbin/diskutil info /dev/disk1s1";

这就是diskutil在我的Mac OS X 10.9.5设置中的位置。为了确保它在相同的路径上,使用which,如下所示:

which diskutil

它会返回这样的东西:

/usr/sbin/diskutil

当我从命令行运行它时,我是这样做的;假设测试文件名为shell_exec_test.php:

php ./shell_exec_test.php

最新更新