我有一个小苹果脚本如下:
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的东西仍然没有运气。
有什么想法吗?
答案 0 :(得分:1)
当osascript
从PHP运行时,通过Web服务器,它没有使用登录上下文运行,因此它无法将Apple事件发送到桌面上运行的应用程序(如Finder)。如果您尝试通过SSH使用osascript
,则会发现类似的问题。
登录上下文是OS X中一个复杂的,记录不完整的区域。如果您想了解更多关于它们的信息,您可能希望获得Amit Singh Mac OS X Internals: A Systems Approach的副本。
但是,如果不这样做,答案通常很简单:不要依赖osascript
从Web服务器正常工作。
答案 1 :(得分:0)
好的,我可能找到了一种允许从浏览器中从PHP调用Apple脚本的方法。
这并不完全令人满意,但这就是我要做的事情:
所以基本上不是使用默认的macOS apache服务器,而是使用这个设置web服务器和服务器的服务器。还有MySQL:http://www.mamp.info/en/index.html
我提到MAMP,但可能还有其他人。
我的Apple脚本最终完全使用该解决方案运行。
答案 2 :(得分:0)
我遇到了同样的麻烦,并意识到apache以用户www的身份执行。 您可以通过编辑etc / apache2 / httpd.conf来更改此设置。将用户更改为您的用户短名称并将其更改为员工。