0

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

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

任何想法?

4

3 回答 3

1

osascript通过 Web 服务器从 PHP 运行时,它没有在登录上下文中运行,因此它无法将 Apple 事件发送到在桌面上运行的应用程序(如 Finder)。osascript如果您尝试通过 SSH使用,您会发现会出现类似的问题。

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

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

于 2013-02-04T00:09:41.750 回答
0

我遇到了同样的麻烦,并意识到 apache 以用户 www 执行。您可以通过编辑 etc/apache2/httpd.conf 来更改它。将用户更改为您的用户短名称,将组更改为员工。

于 2013-04-26T06:31:06.053 回答
0

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

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

所以基本上我没有使用默认的 macOS apache 服务器,而是使用这个设置 Web 服务器和 MySQL 的服务器:http: //www.mamp.info/en/index.html

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

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

于 2013-02-04T00:57:45.907 回答