授予对本地主机 PHP 的访问权限以执行外部程序(如 Brackets)- Mac OSX

Giving access to localhost PHP to execute external programs (like Brackets) - Mac OSX

我正在尝试通过使用 运行 [=51= 来寻找在我的 Mac (OS X Yosemite) 上允许一些本地自动化的方法] 在本地主机上(这样我就可以轻松地为我正在自动化的任何东西拼凑一个简单的 GUI)。

问题是让 shell 命令在适当的访问权限下工作 ...这是我开始的地方:

  1. 复制“/etc/php.ini.default”并将其重命名为“/etc/php.ini”
  2. 将 "safe_mode = Off" 添加到 php.ini 文件
  3. 重启本地主机 - "sudo apachectl restart"

之后,我可以让这个测试代码工作并在 PHP 页面中打印结果:

$result = shell_exec('ls');
echo $result;

现在我想做的是用编辑器程序打开文件 (Brackets)。我可以使用以下命令在终端中执行此操作:

brackets /Users/myusername/mypath/myfile.html

那...在终端中有效,但在 php 脚本中, 有效:

$result = shell_exec('brackets /Users/myusername/mypath/myfile.html');
echo $result;

我假设这是用户或权限问题?我没有得到任何类型的输出或错误。我知道 locahost 与“_www”用户和组一起运行。我尝试在 /etc/apache2/httpd.chmod 中通过将“_www”更改为 "myusername" 来更改它,但是之后 php 文件在 Safari 中不再工作。

无论如何,我觉得我很接近,但我不知道下一步该尝试什么!我很感激任何答案:)(我也很清楚这有点安全降级,但我不介意,因为这完全是本地的,而不是 public)。

这就是我会做的。转到命令行并键入 sudo visudo。这将打开 vim(如果您不知道如何使用,请查看如何使用 vim)以便您可以编辑您的 sudoers 文件,它控制谁可以使用 sudo获得做什么的权限。我在 Ubuntu 机器上完成了此操作,以授予 PHP 对 etherwake 的访问权限。这是我的 sudoers 文件:

User_Alias      PHP_USER = www-data
Cmnd_Alias      ETHERWAKE = /usr/sbin/etherwake
PHP_USER        ALL = NOPASSWD: ETHERWAKE

只需将 www-data 切换为计算机上 PHP 用户的名称。

我相信您可以指定 ALL 而不是像 ETHERWAKE 这样的 Cmnd_Alias 来访问所有命令,但请注意:这是一件极其危险的事情。让它访问特定命令要安全得多,否则任何可以在其计算机上将自己验证为该用户的人都可以做任何事情。

PHP 作为管理员运行 需要的任何命令都应以 sudo 开头。例如:

$result = shell_exec('sudo ls');