2013-02-04 33 views
0

我有一个小苹果脚本如下:PHP exec和OSASCRIPT?

beep 
delay 2 
tell application "Finder" to activate 

它只是发出声音,等待2秒钟,然后把“查找”窗口前台。

当我从命令行运行它时,它工作正常。

然后,我希望PHP使用exec()php函数调用该脚本。

<? 
$cmd = "/usr/bin/osascript \"myscript.scpt\""; 
exec($cmd); 
?> 

它仍然正常工作。

但是当我从浏览器调用相同的PHP脚本时,它不起作用! PHP启动后,Apple脚本也启动了,因为我可以听到哔声,但它的最后一行不会被执行。

我认为这将是一个环境变量的事情,所以我确信他们都以同样的方式在终端:

$cmd = "HOME='/Users/mikael' && … && /usr/bin/osascript \"myscript.scpt\""; 

的变量设置正确(如支票与ENV |排序),但仍没有运气,在浏览器中显示的php脚本中运行我的苹果脚本,并使用标准的MacOS apache的东西。

有什么想法?

回答

1

osascript从PHP运行,通过Web服务器,它没有运行登录上下文,所以它不能将Apple事件发送到桌面上运行的应用程序(如Finder)。如果您尝试通过SSH使用osascript,则会发现类似的问题。

登录上下文是OS X的一个复杂的,记录不完整的区域。如果您想了解更多关于它们的信息,您可能希望获得Amit Singh的副本Mac OS X Internals: A Systems Approach

但是,如果您不这样做,答案通常很简单:不要依赖osascript从Web服务器正常工作。

+0

谢谢,甚至不知道在macOS中有什么叫做Login contexts会检查出来。您如何看待我在下面提到的解决方法? – MikaelW

+0

这不是一个非常好的解决方法。这基本上取决于MAMP启动程序与登录上下文一起运行的事实;因此,在生产中难以可靠地工作。 – duskwuff

0

好的,我可能已经找到了一种方法,允许在浏览器中从PHP调用Apple脚本。

这是不能令人完全满意,但是这是我要做的:

所以基本上而不是使用默认的MacOS的Apache服务器,我用这一个,设置了一个网络服务器&也是MySQL的:http://www.mamp.info/en/index.html

我提到MAMP,但可能有其他的。

我的Apple脚本终于完全使用该解决方案运行。

0

我有同样的麻烦,并认识到,Apache作为用户www执行。 你可以通过编辑etc/apache2/httpd.conf来改变它。将用户更改为您的用户短名称和组员工。