2013-02-04 32 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來改變它。將用戶更改爲您的用戶短名稱和組員工。