我有一个小小的Apple脚本,如下所示:
beep
delay 2
tell application "Finder" to activate它只是发出一种声音,等待2秒,然后将"Finder“窗口带到前台。
当我从命令行运行它时,它工作得很好。
然后,我希望PHP使用exec() php函数调用该脚本。
<?
$cmd = "/usr/bin/osascript \"myscript.scpt\"";
exec($cmd);
?>它仍然工作得很好。
但是,当我从浏览器调用相同的PHP脚本时,它不起作用!PHP启动,Apple脚本也启动,因为我可以听到蜂鸣声,但它的最后一行没有执行。
我认为这将是一个环境变量的事情,所以我确保它们都是以与终端相同的方式:
$cmd = "HOME='/Users/mikael' && … && /usr/bin/osascript \"myscript.scpt\"";变量设置正确(检查env|sort),但仍然无法在浏览器中显示的php脚本中运行我的苹果脚本,并使用标准的MacOS apache程序。
有什么想法吗?
发布于 2013-02-04 08:09:42
当osascript通过网络服务器从PHP运行时,它不是在登录上下文中运行,因此它不能将苹果事件发送到运行在桌面上的应用程序(如Finder)。如果您尝试在SSH上使用osascript,您会发现出现了类似的问题。
登录上下文是OS中一个复杂的、文档很少的区域。如果您想了解更多关于登录上下文的信息,您可能想要获得一份Amit Singh的副本。
如果你不这样做,答案通常很简单:不要依赖于osascript在web服务器上正常工作。
发布于 2013-02-04 08:57:46
好吧,我可能已经找到了一种方法,允许在浏览器内从PHP调用Apple脚本。
这并不完全令人满意,但这就是我要做的:
因此,基本上我不使用默认的macOS apache服务器,而是使用下面这个设置web服务器的服务器&也是MySQL:http://www.mamp.info/en/index.html
我提到了MAMP,但可能还有其他的。
我的Apple script最终完全使用该解决方案运行。
发布于 2013-04-26 14:31:06
我遇到了同样的问题,并且意识到apache是以www用户的身份执行的。您可以通过编辑etc/apache2/httpd.conf来更改此设置。将user更改为您的用户短名称,将组更改为staff。
https://stackoverflow.com/questions/14678840
复制相似问题