PHP exec和OSASCRIPT?

时间:2013-02-04 00:05:42

标签: php apache exec osascript

我有一个小苹果脚本如下:

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的东西仍然没有运气。

有什么想法吗?

3 个答案:

答案 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来更改此设置。将用户更改为您的用户短名称并将其更改为员工。