我试图通过在localhost上运行PHP来寻找允许我的Mac(OS X Yosemite)上的一些本地自动化的方法(这样我就可以轻松地将一个简单的GUI放在一起,无论它是什么我&# 39; m自动化)。
问题是让shell命令工作并具有适当的访问权限 ...这是我开始的地方:
之后,我可以让这个测试代码工作并在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"用户和组。我尝试通过改变" _www"来改变/etc/apache2/httpd.chmod中的这个。到" myusername",但之后php文件在Safari中不再有效。
无论如何,我觉得我很接近,但我不知道下一步该尝试什么!我很感激任何答案:)(我也很清楚这是一个安全降级,但我不介意,因为这是严格的本地而非公开)。
答案 0 :(得分:1)
这就是我要做的。转到命令行并键入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而不是像Cmnd_Alias
这样的ETHERWAKE
来访问所有命令但是要警告:这是一件非常危险的事情。让它访问特定命令更安全,否则任何可以在计算机上验证自己作为该用户的人都可以做任何事情。
PHP需要以管理员身份运行的任何命令都应以sudo
开头。例如:
$result = shell_exec('sudo ls');